首页 理论教育 深入剖析Spark Streaming的实时计算流程

深入剖析Spark Streaming的实时计算流程

时间:2023-06-20 理论教育 版权反馈
【摘要】:接下来我们借用Spark官网提供的单词计数的示例并结合Spark 1.2版本的源代码来分析一下Spark Streaming的运行过程。该单词计数的示例通过Socket套接字不断地从远端接受数据,然后以每隔1s的时间间隔对数据进行单词计数的处理,示例代码如下:Spark Streaming的运行过程说明如下。

深入剖析Spark Streaming的实时计算流程

在生产环境下使用Spark Streaming进行数据的流计算过程中,一定会遇到各种各样的技术问题导致运行出错,这时对Spark Streaming的源代码的掌握可以帮助我们很好的解决大部分问题,因为源码是一切问题产生的根源和一切问题的答案所在。接下来我们借用Spark官网提供的单词计数(Word Count)的示例并结合Spark 1.2版本的源代码来分析一下Spark Streaming的运行过程。该单词计数的示例通过Socket套接字不断地从远端接受数据,然后以每隔1s的时间间隔对数据进行单词计数的处理,示例代码如下:

Spark Streaming的运行过程(作业提交和执行流程)说明如下。

1)StreamingContext启动了JobScheduler,JobScheduler启动ReceiverTracker和JobGenerator。

2)ReceiverTracker是通过把Receiver包装成RDD的方式,发送到Executor端运行起来的,Receiver起来之后向ReceiverTracker发送RegisterReceiver消息。

3)Receiver把接收到的数据,通过ReceiverSupervisor保存。(www.xing528.com)

4)ReceiverSupervisorImpl把数据写入到BlockGenerator的一个ArrayBuffer当中。

5)BlockGenerator内部每个一段时间(默认是200ms)就把这个ArrayBuffer构造成Block添加到blocksForPushing当中。

6)BlockGenerator的另外一条线程则不断的把加入到blocksForPushing当中的Block写入到BlockManager当中,并向ReceiverTracker发送AddBlock消息。

7)JobGenerator内部有个定时器,定期生成Job,通过DStream的id,把ReceiverTracker接收到的Block信息从BlockManager上抓取下来进行处理,这个间隔时间是我们在实例化StreamingContext的时候传进去的那个时间,在这个例子里面是Seconds(1)。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈