来自Kafka的Spark流返回结果在本地但不在Yarn上工作

时间:2018-01-16 01:35:14

标签: hadoop apache-spark hdfs spark-streaming

我正在使用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),但没有成功

3 个答案:

答案 0 :(得分:1)

您能通过Yarn Resource Manager UI查看应用程序stdout日志吗?

  1. 关注您的Yarn Resource Manager链接。(http://localhost:8088)。
  2. 在运行的应用程序列表中找到您的应用程序,并按照应用程序的链接进行操作。 (http://localhost:8088/application_1396885203337_0003/
  3. 打开&#34;标准输出:文件总长度为xxxx字节&#34;链接以查看浏览器上的日志文件。
  4. 希望这有帮助。

答案 1 :(得分:1)

当处于本地模式时,应用程序在一台机器上运行,您可以看到代码中给出的所有打印件。当在集群上运行时,一切都处于分布式模式并在不同的机器/核心上运行,将无法看到给出的印刷品 尝试使用命令yarn logs -applicationId

获取spark生成的日志

答案 2 :(得分:0)

您可能是别名,并且未在纱线节点上定义您的别名,或者由于其他原因未在纱线节点上对其进行解析。