Yerleşik yerel modda Apache Spark kullanıyorum. pom.xml ve aynı sürümde bulunan tüm bağımlılıklarım var (spark-core_2.10, spark-sql_2.10 ve spark-hive_2.10).Katıştırılmış modda kıvılcım - kullanıcı/kovan/depo bulunamadı
Sadece bir masa (Parke olarak depolanmış) oluşturmak için bir HiveQL sorgusu çalıştırmak istiyorum. Aşağıdaki (daha doğrusu basit) kodu Koşu
:
public class App {
public static void main(String[] args) throws IOException, ClassNotFoundException {
SparkConf sparkConf = new SparkConf().setAppName("JavaSparkSQL").setMaster("local[2]").set("spark.executor.memory", "1g");
JavaSparkContext ctx = new JavaSparkContext(sparkConf);
HiveContext sqlContext = new org.apache.spark.sql.hive.HiveContext(ctx.sc());
String createQuery = "CREATE TABLE IF NOT EXISTS Test (id int, name string) STORED AS PARQUET";
sqlContext.sql(createQuery);
}
}
... Aşağıdaki istisna dönüyor:
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:file:/user/hive/warehouse/test is not a directory or unable to create one)
Ben projenin kök oluşturulur metastore_db
klasörü görebilirsiniz.
Çevrede aradım ve bulduğum çözümler işe yaramadı - bunların çoğu gömülü modda değildi.
- Bir çözüm izinleri denetlemekti, aynı şeyi her şey için kullanıyorum.
- Başka bir çözüm de HDFS'de el ile klasör oluşturmaktı, ben yaptım ve/user/hive/warehouse/test adresine gidiyorum.
- Bir çözüm,
sqlContext.sql("SET hive.metastore.warehouse.dir=hdfs://localhost:9000/user/hive/warehouse");
ekleyerek metastore el ile ayarlanmıştı.
Şu anda bir fikrim yok, birisi başka öneride bulunabilir mi?
Aynı şeyi denedim, bir kovan tablosu oluşturdum ama yerel sistemimde Hive makinesi yerine oluşturuldu. objHiveContext.sql ("Tablo yahoo_orc_table (tarih STRING, open_price FLOAT, high_price FLOAT, LOW_PRICE FLOAT, close_price FLOAT, hacim INT, adj_price FLOAT) orc olarak depolanan oluşturmak") nasıl modunu değiştirmek için? objHiveContext.setConf ("hive.metastore.warehouse.dir", "hdfs: // myServerIP: portNumber/apps/kovan/depo") ile denedim. –