2014-10-10 102 views
2

我試圖使用AccumuloInputFormatnewAPIHadoopRDDApache Spark作業(用Java編寫)訪問Accumulo 1.6。爲了做到這一點,我必須通過調用setZooKeeperInstance方法告訴AccumuloInputFormat ZooKeeper的位置。該方法採用指定各種相關屬性的ClientConfiguration對象。如何在YARN Spark作業中設置環境變量?

我正在通過調用靜態loadDefault方法創建我的ClientConfiguration對象。這種方法應該在各個地方查找client.conf文件以從中加載其默認值。它應該看的地方之一是$ACCUMULO_CONF_DIR/client.conf

因此,我試圖設置ACCUMULO_CONF_DIR環境變量,使它在Spark運行作業時可見(供參考,我試圖在yarn-cluster部署模式下運行)。我還沒有找到成功的方法。

到目前爲止,我已經試過:

  • 在他們spark-defaults.conf

無呼籲SparkConf

  • 導出ACCUMULO_CONF_DIRsetExecutorEnv("ACCUMULO_CONF_DIR", "/etc/accumulo/conf")spark-env.sh
  • 設置spark.executorEnv.ACCUMULO_CONF_DIR工作過。在撥打setZooKeeperInstance之前打印環境時,ACCUMULO_CONF_DIR未出現。

    如果它是相關的,我使用的是一切的CDH5版本。

    這裏是我想要做的一個例子(進口和異常處理冷落爲了簡潔):

    public class MySparkJob 
    { 
        public static void main(String[] args) 
        { 
         SparkConf sparkConf = new SparkConf(); 
         sparkConf.setAppName("MySparkJob"); 
         sparkConf.setExecutorEnv("ACcUMULO_CONF_DIR", "/etc/accumulo/conf"); 
         JavaSparkContext sc = new JavaSparkContext(sparkConf); 
         Job accumuloJob = Job.getInstance(sc.hadoopConfiguration()); 
         // Foreach loop to print environment, shows no ACCUMULO_CONF_DIR 
         ClientConfiguration accumuloConfiguration = ClientConfiguration.loadDefault(); 
         AccumuloInputFormat.setZooKeeperInstance(accumuloJob, accumuloConfiguration); 
         // Other calls to AccumuloInputFormat static functions to configure it properly. 
         JavaPairRDD<Key, Value> accumuloRDD = 
          sc.newAPIHadoopRDD(accumuloJob.getConfiguration(), 
               AccumuloInputFormat.class, 
               Key.class, 
               Value.class); 
        } 
    } 
    
  • 回答

    2

    所以,我發現這個問題的答案,而寫的問題(對不起,信譽者) 。問題是CDH5使用Spark 1.0.0,並且我通過YARN運行作業。顯然,YARN模式並不關注執行程序環境,而是使用環境變量SPARK_YARN_USER_ENV來控制其環境。因此,確保SPARK_YARN_USER_ENV包含ACCUMULO_CONF_DIR=/etc/accumulo/conf工程,並使ACCUMULO_CONF_DIR在問題的源示例中指定點處的環境中可見。

    獨立模式和YARN模式工作方式的差異導致了SPARK-1680,這在Spark 1.1.0中報告爲固定。