我正在尝试使用with从Apache Spark作业(用 Java 编写)访问Accumulo 1.6。为了做到这一点,我必须通过调用该方法来告诉ZooKeeper 的位置。此方法接受一个指定各种相关属性的对象。AccumuloInputFormat
newAPIHadoopRDD
AccumuloInputFormat
setZooKeeperInstance
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);
}
}