Streaming general structure
DStream 是由一组RDD组成的结构
和其他DStream互相依赖
时间间隔
有一个可以产生RDD的方法
source code:
abstract classDStream[]{
// time interval
def slideDuration: Duration
// list of parent DStream on which this DStream relies on
def dependencies: List[DStream[_]]
// generate RDDs
def compute(validTime: Time): Option[RDD[T]]
}
操作场景
无状态(StorageLevel:memory)
只考虑一个RDD
状态 (StorageLevel:persist, checkpoint)
考虑一组RDDs的累加值
window(StorageLevel:persist, checkpoint)
窗口长度
滑动长度
优化 ReduceByWindow
两种类型
back pressure
receiver
http://www.jianshu.com/p/87e2d66d92bb
容错
数据源来自网络
默认会加载数据到两个节点
数据源来自外部文件系统
通过linearage恢复数据,重新读取数据
优化原则:
1. 批次数据量要让系统能消化
2. 控制reduce数量
inputStream.repartition
spark.streaming.blockInterval //形成block时间间隔
spark.default.parallelsm //把reduce任务分配到多台机器上
3. 序列化
task , RDD, 输入数据
4. 内存调优
清理缓存RDD
spark.cleaner.ttl
spark.streaming.unpersis
GC
code structure:
//一秒采样一次数据
val ssc = new StreamingContext(SparkConf,Seconds(1))
//定义负责链接的DStream DStream是一系列RDD的集合序列 --> 实际上是数据源,输入
val lines = ssc.socketTextStream(serverIP,serverPORT)
//lines的每行是一个RDD 对每个RDD 进行操作 --> 实际上是业务逻辑 transformation/引入外部系统
var words = lines.flatMap(_.split(" "))
//output --> 实际上是输出
print/foreachRDD/saveAsTextFiles