withを使用して、 Apache Sparkジョブ (Java で記述)からAccumulo 1.6にアクセスしようとしています。これを行うには、メソッドを呼び出して ZooKeeper の場所を指定する必要があります。このメソッドは、関連するさまざまなプロパティを指定するオブジェクトを受け取ります。AccumuloInputFormat
newAPIHadoopRDD
AccumuloInputFormat
setZooKeeperInstance
ClientConfiguration
ClientConfiguration
静的loadDefault
メソッドを呼び出してオブジェクトを作成しています。このメソッドはclient.conf
、デフォルトをロードするファイルをさまざまな場所で検索することになっています。見えるはずの場所の 1 つが$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);
}
}