我试图了解在 Spark Streaming 应用程序中记录如何从源到接收。我知道:
batchInterval
(由用户提供,例如1秒),一个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)
在这里,我无法跟踪区块发生的情况。我知道任务已完成并将结果返回给驱动程序,但是我无法跟踪任务结果如何添加到状态。
taskresult_X
的块。但是日志显示并非所有任务都具有taskresult_X
。为什么会这样?rdd_X_X
块,但有些却没有-为什么?broadcast_X
和broadcast_X_pieceX
的日志行,这些块起什么作用?非常感谢。