本期内容:
1 Spark Streaming另类在线实验
2 瞬间理解Spark Streaming本质
在流处理时代,SparkStreaming有着强大吸引力,而且发展前景广阔,加之Spark的生态系统,Streaming可以方便调用其他的 诸如SQL,MLlib等强大框架,它必将一统天下。这里选择Spark Streaming作为版本定制的切入点也是大势所趋。
小技巧:将Batch interval放大,相当于看到了Streaming的慢放版本,可以更清楚它的各个环节,这里以黑名单过滤程序为例,进行试验
案例源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
|
运行分析
启动hdfs和spark集群并开启historyServer,将上述代码打成jar包放入/root/Documents/SparkApps/目录下,为方便这里还是命名为wordcount。编辑脚本文件wordcount.sh 如下:
1 |
|
运行脚本文件
注意这里需要启动nc -lk 9999否则会报错
执行完毕去SparkUI查看job
点击进入DAG图
从DAG图中可以看到这里并不是应用程序的逻辑,这说明Spark Streaming本身更像是一个应用程序,它在启动的时候会自动启动一些作业,执行好几个job。这时进入details,会发现有一个 Receiver在接受数据,而且有一个task运行了1.5min,而打开historyServer会发现整个应用程序也就执行了2min。这个 1.5min的task就是Receiver在不断循环的接受数据。从这里可以看出,Spark Streaming启动Receiver是通过job启动的,Receiver接受数据和普通job没有区别。我们从一台机器上接受数据,可以在多个机器 上执行,最大化的利用资源。在整个过程中虽然产生了很多job,但真正只有一个作业在执行。
Spark Streaming本身是随着流进来的数据,按照时间为单位生成job,触发job在cluster上执行的流式处理引擎。从实质上讲,它是加上了时间维 度的批处理。每隔一段时间,就会有一批数据流入,通过DStream模版不断的产生RDD,触发job并处理。