1、SparkStreaming && Storm的区别?
答:
SparkStreaming 是微批处理,不是真正的实时,它的实时性取决于自定义的间隔是多大。
Storm是真正意义上的实时处理,因为它是一条一条处理数据的。但Storm的吞吐量比起SparkStreaming是要小很多的。
SparkStreaming依托于Spark,所以SparkStreaming可以也很好地和其他的Spark项目整合在一起。实现一站式开发。
Storm的事务机制更加的完善。
2、SparkStreaming处理数据流程?
答:
receiver task接收kafka/flume/twitter/mq/tcp端口数据,根据时间间隔封装在batch中,batch封装在rdd中,rdd封装在DStream之中。
然后可以根据DStream的ransformations算子对数据进行处理,由OutputOperate算子进行触发执行。
批次间隔大于job执行时间,则处理等待,集群资源不能充分利用。反之则数据堆积,甚至OOM。
批次间隔的调整结合web ui来设置。
3、SparkStreaming核心算子
transformation算子
1、updateStateByKey
统计自从SparkStreaming启动以来,所有key的状态
需要设置checkpint,状态是保存在Checkpoint中 ssc.checkpoint("目录")
batchinterval<10秒,10秒checkpoint一次
batchinterval>10秒,batchinterval间隔checkpoint一次
2、reduceByKeyAndWindow
每隔一段时间统计特定时间长度内的数据
窗口长度wi 滑动间隔si wi和si必须是batchinterval的整数倍
示例:
xx.reduceByKeyAndWindow((v1:Int,v2:Int)=>(v1+v2),Durations.seconds(15),Durations.seconds(5)))
每隔5秒将过去15秒数据的value值相加
优化:加后一个减前一个
xx.reduceByKeyAndWindow((v1:Int,v2:Int)=>(v1+v2),(v1:Int,v2:Int)=>(v1-v2),Durations.seconds(15),Durations.seconds(5)))
优化机制必须设置checkpoint保存前一次计算的结果 ssc.checkpoint("目录")
3、window
每隔一段时间收集特定时间长度内的数据生成一个DStream
窗口长度wi 滑动间隔si wi和si必须是batchinterval的整数倍
示例:
lines.window((Durations.seconds(15),Durations.seconds(5)))
之后可以使用其它转换算子进行操作
4、transform
可以获取DStream中的RDD,对获取的RDD使用算子操作,但是一定要返回RDD,返回的RDD被封装到DStream
transform算子内,获取的RDD的算子外的代码是在Driver端执行,也可以动态改变广播变量的值。
5、map、flatMap、filter
略
OutPutOperator算子
1、foreachRDD
可以获取DStream中RDD,对RDD使用RDD的算子操作,但是一定要对RDD使用action算子操作
froeachRDD算子内,获取的RDD的算子外的代码是在Driver端执行,也可以动态改变广播变量的值
2、print、saveAsTextFile
略