前言
上次的阅读留下来几个问题,在学完了scala之后再回来看看。当然也木有太大长进,不过不赶进度心态就好点了,静下心来看看还是木有很好理解的。
1.数据分区
就是把pair RDD里的数据元素,按照键值,通过某种巧妙(雾)的方法,分开放到工作节点上。分区比较好理解,重点在于为什么在对pair RDD进行join()操作的时候,分区会降低网络传输的数据量。比如有RDD1[(1,2),(1,3),(2,3)]和RDD2[(2,2),(2,3),(3,3)]这两个要进行连接,如果不分区的话,要对这两个RDD中的每个键值对的键进行匹配,比如说,key(1)放到1号机器上去,key(2)放到2号机器上去,然后再连接起来;但是分区之后,RDD1[(1,2),(1,3),(2,3)]的数据已经按照键值放到了相应的机器上了,只需要看RDD2[(2,2),(2,3),(3,3)]的键值是什么,直接放到对应的机器上连接就可以了。484减少了hin多网络开销呢。
2.作业,任务和步骤
这三个到底都是啥,如果搞不懂看后面的书会有点迷。
看这个就很明白啦,每一步转化RDD都会记录其父节点,而通过toDebugString方法获得这棵树,然后在一层上的就可以组成一个步骤,比如前两个都是在单机上的,所以这个一个步骤,第三个是混洗,单独算一个步骤,所以这个图有俩步骤,然后每个框都叫一个任务。而这整个图叫作业。
3.并行度
就是对一个任务需要多少核来完成,核的数量就是并行度。
4.有状态转化操作
分为滑动窗口和UpdataStateBykey()操作
- 滑动窗口
和网络里的滑动窗口差不多,难点在于一个普通的reduceByWindow()和使用逆函数的增量式reduceByWindow()的区别,其实二者实现的效果是一样的,只是操作的方法,普通的就是每次计算该窗口内左右的RDD然后综合信息,而有逆函数的是通过增加新进入的和去掉老的RDD来实现窗口的,对于较大的窗口,后者可以大大提高执行效率。 - UpdataStateBykey()
这个更简单,只是这书上迷之叙述。就是记录了流RDD中所有RDD的键,然后产生一个新的RDD上的键值和流RDD中的键相同,只要出来相同键的就修改新RDD的值。