4

withを使用して、 Apache Sparkジョブ (Java で記述)からAccumulo 1.6にアクセスしようとしています。これを行うには、メソッドを呼び出して ZooKeeper の場所を指定する必要があります。このメソッドは、関連するさまざまなプロパティを指定するオブジェクトを受け取ります。AccumuloInputFormatnewAPIHadoopRDDAccumuloInputFormatsetZooKeeperInstanceClientConfiguration

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

それらのどれも機能していません。を呼び出す前に環境を印刷するとsetZooKeeperInstanceACCUMULO_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);
    }
}
4

1 に答える 1

3

そのため、質問を書いているときにこれに対する答えを発見しました(申し訳ありませんが、評判を求めています)。問題は、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 で修正されたと報告されています。

于 2014-10-10T19:27:05.663 に答える