1.sparkStreaming概述
spark streaming用于处理流式计算问题。能够和spark的其它模块无缝集成。它是一个粗粒度的框架,即只能对一批数据指定处理方法,核心是采用微批次架构。和storm采用的以条处理的不同。
sparkStreaming会运行接收器来不断接收输入的数据流,然后根据程序配置时间,将时间范围内的所有数据打成一个RDD,发送给spark Core 去处理。依次来打成数据流的计算。
spark Streaming 有它自己的抽象,叫DStream(Discretized Stream,离散化流)。
如果入水口的速度大于出水口的速度,那么势必会导致水管爆裂,spark streaming也存在这个问题,内部采用背压机制来进行处理,会通过ReceiverRateController来不断计算RDD的处理速度和RDD的生成速度,来通过令牌桶机制进行速度控制,主要是通过控制令牌的生成周期来实现。
2.SparkStreaming的简单使用
1.netcat安装(源码安装)
下载源码(也可先通过宿主机浏览器下载,再上传至master节点/opt/software目录)
wget https://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz
解压至指定目录(/opt/module/netcat)
tar -zxvf /opt/sofeware/netcat-0.7.1.tar.gz -C /opt/module/netcat/
查看编译配置文件
cd /opt/module/netcat/netcat-0.7.1/
./configure
发现需要安装gcc和make,于是通过yum进行安装。
yum install -y gcc
yum install -y make
进行编译安装
make && make install
修改配置文件
vi /etc/profile
追加:
# netcat配置
export NETCAT_HOME=/opt/module/netcat/netcat-0.7.1
export PATH=$PATH:$NETCAT_HOME/bin
重新加载profile
source /etc/profile
运行命令nc -help 有对应输出后,安装完成。
开启9999 端口 并通过控制台向该端口发送数据。
[dendan@master module]$ nc -l -p 9999
2.编写scala 程序收集并统计单词
package com.dengdan
import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}
object WordCount extends App {
//创建配置
val sparkConf = new SparkConf().setAppName("streaming").setMaster("local[*]")
//创建streamingContext
val ssc = new StreamingContext(sparkConf, Seconds(5))
// 业务逻辑:从socket接受数据
val lineDStream = ssc.socketTextStream("master", 9999)
val wordStream = lineDStream.flatMap(_.split(" "))
val word2CountDStream = wordStream.map((_, 1))
val resultDStream = word2CountDStream.reduceByKey(_ + _)
resultDStream.print()
//启动ssc
ssc.start()
ssc.awaitTermination()
}