DataprocクラスターでSparkジョブを実行しようとしていますが、Yarnが正しく構成されていないため、Sparkは開始されません。
シェル(マスター上でローカル)から「spark-Shell」を実行しているとき、およびローカルマシンからweb-GUIとgcloudコマンドラインユーティリティを介してジョブをアップロードしているときに、次のエラーが発生します。
15/11/08 21:27:16 ERROR org.Apache.spark.SparkContext: Error initializing SparkContext.
Java.lang.IllegalArgumentException: Required executor memory (38281+2679 MB) is above the max threshold (20480 MB) of this cluster! Please increase the value of 'yarn.s
cheduler.maximum-allocation-mb'.
/etc/hadoop/conf/yarn-site.xml
の値を変更しようとしましたが、何も変更されませんでした。そのファイルから構成を取得することはないと思います。
複数のサイト(主にヨーロッパ)で複数のクラスターの組み合わせを試しましたが、これは低メモリバージョン(4コア、15 GBメモリ)でのみ機能しました。
つまりこれは、yarnのデフォルトで許可されているよりも高いメモリ用に構成されたノードでのみ問題になります。
あなたが遭遇しているこれらの問題について申し訳ありません!これは既知の問題の一部であり、特定のメモリ設定がワーカーマシンのサイズではなくマスターマシンのサイズに基づいて計算されるようです。今後のリリースでこれを修正する予定です。
現在、2つの回避策があります。
次のようなSSH接続から実行している場合は、--conf
フラグを使用して、spark.executor.memoryとspark.executor.coresを明示的に設定します。
spark-Shell --conf spark.executor.memory=4g --conf spark.executor.cores=2
または、gcloud beta dataproc
を実行している場合は、--properties
を使用します。
gcloud beta dataproc jobs submit spark --properties spark.executor.memory=4g,spark.executor.cores=2
必要に応じて、エグゼキュータごとのコア/メモリの数を調整できます。小さなエグゼキュータの側でエラーを起こし、YARNに各ワーカーに多くのエグゼキュータをパックさせるのは問題ありませんが、spark.executor.memoryを各YARNコンテナとspark.executorで使用可能なフルサイズに設定することで、エグゼキュータごとのオーバーヘッドを節約できます。各ワーカーのすべてのコアへの.cores。
編集:1月27日の時点で、 リリースノート に記載されているように、新しいDataprocクラスターがマスター/ワーカーマシンタイプの任意の組み合わせに対して正しく構成されるようになりました。