我试图访问Accumulo 1.6从Apache的星火使用的作业(Java编写的)AccumuloInputFormat
用newAPIHadoopRDD
。为了做到这一点,我必须AccumuloInputFormat
通过调用该setZooKeeperInstance
方法来告知在哪里定位ZooKeeper 。此方法采用一个ClientConfiguration
对象,该对象指定各种相关属性。
我ClientConfiguration
通过调用静态loadDefault
方法来创建对象。该方法应该在各个位置查找client.conf
文件以从中加载其默认值。它应该看的地方之一是$ACCUMULO_CONF_DIR/client.conf
。
因此,我试图以ACCUMULO_CONF_DIR
这样的方式设置环境变量,使其在Spark运行作业时可见(作为参考,我试图在yarn-cluster
部署模式下运行)。我尚未找到成功完成此操作的方法。
到目前为止,我已经尝试过:
setExecutorEnv("ACCUMULO_CONF_DIR", "/etc/accumulo/conf")
上SparkConf
ACCUMULO_CONF_DIR
在spark-env.sh
spark.executorEnv.ACCUMULO_CONF_DIR
在spark-defaults.conf
他们都没有工作。当我在调用之前打印环境时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);
}
}
因此,我在写问题时(抱歉,寻求声誉的人)找到了答案。问题是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中已修复。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句