Python Spark API呼び出しを介したアプリケーション-アプリケーションの送信時-応答-ワーカーへのSSHの失敗
My pythonアプリケーションは
/root/spark/work/driver-id/wordcount.py
エラーは
/root/spark/work/driver-id/stderr
次のエラーを表示します-
Traceback (most recent call last):
File "/root/wordcount.py", line 34, in <module>
main()
File "/root/wordcount.py", line 18, in main
sc = SparkContext(conf=conf)
File "/root/spark/python/lib/pyspark.Zip/pyspark/context.py", line 115, in __init__
File "/root/spark/python/lib/pyspark.Zip/pyspark/context.py", line 172, in _do_init
File "/root/spark/python/lib/pyspark.Zip/pyspark/context.py", line 235, in _initialize_context
File "/root/spark/python/lib/py4j-0.9-src.Zip/py4j/Java_gateway.py", line 1064, in __call__
File "/root/spark/python/lib/py4j-0.9-src.Zip/py4j/protocol.py", line 308, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling None.org.Apache.spark.api.Java.JavaSparkContext.
: Java.io.FileNotFoundException: File file:/tmp/spark-events does not exist.
at org.Apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.Java:402)
at org.Apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.Java:255)
at org.Apache.spark.scheduler.EventLoggingListener.start(EventLoggingListener.scala:100)
at org.Apache.spark.SparkContext.<init>(SparkContext.scala:549)
at org.Apache.spark.api.Java.JavaSparkContext.<init>(JavaSparkContext.scala:59)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:57)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:526)
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.Java:234)
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.Java:381)
at py4j.Gateway.invoke(Gateway.Java:214)
at py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.Java:79)
at py4j.commands.ConstructorCommand.execute(ConstructorCommand.Java:68)
at py4j.GatewayConnection.run(GatewayConnection.Java:209)
at Java.lang.Thread.run(Thread.Java:745)
/ tmp/spark-eventsが存在しないことを示しています-これはtrueです。ただし、wordcount.py
from pyspark import SparkContext, SparkConf
... few more lines ...
def main():
conf = SparkConf().setAppName("MyApp").setMaster("spark://ec2-54-209-108-127.compute-1.amazonaws.com:7077")
sc = SparkContext(conf=conf)
sc.stop()
if __name__ == "__main__":
main()
/tmp/spark-events
は、Sparkイベントログを保存する場所です。マスターマシンにこのディレクトリを作成するだけで設定が完了します。
$mkdir /tmp/spark-events
$ Sudo /root/spark-ec2/copy-dir /tmp/spark-events/
RSYNC'ing /tmp/spark-events to slaves...
ec2-54-175-163-32.compute-1.amazonaws.com
ローカルマシンにspark履歴サーバーをセットアップしようとしたときに、同じ 'File file:/ tmp/spark-events does not exist。'エラーが発生しました。ログディレクトリをカスタマイズしました。これを解決するには、2つのことを行う必要がありました。
spark.history.fs.logDirectory /mycustomdir spark.eventLog.enabled true
ln -fs /tmp/spark-events /mycustomdir
理想的には、ステップ1で問題を完全に解決できたはずですが、それでもリンクを作成する必要があったので、見逃した設定が他にあった可能性があります。とにかく、一度これを行うと、履歴サーバーを実行し、webuiに新しいジョブが記録されるのを見ることができました。クライアント/ドライバープログラムにspark.eventLog.dirを使用します
spark.eventLog.dir=/usr/local/spark/history
履歴サーバーにspark.history.fs.logDirectoryを使用します
spark.history.fs.logDirectory=/usr/local/spark/history
スタンドアロンクラスタ非hdfsモードのスパーク履歴サーバーを有効にする方法
少なくともSparkバージョン2.2.1に従って
作成したばかりの/tmp/spark-events
を{master}ノードで実行し、クラスター上の他のノードに配布して動作させます。
mkdir /tmp/spark-events
rsync -a /tmp/spark-events {slaves}:/tmp/spark-events
私のspark-default.conf:
spark.history.ui.port=18080
spark.eventLog.enabled=true
spark.history.fs.logDirectory=hdfs:///home/elon/spark/events