SparkStreaming与kafka入门学习

本博客为本人学习备忘之用,如有错误,欢迎指正。谢谢!

SparkStreaming官网入门:

SparkStreaming官网基础概念入门上

SparkStreaming官网基础概念入门下

SparkStreming与kafka官网要点

SparkStreaming 输出众多小文件解决方案

SparkStreaming涉及术语:

DStream,batch data(批数据),batch interval(批处理间隔),windows length(滑动窗口长度),slide Interval(滑动间隔)

batch interval(批处理间隔):采集多长时间的数据为一批数据

windows length(滑动窗口长度):窗口持续时间,决定本次要处理数据的大小。一次处理中要包含多少批的数据,通常为batch interval的倍数

slide Interval(滑动间隔):经过多长时间滑动形成一次新的窗口,默认与批处理间隔大小相同。指经过多长时间会流入新的数据,进行下一批数据的处理

处理原理:把流数据按照批处理大小(batch size)划分成一批批的数据(DStream),每个DStream会被转化成Spark RDD 进行处理。

在基础概念入门上中作者描述此代码会产生不可序列化异常,原因:

Spark是分布式执行引擎,其核心抽象是弹性分布式数据集RDD,其代表了分布在不同节点的数据。Spark的计算是在executor上分布式执行的,故用户开发的关于RDD的map,flatMap,reduceByKey等transformation 操作(闭包)有如下执行过程:

1. 代码中对象在driver本地序列化

2. 对象序列化后传输到远程executor节点

3. 远程executor节点反序列化对象

4. 最终远程节点执行

故对象在执行中需要序列化通过网络传输,则必须经过序列化过程。

对于scala语言开发,解决序列化问题主要如下几点:

  • 在Object中声明对象 (每个class对应有一个Object)
  • 如果在闭包中使用SparkContext或者SqlContext,建议使用SparkContext.get() and SQLContext.getActiveOrCreate()
  • 使用static或transient修饰不可序列化的属性从而避免序列化。 
    注:scala语言中,class的Object

对于java语言开发,对于不可序列化对象,如果本身不需要存储或传输,则可使用static或trarnsient修饰;如果需要存储传输,则实现writeObject()/readObject()使用自定义序列化方法。

猜你喜欢

转载自blog.csdn.net/learner_up/article/details/85065553