hadoop - 在 Yarn 集群上运行时 Spark 批处理未完成

标签 hadoop apache-spark spark-streaming couchbase hadoop-yarn

设置场景
我正在努力使 Spark 流应用程序(Spark 2.2.1 with Scala)在 Yarn 集群(Hadoop 2.7.4)上运行。

到目前为止,我已经成功地使用 spark-submit 将应用程序提交到 Yarn 集群。我可以看到接收器任务正确启动并从数据库(Couchbase Server 5.0)中获取大量记录,我还可以看到记录被分成批处理。

问题
当我查看 Spark Web UI 上的流统计信息时,我可以看到我的批处理从未被处理过。我看到有 0 条记录的批处理处理并完成,但是当有记录的批处理开始处理时,它永远不会完成。有一次它甚至卡在了 0 条记录的批处理上。

我什至尝试尽可能简化 SteamingContext 上的输出操作。但是仍然使用非常简单的输出操作 print() 我的批处理从未被处理过。日志不显示任何警告或错误。

有谁知道哪里出了问题?非常感谢任何有关如何解决此问题的建议。

更多信息
Spark 应用程序的主类是从 this example 构建的(第一个)来自 Couchbase Spark Connector 文档结合 this example使用 Spark 文档中的检查点。

现在我有 3230 个事件批处理(3229 个排队和 1 个处理)和 1 个已完成批处理(有 0 条记录)并且应用程序已经运行了 4 小时 30 分钟......并且每 5 秒添加另一个批处理.

如果我查看执行程序的“线程转储”,我会看到很多 WAITING、TIMED WAITING 和一些 RUNNABLE 线程。该列表将填满 3 个屏幕截图,因此我只会在需要时发布它。

下面是一些 Web UI 的屏幕截图

执行器概述

Spark 作业概述

带资源的节点概览

容量调度程序概述

最佳答案

根据屏幕截图,您有 2 个内核,其中 1 个用于驱动器,另一个用于接收器。您没有进行实际处理的核心。请增加核心数并重试。

引用:https://spark.apache.org/docs/latest/streaming-programming-guide.html#input-dstreams-and-receivers

如果您使用基于接收器(例如套接字、Kafka、Flume 等)的输入 DStream,那么将使用单个线程来运行接收器,而不会留下任何线程来处理接收到的数据。因此,在本地运行时,始终使用“local[n]”作为主 URL,其中 n > 要运行的接收器数量(有关如何设置主的信息,请参阅 Spark 属性)。

关于hadoop - 在 Yarn 集群上运行时 Spark 批处理未完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48915522/

相关文章:

hadoop - Pig 0.12.0 - 从字符串中提取最后两个字符

hadoop - Apache Pig 和 Apache Hive 有什么区别?

apache-spark - 将可为空的列作为参数传递给 Spark SQL UDF

apache-spark - 连续信息 JobScheduler :59 - Added jobs for time *** ms in my Spark Standalone Cluster

python - PySpark - Hive 上下文不返回结果但 SQL 上下文返回类似查询

java - 是否可以使现有的 mapreduce 程序从输入文件的指定偏移量开始运行

python - 使用 PySpark 将 JSON 文件读取为 Pyspark Dataframe?

hadoop - Spark 1.2 : Write single record into multiple files (blacklisted)

elasticsearch - 如何通过Spark Streaming实时更新Elasticsearch文档?

apache-spark - 使用 Spark Streaming 填充的 Cassandra 表上的 Spark SQL