1.10 Spark Core & SQL

1.10 Spark Core & SQL

1.10.1 Spark运行模式

(1)Local:运行在一台机器上。测试用。

(2)Standalone:是Spark自身的一个调度系统。 对集群性能要求非常高时用。国内很少使用。

(3)Yarn:采用Hadoop的资源调度器。 国内大量使用。

Yarn-client模式:Driver运行在Client上(不在AM里)

Yarn-cluster模式:Driver在AM上

(4)Mesos:国内很少使用。

(5)K8S:趋势,但是目前不成熟,需要的配置信息太多。

1.10.2 Spark常用端口号

(1)4040 spark-shell任务端口

(2)7077 内部通讯端口。类比Hadoop的8020/9000

(3)8080 查看任务执行情况端口。 类比Hadoop的8088

(4)18080 历史服务器。类比Hadoop的19888

注意:由于Spark只负责计算,所有并没有Hadoop中存储数据的端口9870/50070。

1.10.3 RDD五大属性

1.10.4 RDD弹性体现在哪里

主要表现为存储弹性、计算弹性、任务(Task、Stage)弹性、数据位置弹性,具体如下:

(1)自动进行内存和磁盘切换

(2)基于lineage的高效容错

(3)Task如果失败会特定次数的重试

(4)Stage如果失败会自动进行特定次数的重试,而且只会只计算失败的分片

(5)Checkpoint【每次对RDD操作都会产生新的RDD,如果链条比较长,计算比较笨重,就把数据放在硬盘中】和persist 【内存或磁盘中对数据进行复用】(检查点、持久化)

(6)数据调度弹性:DAG Task 和资源管理无关

(7)数据分片的高度弹性repartion

1.10.5 Spark的转换算子(8个)

1)单Value

(1)map

(2)mapPartitions

(3)mapPartitionsWithIndex

(4)flatMap

(5)groupBy

(6)filter

(7)distinct

(8)coalesce

(9)repartition

(10)sortBy

2)双vlaue

(1)intersection

(2)union

(3)subtract

(4)zip

3)Key-Value

(1)partitionBy

(2)reduceByKey

(3)groupByKey

(4)sortByKey

(5)mapValues

(6)join

1.10.6 Spark的行动算子(5个)

(1)reduce

(2)collect

(3)count

(4)first

(5)take

(6)save

(7)foreach

1.10.7 map和mapPartitions区别

(1)map:每次处理一条数据

(2)mapPartitions:每次处理一个分区数据

1.10.8 Repartition和Coalesce区别

1关系:

两者都是用来改变RDD的partition数量的,repartition底层调用的就是coalesce方法:coalesce(numPartitions, shuffle = true)。

2区别:

repartition一定会发生Shuffle,coalesce根据传入的参数来判断是否发生Shuffle。

一般情况下增大rdd的partition数量使用repartition,减少partition数量时使用coalesce。

1.10.9 reduceByKey与groupByKey的区别

reduceByKey:具有预聚合操作。

groupByKey:没有预聚合。

在不影响业务逻辑的前提下,优先采用reduceByKey。

1.10.10 Spark中的血缘

宽依赖和窄依赖。有Shuffle的是宽依赖。

1.10.11 Spark任务的划分

(1)Application:初始化一个SparkContext即生成一个Application;

(2)Job:一个Action算子就会生成一个Job;

(3)Stage:Stage等于宽依赖的个数加1;

(4)Task:一个Stage阶段中,最后一个RDD的分区个数就是Task的个数。

1.10.12 Spark广播变量

1.10.13 SparkSQL中RDD、DataFrame、DataSet三者的转换

1.10.14 Hive on SparkSpark on Hive区别

元数据

执行引擎

语法

生态

Hive on Spark

MySQL

rdd

HQL

更加完善

Spark on Hive (Spark SQL )

MySQL

df  ds

Spark SQL

有欠缺(权限管理、元数据管理)

内置Hive

derby

外置Hive

MySQL

1.10.15 Spark内核源码(重点)

1)提交流程(重点)

2Shuffle流程(重点)

(1)未优化的HashShuffle缺点:每个任务单独占用buffer,中间小文件过多。

生成的文件数= Task数量 * 分区数(即Shuffle后的分区数)

(2)优化后的HashShuffle缺点:提高性能优先仍然还有大量小文件。

优化后的HashShuffle,就是复用buffer,开启复用buffer的配置是spark.shuffle.consolidateFiles=true。

生成的文件数= Executor数量 * 分区数(Shuffle后的分区数)

(3)SortShuffle:减少了小文件。

中间落盘应该是本地磁盘

生成的文件数 = Task数量*2

(4)bypassShuffle:减少了小文件,不排序,效率高。在不需要排序的场景使用。

1.10.16 Spark统一内存模型

1)统一内存管理的堆内内存结构如下图

2)统一内存管理的动态占用机制如下图

1.10.17 Spark为什么比MR快?

1)内存&硬盘

(1)MR在Map阶段会在溢写阶段将中间结果频繁的写入磁盘,在Reduce阶段再从磁盘拉取数据。频繁的磁盘IO消耗大量时间。

(2)Spark不需要将计算的中间结果写入磁盘。这得益于Spark的RDD,在各个RDD的分区中,各自处理自己的中间结果即可。在迭代计算时,这一优势更为明显。

2)Spark DAG任务划分减少了不必要的Shuffle

(1)对MR来说,每一个Job的结果都会落地到磁盘。后续依赖于次Job结果的Job,会从磁盘中读取数据再进行计算。

(2)对于Spark来说,每一个Job的结果都可以保存到内存中,供后续Job使用。配合Spark的缓存机制,大大的减少了不必要的Shuffle。

3)资源申请粒度:进程&线程

开启和调度进程的代价一般情况下大于线程的代价。

(1)MR任务以进程的方式运行在Yarn集群中。N个MapTask就要申请N个进程

(2)Spark的任务是以线程的方式运行在进程中。N个MapTask就要申请N个线程。

1.10.18 Spark Shuffle和Hadoop Shuffle区别?

(1)Hadoop不用等所有的MapTask都结束后开启ReduceTask;Spark必须等到父Stage都完成,才能去Fetch数据。

(2)Hadoop的Shuffle是必须排序的,那么不管是Map的输出,还是Reduce的输出,都是分区内有序的,而Spark不要求这一点。

1.10.19 Spark提交作业参数(重点)

参考答案:

https://blog.csdn.net/gamer_gyt/article/details/79135118

1)在提交任务时的几个重要参数

executor-cores —— 每个executor使用的内核数,默认为1,官方建议2-5个,我们企业是4个

num-executors —— 启动executors的数量,默认为2

executor-memory —— executor内存大小,默认1G

driver-cores —— driver使用内核数,默认为1

driver-memory —— driver内存大小,默认512M

2)边给一个提交任务的样式

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

1.10.20 Spark任务使用什么进行提交,JavaEE界面还是脚本

Shell脚本。海豚调度器可以通过页面提交Spark任务。

1.10.21 请列举会引起Shuffle过程的Spark算子,并简述功能。

reduceBykey:

groupByKey:

…ByKey:

1.10.22 Spark操作数据库时,如何减少Spark运行中的数据库连接数?

使用foreachPartition代替foreach,在foreachPartition内获取数据库的连接。

1.10.23 Spark数据倾斜

  详见Hive on Spark数据倾斜讲解。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一鸣888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值