我試圖使用AccumuloInputFormat
和newAPIHadoopRDD
從Apache 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_DIR
setExecutorEnv("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);
}
}