SparkCore中的常见问题
1、rdd五大特性
特性一:每个RDD都由一系列的分区构成
特性二:RDD的转换操作本质上是对RDD所有分区的并行转换
特性三:每个RDD都会保存与其他RDD之间的依赖关系:血链机制或者血脉机制
特性四:可选的,如果是二元组【KV】类型的RDD,在Shuffle过程中可以自定义分区器。
特性五:可选的,Spark程序运行时,Task的分配可以指定实现本地优先计算:最优计算位置.
2、spark启动yarn需要启动哪些服务
# 启动yarn
start-yarn.sh
# 启动MR的JobHistoryServer:19888
mapred --daemon start historyserver
# 启动Spark的HistoryServer:18080
/opt/installs/spark/sbin/start-history-server.sh
3、spark中哪些是shuffle算子,哪些是触发算子,哪些是转换算子
count foreach saveAsTextFile first take
collect reduce top takeOrdered
collectAsMap foreachParition max min mean sum checkpoint
map flatMap filter union distinct groupByKey sortByKey sortBy reduceByKey
repartition coalesce keys values mapValues
join fullOuterJoin leftOuterJoin rightOuterJoin
mapPartitions cache persist
groupByKey sortByKey sortBy reduceByKey repartition
coalesce(根据情况) join( fullOuterJoin / leftOuterJoin / rightOuterJoin)
4、创建rdd的两种方式
方式一:并行化一个已存在的集合
方式二:读取外部共享存储系统
5、宽依赖算子
窄依赖:Narrow Dependencies
定义:父RDD的一个分区的数据只给了子RDD的一个分区 【不用经过Shuffle】
特点:一对一或者多对一,不经过Shuffle,性能相对较快, 但无法实现全局分区、排序、分组等
一个Stage内部的计算都是窄依赖的过程,全部在内存中 完成。
宽依赖:Wide/Shuffle Dependencies
定义:父RDD的一个分区的数据给了子RDD的多个分区【需要调用Shuffle的分区器来实现】
特点:一对多,必须经过Shuffle,性能相对较慢,可以实现全 局分区、排序、分组等
Spark的job中按照宽依赖来划分Stage
本质:只是一种标记,标记两个RDD之间的依赖关系
3、为什么要标记宽窄关系?
1)提高数据容错的性能,避免分区数据丢失时,需要重新构建整个RDD
2)提高数据转换的性能,将连续窄依赖操作使用同一个Task都放在内存中直接转换
6、容错机制
persist持久化机制
checkpoint检查点机制
7、spark的shuffle过程
1)Hash Based Shuffle
特点:没有排序,只分区,每个Task按照ReduceTask个数生成多个文件
2) Hash Based Shuffle 【优化后的,File Consolidation机制】
3) Sort Based Shuffle [目前最新的]
Shuffle Write:类似于MR中的Map端Shuffle,但是Spark的 Shuffle Write有3种,会根据情况自动判断选择哪种Shuffle Write
第一种:SortShuffleWriter
第二种:BypassMergeSortShuffleWriter
第三种:UnsafeShuffleWriter
Shuffle Read:类似于MR中的Reduce端Shuffle,但是 Spark的Shuffle Read功能由算子来决定,不同算子经过的过程不一样的。