这是我参与更文挑战的第28天,活动详情查看:更文挑战
一 Spark解决什么问题
Hadoop主要解决,海量数据的存储和海量数据的分析计算。
Spark主要解决海量数据的分析计算。
二 Spark为什么会有自己的资源调度器
Hadoop的Yarn框架比Spark框架诞生的晚,所以Spark自己也设计了一套资源调度框架。
三 Spark运行模式
1. Local:运行在一台机器上,测试用。
2. Standalone:是Spark自身的一个调度系统。 对集群性能要求非常高时用。国内很少使用。
3. Yarn:采用Hadoop的资源调度器。 国内大量使用。
4. Mesos:国内很少使用。
四 Spark常用端口号
1. 4040 spark-shell任务端口
2. 7077 内部通讯端口。 类比Hadoop的8020/9000
3. 8080 查看任务执行情况端口。 类比Hadoop的8088
4. 18080 历史服务器。类比Hadoop的19888
注意:由于Spark只负责计算,所有并没有Hadoop中存储数据的端口50070
五 Spark提交作业参数 ⭐️⭐️⭐️⭐️⭐️
- 在提交任务时的几个重要参数
executor-cores —— 每个executor使用的内核数,默认为1,官方建议2-5个,我们企业是4个
num-executors —— 启动executors的数量,默认为2
executor-memory —— executor内存大小,默认1G
driver-cores —— driver使用内核数,默认为1
driver-memory —— driver内存大小,默认512M
- 提交任务的样式
spark-submit \
--master local[5] \
--driver-cores 2 \
--driver-memory 8g \
--executor-cores 4 \
--num-executors 10 \
--executor-memory 8g \
--class PackageName.ClassName XXXX.jar \
--name "Spark Job Name" \
InputPath \
OutputPath
六 Spark的transformation算子(不少于10个)⭐️⭐️⭐️⭐️⭐️
-
单Value
- map
- mapPartitions
- mapPartitionsWithIndex
- flatMap
- glom
- groupBy
- filter
- sample
- distinct
- coalesce
- repartition
- sortBy
- pipe
-
双vlaue
- intersection
- union
- subtract
- zip
-
Key-Value
- partitionBy
- reduceByKey
- groupByKey
- aggregateByKey
- foldByKey
- combineByKey
- sortByKey
- mapValues
- join
- cogroup
七 Spark的action算子(不少于6个)⭐️⭐️⭐️⭐️⭐️
- reduce
- collect
- count
- first
- take
- takeOrdered
- aggregate
- fold
- countByKey
- save
- foreach
八 map和mapPartitions区别
- map:每次处理一条数据
- mapPartitions:每次处理一个分区数据
九 Repartition和Coalesce区别
-
关系:
两者都是用来改变RDD的partition数量的,repartition底层调用的就是coalesce方法:coalesce(numPartitions, shuffle = true)
-
区别:
repartition一定会发生shuffle,coalesce根据传入的参数来判断是否发生shuffle 一般情况下增大rdd的partition数量使用repartition,减少partition数量时使用coalesce
十 reduceByKey与groupByKey的区别
reduceByKey:具有预聚合操作
groupByKey:没有预聚合
在不影响业务逻辑的前提下,优先采用reduceByKey。
十一 reduceByKey、foldByKey、aggregateByKey、combineByKey区别
ReduceByKey | 没有初始值 | 分区内和分区间逻辑相同 |
foldByKey | 有初始值 | 分区内和分区间逻辑可以相同 |
aggregateByKey | 有初始值 | 分区内和分区间逻辑可以不同 |
combineByKey | 初始可以变化结构 | 分区内和分区间逻辑不同 |
十二 控制Spark reduce缓存 调优shuffle
spark.reducer.maxSizeInFilght
此参数为reduce task能够拉取多少数据量的一个参数默认48MB,当集群资源足够时,增大此参数可减少reduce拉取数据量的次数,从而达到优化shuffle的效果,一般调大为96MB,,资源够大可继续往上调。
spark.shuffle.file.buffer
此参数为每个shuffle文件输出流的内存缓冲区大小,调大此参数可以减少在创建shuffle文件时进行磁盘搜索和系统调用的次数,默认参数为32k 一般调大为64k。