2015-08-13 36 views
6

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?

cevap

5

Yerel yerleşik modda çalıştığınız için, HDFS dikkate alınmıyor. Bu nedenle, hata hdfs://localhost:9000/user/hive/warehouse/test yerine file:/user/hive/warehouse/test diyor. Yerel makinenizde /user/hive/warehouse/test olmasını bekler. Yerel olarak oluşturmayı deneyin.

+0

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. –

4

Bu, gelecekte başkalarına yardımcı olması durumunda, HiveContext kullanan Spark koduna bazı birim testleri yazmayı deniyorum. Ben testler için dosyaların yazıldığı yolu değiştirmek için, hiveContext.setConf çağırmak gerektiğini buldum. Ayrıca OP ile aynı yaklaşımı denedim, bir SET sorgusu gerçekleştirdim, ama işe yaramadı. Aşağıdaki işe yarıyor!

hive.setConf("hive.metastore.warehouse.dir", 
    "file:///custom/path/to/hive/warehouse") 

Ve artık daha kullanışlı bu biraz yapmak, Özellikle benim kod erişimi vardı bir konuma bu yolu ayarlayın: Bununla

hive.setConf("hive.metastore.warehouse.dir", 
    getClass.getResource(".").toString) 

, ben birim testleri yazabilir oldum koduma dayanarak, kovan sorgularını ve Spark API'yi kullanıyorum.

+2

Açık bir şekilde sağlanmayan 'saveAsTable()' ı buldum. yol bu ayarı yok sayar ve varsayılanı "kovan-site.xml" 'den kullanır. – Sim

İlgili konular