我正在使用Cloudera的VM CDH 5.12,spark v1.6,kafka(由yum安装)v0.10和python 2.66以及scala 2.10
下面是我正在运行的一个简单的spark应用程序。它从kafka获取事件并在map reduce之后打印它。
jquery
当我使用以下命令(本地)提交上述代码时,它运行良好
from __future__ import print_function
import sys
from pyspark import SparkContext
from pyspark.streaming import StreamingContext
from pyspark.streaming.kafka import KafkaUtils
if __name__ == "__main__":
if len(sys.argv) != 3:
print("Usage: kafka_wordcount.py <zk> <topic>", file=sys.stderr)
exit(-1)
sc = SparkContext(appName="PythonStreamingKafkaWordCount")
ssc = StreamingContext(sc, 1)
zkQuorum, topic = sys.argv[1:]
kvs = KafkaUtils.createStream(ssc, zkQuorum, "spark-streaming-consumer", {topic: 1})
lines = kvs.map(lambda x: x[1])
counts = lines.flatMap(lambda line: line.split(" ")) \
.map(lambda word: (word, 1)) \
.reduceByKey(lambda a, b: a+b)
counts.pprint()
ssc.start()
ssc.awaitTermination()
但是当我使用以下命令(YARN)提交相同的上述代码时,它不起作用
spark-submit --master local[2] --jars /usr/lib/spark/lib/spark-examples.jar testfile.py <ZKhostname>:2181 <kafka-topic>
以下是在YARN上运行时生成的日志(剪短它们,日志可能与上面提到的火花设置不同):
spark-submit --master yarn --deploy-mode client --jars /usr/lib/spark/lib/spark-examples.jar testfile.py <ZKhostname>:2181 <kafka-topic>
在此之后,作业才开始重复以下行(在流上下文设置了一些延迟之后)并且不打印输出kafka的流,而使用完全相同的代码在本地主服务上执行作业。
有趣的是,每次发生卡夫卡事件时都会打印以下行(图片的火花记忆设置增加)
请注意:
数据是kafka,我可以在消费者控制台中看到 我也试过增加执行者的momory(3g)和网络超时时间(800s),但没有成功
答案 0 :(得分:1)
您能通过Yarn Resource Manager UI查看应用程序stdout日志吗?
希望这有帮助。
答案 1 :(得分:1)
当处于本地模式时,应用程序在一台机器上运行,您可以看到代码中给出的所有打印件。当在集群上运行时,一切都处于分布式模式并在不同的机器/核心上运行,将无法看到给出的印刷品 尝试使用命令yarn logs -applicationId
获取spark生成的日志答案 2 :(得分:0)
您可能是别名,并且未在纱线节点上定义您的别名,或者由于其他原因未在纱线节点上对其进行解析。