2017-04-07 10 views
0

私はSparkを初めて使用しており、これをクラスター(MapRのCommunityバージョンを実行している9ノードクラスターのSpark 2.0.1)上で実行しています。私はYarnクラスターからクライアントへの提出時にスパーク出力

./bin/spark-submit --master yarn --jars ~/hadoopPERMA/jars/hadoop-lzo-0.4.21-SNAPSHOT.jar examples/src/main/python/wordcount.py ./README.md 

経由WORDCOUNT例を提出し、すべてが正常に機能しているよう

17/04/07 13:21:34 WARN Client: Neither spark.yarn.jars nor spark.yarn.archive is set, falling back to uploading libraries under SPARK_HOME. 
: 68 
help: 1 
when: 1 
Hadoop: 3 
... 

が見える次の出力を取得します。私は--deploy-mode clusterを追加すると、私は次のような出力を得る:

17/04/07 13:23:52 WARN Client: Neither spark.yarn.jars nor spark.yarn.archive is set, falling back to uploading libraries under SPARK_HOME. 

ので、エラーなしをが、私はWORDCOUNT結果を見ていないです。私は何が欠けていますか?私は自分のヒストリーサーバーでその仕事を見て、それは正常に完了したと言います。また、私はDFSで私のユーザーディレクトリをチェックするが、新しいファイルは、この空のディレクトリを除いて書かれていなかった。/user/myuser/.sparkStaging

コード(スパークに同梱wordcount.py例):

from __future__ import print_function 
import sys 
from operator import add 
from pyspark.sql import SparkSession 


if __name__ == "__main__": 
    if len(sys.argv) != 2: 
     print("Usage: wordcount <file>", file=sys.stderr) 
     exit(-1) 

    spark = SparkSession\ 
     .builder\ 
     .appName("PythonWordCount")\ 
     .getOrCreate() 

    lines = spark.read.text(sys.argv[1]).rdd.map(lambda r: r[0]) 
    counts = lines.flatMap(lambda x: x.split(' ')) \ 
       .map(lambda x: (x, 1)) \ 
       .reduceByKey(add) 
    output = counts.collect() 
    for (word, count) in output: 
     print("%s: %i" % (word, count)) 

    spark.stop() 

答えて

3

あなたの出力の理由

スパーク・クライアント・モードで実行すると、ジョブを開始しているノードがDRIVERであり、結果を収集すると、そのノードに収集され、そのノードに印刷されます。

糸クラスターモードでは、ドライバーはジョブを開始したノードではなく、別のノードです。したがって、.collect関数を呼び出すと、結果がそのノードで収集され、そのノードに出力されます。ドライバのsys-outに出力結果が表示されます。 よりよいアプローチは、出力をHDFSのどこかに書き込むことです。

あなたspark.yarn.jars警告の理由は次のとおりです。

スパークジョブ糸を実行するためにこれらのバイナリは、その後の一部として利用できない場合、クラスタのすべてのノードに、いくつかのバイナリが利用できる必要がありますSparkは$ SPARK_HOME/jarsにあるすべてのjarファイルを作成し、分散キャッシュにアップロードします。この解決するため

:デフォルトでは

を、YARNのスパークは、ローカルにインストールスパークのjarファイルを使用しますが、スパークの瓶も、HDFS上の世界が読める(chmodの777)の位置にあってもよいです。これにより、YARNはアプリケーションを実行するたびに配布する必要がないように、YARNをノードにキャッシュすることができます。たとえば、HDFS上のjarを指すには、spark.yarn.jarsをhdfs:/// some/pathに設定します。

./bin/spark-submit --master yarn --jars ~/hadoopPERMA/jars/hadoop-lzo-0.4.21-SNAPSHOT.jar examples/src/main/python/wordcount.py ./README.md --conf spark.yarn.jars="hdfs:///some/path" 

出典:http://spark.apache.org/docs/latest/running-on-yarn.html

+0

私は、これは 'spark.yarn.jarsもspark.yarn.archiveどちらを扱うと仮定しているがset'警告であるように、あなたのコードを実行して、あなたのjarファイルを配置した後

。しかし、wordcountの出力はどうですか? – Sal

+0

あなたのコードを共有できますか? –

+0

コードが追加されました。 Sparkに同梱されているデフォルトのワードクラウドコードです。 – Sal

関連する問題