1 转化操作
> 无状态转化操作: 每个批次的处理不依赖之前批次的数据
> 有状态转化操作: 使用之前批次的数据或者中间结果计算当前批次的数据
(1) 基于滑动窗口的有状态转化操作
> 以一个时间阶段进行操作
> 窗口时长和滑动步长,是批次间隔的整数倍
(2) 追踪状态变化的转化操作
> updateStateByKey():跟踪每个键的状态变化
2 输出操作
> 对流数据经转化操作后的数据执行操作
> print(),输出每个RDD的前十个元素
> foreachRDD()对每个RDD执行计算
3 输入源
> 核心数据源
(1) 文件流
(2) Akka actor流
> 附加数据源
(1) Kafka
(2) Flume
> 多数据源与集群规模
(1) union()/join()/cogroup()合并或聚合数据源
(2) 接收器在集群运行
> 每个接收器都以Spark执行器程序中一个长期运行的任务运行,会占用分配给应用的核心
> 需要可用的CPU核心处理数据,运行多个接收器,需要由多个核心,加上运算需要的核心
> 例如,CPU核心数至少等于接收器个数 + 1
> 所以在Spark Streaming中,不要使用"local"/"local[1]",这样只会分配一个CPU核心给任务,至少使用"local[2]"