在Spark Streaming中跟踪记录/块进度

时间:2019-03-23 14:29:11

标签: apache-spark spark-streaming

我试图了解在 Spark Streaming 应用程序中记录如何从源到接收。我知道:

  • 一个DStream由多个RDD组成
  • 根据batchInterval(由用户提供,例如1秒),一个RDD代表流的一个微批。
  • 一个RDD具有多个分区
  • 一个分区就是一项任务
  • 根据blockInterval创建块(默认为200ms)

让我们以JavaStatefulNetworkWordCount为例。这里的源是一个套接字。我可以看到写入netcat的单词被缓冲到称为input-0-<timestamp>的块中,并根据给定的StorageLevel被复制。我可以看到正在生成一个任务,并在执行程序上对其进行了处理,并将结果发送给驱动程序:

INFO CoarseGrainedExecutorBackend: Got assigned task 305
INFO Executor: Running task 0.0 in stage 727.0 (TID 305) in 2
DEBUG Executor: Task 305's epoch is 11
TRACE BlockInfoManager: Task 305 trying to acquire read lock for input-0-1553326464600
TRACE BlockInfoManager: Task 305 acquired read lock for input-0-1553326464600
TRACE BlockInfoManager: Task 305 releasing lock for input-0-1553326464600
INFO Executor: Finished task 0.0 in stage 727.0 (TID 305). 892 bytes result sent to driver

驱动程序收到任务完成:

INFO TaskSetManager: Finished task 0.0 in stage 727.0 (TID 305) in 944 ms on 130.149.21.82 (executor 2) (15/21)

在这里,我无法跟踪区块发生的情况。我知道任务已完成并将结果返回给驱动程序,但是我无法跟踪任务结果如何添加到状态。

  1. 我认为执行器发送给驱动程序的数据就是该分区的字数?其他任务也将其结果发送给驱动程序,但是驱动程序在哪里将所有结果组合在一起?
  2. 我期望每个任务都使用名为taskresult_X的块。但是日志显示并非所有任务都具有taskresult_X。为什么会这样?
  3. 日志显示所有执行者都处理了任务(有些执行者不如其他执行者,但是他们全部都执行了某些操作)。但是日志显示,有些执行器有rdd_X_X块,但有些却没有-为什么?
  4. 我还可以看到带有broadcast_Xbroadcast_X_pieceX的日志行,这些块起什么作用?

非常感谢。

0 个答案:

没有答案