--启动spark集群的步骤: #step1:启动zookeeper ./ssh_all.sh /usr/local/zookeeper/bin/zkServer.sh start #step2:启动spark /usr/local/spark/sbin/start-all.sh #step3:在nn2.hadoop节点启动spark ha /usr/local/spark/sbin/start-master.sh
1.spark都有什么特色?
大量使用内存进行计算,中间结果尽量避免落地磁盘,速度快,类实时,将数据流赞成一个个小批次处理,生态圈比较丰富,有spark-core,spark-sql,spark-streaming等等
spark相对于mr来说的优势是:
(1)spark可以把多次使用的数据放到内存中(2)spark会的算法多,方便处理数据(3)spark大部分算子都没有shuffle阶段,不会频繁的落地磁盘,降低了磁盘的IO (4)在代码的编写方面,不需要写那么复杂的MapReduce逻辑
2.为什么有的公司偏向于spark on yarn 而不是StandAlone模式?
主要是为了提高资源的利用率
3.spark的运行模式有哪些?
Standalone 模式 (spark集群模式) spark on yarn 模式 local模式指的是spark job在一台机器上面跑
4.spark主要是替代hadoop的什么部分?
mapreduce计算模型
5.spark与MapReduce相比,有什么优缺点?
优点:使用的是内存计算,速度快。中间结果避免落地磁盘。 缺点:大量的使用内存 可能会造成内存的不足
6.spark生态都有哪些主要组件,它们分别都解决了什么问题?
spark core 计算处理 批量运算 spark sql sql分析 spark streaming 流式处理
7.详细说一下spark提交任务的流程
(1)启动work时候,把节点资源的情况上报
(2)driver节点提交代码端,执行sparkContext初始化,向集群管理端master节点申请资源
(3)集群管理端master节点给资源开启executor
(4) executor和driver端通信driver端知道要下发的任务在哪一个executor上执行 (本地化处理,数据不动,计算动)
(5)driver端把代码,序列化传输到对应的executor,会遵循移动计算,不移动数据的原则,executor会启动线程运行任务,driver端监控任务的运行情况
8.sparkHA的自动切换模式是借助什么实现的?
zookeeper
9.spark架构中,driver master worker executor task分别起什么作用?分别对应yarn的什么进程
driver 申请资源 提交application,管理该任务的Executor 对应yarn的client和ApplicationMaster
master 管理work子节点 调度资源 接收任务请求 对应yarn的resourcemanager
worker开启executor 对应NodeManager
executor 计算task 对应container
task 具体的计算任务 对应于map task reduce task
10.什么是RDD,它具有什么主要特性?
RDD弹性分布式数据集,代表可并行操作元素的不可变分区集合,
RDD可以从文件系统加载数据创建RDD,也可以从一个已经存在的集合上创建RDD,RDD间可以通过转换算子进行转换,窄依赖不用落地磁盘,有血缘关系,还可以设置检查点,容错能力恢复力强
checkpoint-->hdfs 不需要记住血缘关系 直接从检查点恢复 不需要重新计算父RDD cache--》内存 需要记住DAG关系 父分区进行计算 driver来记住
rdd特性 :高容错(血缘关系) 中间结果持久化到内存 存放的数据可以是java对象 避免了不必要的序列化和反序列化
11.RDD算子分为哪两种?他们有什么特点?
转换算子:由一个rdd转换成另一个rdd,惰性执行
行动算子:由一个rdd转换成一个值或者对象,执行的时候会先触发之前的转换算子
12.Spark中的哪些操作会产生shuffle?
RDD之间形成宽依赖的转换操作, groupByKey sortByKey reduceByKey combinerByKey等等 join非协同划分
13.pairRDD与普通RDD对比有什么不同?它是通过什么方式获取到的?
pairRdd的元素是键值对的形式,可以通过键值对集合创建,也可以通过普通的RDD转换得来
14.一个rdd有多少个task是由什么决定的?
由该rdd的分区数决定的
15.一个spark的job能同时并行处理多少个任务是由什么决定的?
Task被执行的并发度 = Executor数目 * 每个Executor核数
16.RDD的宽依赖和窄依赖有什么区别?
本质区别是一个父rdd的分区会被多个子rdd使用就是宽依赖,否则就是窄依赖
窄依赖各分区之间task独立运行,可以并发进行流水线操作,宽依赖则要等到父rdd所有的分区都计算完成之后才能尽心下一步的操作,窄依赖错误恢复效率高,宽依赖则比较低。
17.stage是怎么划分阶段的?怎么确定每个stage有多少个rdd?
从action算子向前划分,遇到宽依赖就断开,划分一个stage。 看看窄依赖有多少次
18.sparkContext有哪些主要的组件?他们有什么用?
DAGScheduler:是调度阶段的任务调度器,负责接收Spark提交的作业,根据rdd依赖关系划分阶段,然后一并提交给TaskScheduler
TaskScheduler:它接收DAGScheduler提交过来的Stage,然后把任务分发到指定的Worker节点的Executor来运行该任务。
19.rdd的foreach的和foreachPartition有什么不同?
都没有返回值, foreach 对于每个元素都是使用同一个函数, foreachPartition 先分区 对每个分区使用同一个函数
20.rdd的缓存级别有哪些? persitt和cache模式是什么级别的缓存?
MEMORY_ONLY MEMORY_AND_DISK DISK_ONLY MAMORY_AND_DISK_SER MEMORY_ONLY_SER MEMORY_ONLY_2 MEMORY_AND_DISK_2 默认是MEMORY_ONLY
21 rdd的checkpoint和cache有什么不同?
checkpoint 作用是将DAG中比较重要的中间数据作为一个检查点将结果存储到一个高可用的地方(hdfs)
cache 可以将中间的结果放到内存或者是硬盘中,但是这样不能保证数据的不丢失,存储的这个内存或者硬盘出现了问题也会导致spark再从头在计算一遍
22.怎么修改executor的storage memory的内存比例?
spark.memory.uselegacyMode=true 调整spark.storage.memoryFraction参数 spark.memory.uselegacyMode=false的时候 它会自动帮你调整参数,所以当我们需要修改的时候,我们要关闭自动调整,变为手动调整
23.blockManager中的diskStore、memoryStore connectionManager blockManagerWorker都有什么作用?BlockManagerMaster里面存储的是什么?
memoryStore:负责对内存上的数据进行存储和读写
diskStore:负责对硬盘上的数据进行存储和读写
blockManagerWorker:负责对远程其他Executor的BlockManager的数据进行读写
connectionManager:负责与远程其他的Executor建立网络连接
BlockManagerMaster存储的是元数据信息的映射
24.使用广播变量和外部变量会有什么不同吗?
当在executor端使用到Driver变量,不使用广播变量的时候,在Executor中有多少个Task就有多少个Driver端变量副本,如果这个变量中的数据很大的话,会产生很高的传输负载,导致执行效率降低,也可能会造成内存溢出,需要广播变量提高运行效率。
25.1.5以前的版本默认开启consolidation机制吗?consolidation机制的开启与关闭的shuffle有什么不同?
不是默认开启的,需要手动去开启,减少了文件的输出个数,
26.spark中的shuffle中output lost异常是什么原因造成的?
垃圾回收造成的
27.在scala中怎么使用Comparable和Comparator?
ordered内部比较器 Comparable
ordering外部比较器 Comparator
28.eq equals sameElements使用的区别?
equals比较样例类的属性是否相同,eq不能比较 sameElements比较集合中的元素是否相同
比较样例类对象是否相等用eq,如果比较样例类对象的数据是否相等用equals
29.详细说明coalesce和repartition的区别?
两个都可以改变重新分区,coalesce默认的情况shuffle为false,repartition内部调用了coalesce,默认开启shuffle,但是在极端情况下(1000个分区变成1个分区),这时如果将shuffle设置为false,父子RDD是窄依赖关系,他们同处在一个Stage中,就可能造成spark程序的并行度不够,
30spark中都支持哪些序列化方法,默认是哪种?
java的序列化 kryo的序列化 默认是java的序列化
31.kryo相比java的序列化方法有什么特点?他有几种方法分别是?
kryo序列化序列化机制比java序列化机制提高10倍,但是因为不支持所有对象的序列化,同时kryo需要用户在使用之前要注册需要序列化的类型,不够方便。
(1)序列化的类注册给Kryo (2)封装一个自定义注册类,然后把自定义注册类注册给kryo
32.spark中怎么使用hadoop的outputformat和inputformat?
SaveAsNewAPIHadoopFile outputformat
newAPIHadoopFile inputformat
原文:https://www.cnblogs.com/yyfyl/p/12772289.html