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のクラスパスにファイルを追加する正しい方法は何ですか?
spark.executor.extraClassPath
プロパティの値は、EXECTOR上のアプリケーションの作業ディレクトリを基準にしているようです。
したがって、このプロパティを正しく使用するには、--files <configuration file>
を使用して最初にSparkでファイルをすべてのエグゼキュータの作業ディレクトリにコピーし、次にspark.executor.extraClassPath=./
を使用してexecutorの作業ディレクトリーからクラスパスへこの組み合わせにより、executorは構成ファイルから値を読み取ることができます。
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
}