2017-04-07 71 views
0

我是Spark的新手,刚刚在群集上运行(运行社区版MapR的9节点群集上的Spark 2.0.1)。我通过通过Yarn集群与客户端提交时的Spark输出

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

提交单词计数例子,得到下面的输出

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. 

所以没有错误,但我没有看到该单词计数结果。我错过了什么?我在我的历史服务器中看到这份工作,并表示它已成功完成。此外,我检查了我的用户目录中的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

的原因为输出不打印的是:

当您在spark-client模式下运行时,您启动作业的节点是DRIVER,并且当您收集结果时,它将在该节点上收集并打印出来。

在纱线丛集模式下,您的驱动程序是其他节点,而不是您启动作业的其他节点。因此,当您调用.collect函数时,结果将被收集并打印在该节点上。您可以在驱动程序的系统输出中找到正在打印的结果。 更好的方法是将输出写入HDFS的某处。

的原因吗spark.yarn.jars警告:

为了运行火花工作纱线需要一些可用的二进制文件的集群中的所有节点上,如果这些二进制文件不可用,则作为的一部分作业准备,Spark将创建一个包含$ SPARK_HOME/jars下所有jar的zip文件并将其上传到分布式缓存。

要解决这个问题:

默认情况下,纱线的Spark将使用本地安装星火罐子,但星火罐,也可以在HDFS世界可读(CHMOD 777)的位置。这允许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'警告。但是,wordcount输出呢? – Sal

+0

你能分享你的代码吗? –

+0

添加了代码。这是Spark附带的默认wordcloud代码。 – Sal

相关问题