Spark学习(十三):四个应用库之Spark Streaming
1. 应用库——Spark Streaming
(1)Spark Streaming的概念:
它是建立在Spark上的实时计算框架,通过它提供丰富的API、基于内存的高速执行引擎,用户可以结合流式、批处理和交互试查询应用。
(2)Spark Streaming的特点:
1)Saprk的低延迟执行引擎(100MS+)可以用于实时处理
2)相比于strom(基于Record),RDD数据更容易做容错。
3)可以与kafka,Flume,ZeroMQ等进行数据源的对接
4)小批量处理的方式使得它可以同时兼容批量和实时数据处理的逻辑和算法。方便了一些需要历史数据和实时数据联合分析的特定应用场合。
(3)Spark Streaming的编程:
在Spark Streaming中,则通过操作DStream(表示数据流的RDD序列)提供的接口,这些接口和RDD提供的接口类似。
代码示例如下:
(4)Spark Streaming基本原理:
它是将流数据分成小的时间片段(几秒),以类似批处理方式来处理这部分小数据。
具体处理流程:
1)Spark Streaming把实时输入数据流以时间片Δt (如1秒)为单位切分成块
2)Spark Streaming会把每块数据作为一个RDD,并使用RDD操作处理每一小块数据
3)每个块都会生成一个Spark Job处理
4)最终结果也返回多块
处理流程图如下:
2. Spark Streaming的Java风格的代码案例
(1)案例介绍:
监听hdfs的某个文件夹,一旦该文件夹中存在文件之后, Spark Streaming就会读取该文件,并通过Spark Streaming的相关操作,将该文件中的单词进行统计,并将统计后的单词以及该单词的数量打印出来。
(2)编码步骤:
1)在hdfs中创建一个目录,切换到hdfs的bin目录下利用以下命令:
hadoop fs –mkdir /spark/stream
2)创建工程sparkst,将工程的jdk置为1.8,并且引入如下jar包:
spark-assembly-1.6.2-hadoop2.6.0.jar
此包可以在spark的安装目录的lib子目录下找到,找到后引入到eclipse中。
3)建立包com.gongyunit.sparkst
4) 在该包下创建类TestSparkStreamHDFS,具体代码如下:
6) 将sparkst工程打成jar包,上传到spark所在的服务器的某一目录下,这里以在spark的安装目录的code子目录下为例。
7)然后执行如下命令,执行该jar包:
spark-submit --master spark:// ip :7077 --executor-memory 500m --class com.gongyunit.sparkst.TestSparkStreamHDFS ./code/sparkst.jar hdfs:// ip :9000/spark/stream
补充:实际操作是要讲ip换成你的实际spark的所在ip地址
8) 在linux上创建一个含有英语单词的文件spfile.txt,单词之间以空格隔开。
9) 将该文件上传到hdfs上,切换到hdfs的bin目录下利用以下命令:
hadoop fs –put 本地文件位置 /spark/stream