1.map与mapPartitons区别(transformation操作)
-
map
-
针对RDD中的每个元素进行转换,粒度更细
-
-
mapPartitions
-
针对分区整体数据进行转换,粒度更粗
-
2.foreach与foreachPartitions区别(action操作)
-
foreach
-
针对RDD中每个元素就行输出,粒度更细
-
-
foreachPartitions
-
针对分区整体进行输出,粒度更粗
-
3.repartiton(n)与coalesce区别
-
repartiton(n)
-
通常用来增大分区,默认底层调用coalesce(n,shuffle=true),其实无论增大还是减小,都会产生shuffle
-
-
coalesce
-
通常用来减少分区,默认不会产生shuffle,如用来强行增大分区,也是没用的
-
-
何时增大分区?
-
当处理的数据量很多的时候,可以考虑增大分区
-
-
何时减小分区?
-
当对RDD数据进行过滤操作(filter函数)后,考虑是否降低RDD分区数目
-
当结果存储到外部系统
-
4.rdd.partitionBy
-
此算子可以制定分区器
-
分区器
-
RangePartitoner
-
HashPartitioner
-
CoalescedPartitoner
-
5.rdd的checkpoint机制
-
安全性
-
内存+磁盘
-
易失介质
-
单点都不可靠
-
-
HDFS
-
非易失介质
-
-
-
因为cache、persisit支持的持久化存储介质内存和磁盘容易【损坏丢失】,而HDFS有【容错】、【可靠】的特性,所以将RDD的数据保存在HDFS上
-
HDFS=》持久化+安全
-
使用方式
-
sc.setCheckpoinDir("hdfs:///tml/chp") //制定hdfs目录
-
rdd.checkpoint
-
-
案例
-
先cache再checkpoint
-
这样既能享受cache的速度,又能享受checkpoint的安全可靠
-
-
-
与持久化的区别
-
位置区别
-
persist和cache保存在磁盘和内存中,checkpoint保存在hdfs
-
-
生命周期
-
当AP执行完毕,或者调用unpersist,那么persist和cache的数据会自动被清除,但是checkpoint中的数据不会自动清楚,需要手动清楚
-
-