web-dev-qa-db-ja.com

すべてのクラスパスに設定ファイルを追加する方法Spark executors in Spark 1.2.0?

Typesafe Config https://github.com/typesafehub/config を使用して、Sparkジョブを構成ファイルを使用して、yarn-clusterモードで実行しています。 。Typesafe Configのデフォルトの動作は、正規表現に一致する名前のリソースのクラスパスを検索し、ConfigFactory.load()を使用してそれらを構成クラスに自動的にロードすることです(ここでは、目的のファイルがapplication.confであると想定しています) )。

--driver-class-path <directory containing configuration file>を使用して構成ファイルをドライバーにロードできますが、--conf spark.executor.extraClassPath=<directory containing configuration file>を使用しても、リソースがすべてのエグゼキューターのクラスパスに配置されません。エグゼキュータは、クラスパスに追加しようとしている構成ファイルに存在するキーの特定の構成設定を見つけられないと報告しています。

Sparkを使用してすべてのエグゼキューターJVMのクラスパスにファイルを追加する正しい方法は何ですか?

19
MawrCoffeePls

spark.executor.extraClassPathプロパティの値は、EXECTOR上のアプリケーションの作業ディレクトリを基準にしているようです。

したがって、このプロパティを正しく使用するには、--files <configuration file>を使用して最初にSparkでファイルをすべてのエグゼキュータの作業ディレクトリにコピーし、次にspark.executor.extraClassPath=./を使用してexecutorの作業ディレクトリーからクラスパスへこの組み合わせにより、executorは構成ファイルから値を読み取ることができます。

20
MawrCoffeePls

SparkContext addFileメソッドを使用します

val sc: SparkContext = {
  val sparkConf = new SparkConf()
    .set("spark.storage.memoryFraction", "0.3")
    .set("spark.driver.maxResultSize", "10g")
    .set("spark.default.parallelism", "1024")
    .setAppName("myproject")
  sparkConf.setMaster(getMaster)
  val sc = new SparkContext(sparkConf)
  sc.addFile("application.conf")
  sc
}
3
santifinland