spark面试总结4

Spark on Yarn面试篇04
1.MRV1有哪些不足?
1)可扩展性(对于变化的应付能力)php

a) JobTracker内存中保存用户做业的信息html

b) JobTracker使用的是粗粒度的锁
2)可靠性和可用性java

a) JobTracker失效会多事集群中全部的运行做业,用户需手动从新提交和恢复工做流
3)对不一样编程模型的支持
HadoopV1以MapReduce为中心的设计虽然能支持普遍的用例,可是并不适合全部大型计算,如storm,spark
2.描述Yarn执行一个任务的过程?
1)客户端client向ResouceManager提交Application,ResouceManager接受Application
并根据集群资源情况选取一个node来启动Application的任务调度器driver(ApplicationMaster)
2)ResouceManager找到那个node,命令其该node上的nodeManager来启动一个新的
JVM进程运行程序的driver(ApplicationMaster)部分,driver(ApplicationMaster)启动时会首先向ResourceManager注册,说明由本身来负责当前程序的运行
3)driver(ApplicationMaster)开始下载相关jar包等各类资源,基于下载的jar等信息决定向ResourceManager申请具体的资源内容。
4)ResouceManager接受到driver(ApplicationMaster)提出的申请后,会最大化的知足
资源分配请求,并发送资源的元数据信息给driver(ApplicationMaster);
5)driver(ApplicationMaster)收到发过来的资源元数据信息后会根据元数据信息发指令给具体
机器上的NodeManager,让其启动具体的container。
6)NodeManager收到driver发来的指令,启动container,container启动后必须向driver(ApplicationMaster)注册。
7)driver(ApplicationMaster)收到container的注册,开始进行任务的调度和计算,直到
任务完成。
补充:若是ResourceManager第一次没有可以知足driver(ApplicationMaster)的资源请求
,后续发现有空闲的资源,会主动向driver(ApplicationMaster)发送可用资源的元数据信息
以提供更多的资源用于当前程序的运行。node

3.Yarn中的container是由谁负责销毁的,在Hadoop Mapreduce中container能够复用么?
答:ApplicationMaster负责销毁,在Hadoop Mapreduce不能够复用,在spark on yarn程序container能够复用
4.提交任务时,如何指定Spark Application的运行模式?
1)cluster模式:./spark-submit --class xx.xx.xx --master yarn --deploy-mode cluster xx.jar
2) client模式:./spark-submit --class xx.xx.xx --master yarn --deploy-mode client xx.jar面试

  1. 不启动Spark集群Master和work服务,可不能够运行Spark程序?
    答:能够,只要资源管理器第三方管理就能够,如由yarn管理,spark集群不启动也可使用spark;spark集群启动的是work和master,这个其实就是资源管理框架,yarn中的resourceManager至关于master,NodeManager至关于worker,作计算是Executor,和spark集群的work和manager能够不要紧,归根接底仍是JVM的运行,只要所在的JVM上安装了spark就能够。
    6.Spark中的4040端口由什么功能?
    答:收集Spark做业运行的信息
    7.spark on yarn Cluster 模式下,ApplicationMaster和driver是在同一个进程么?
    答:是,driver 位于ApplicationMaster进程中。该进程负责申请资源,还负责监控程序、资源的动态状况。
    8.如何使用命令查看application运行的日志信息
    答:yarn logs -applicationId
    9.Spark on Yarn 模式有哪些优势?
    1)与其余计算框架共享集群资源(eg.Spark框架与MapReduce框架同时运行,若是不用Yarn进行资源分配,MapReduce分到的内存资源会不多,效率低下);资源按需分配,进而提升集群资源利用等。
    2)相较于Spark自带的Standalone模式,Yarn的资源分配更加细致
    3)Application部署简化,例如Spark,Storm等多种框架的应用由客户端提交后,由Yarn负责资源的管理和调度,利用Container做为资源隔离的单位,以它为单位去使用内存,cpu等。
    4)Yarn经过队列的方式,管理同时运行在Yarn集群中的多个服务,可根据不一样类型的应用程序负载状况,调整对应的资源使用量,实现资源弹性管理。
    10.谈谈你对container的理解?
    1)Container做为资源分配和调度的基本单位,其中封装了的资源如内存,CPU,磁盘,网络带宽等。 目前yarn仅仅封装内存和CPU
    2)Container由ApplicationMaster向ResourceManager申请的,由ResouceManager中的资源调度器异步分配给ApplicationMaster
    3) Container的运行是由ApplicationMaster向资源所在的NodeManager发起的,Container运行时需提供内部执行的任务命令.
    11.运行在yarn中Application有几种类型的container?
    1) 运行ApplicationMaster的Container:这是由ResourceManager(向内部的资源调度器)申请和启动的,用户提交应用程序时,可指定惟一的ApplicationMaster所需的资源;
    2) 运行各种任务的Container:这是由ApplicationMaster向ResourceManager申请的,并由ApplicationMaster与NodeManager通讯以启动之。
    12.Spark on Yarn架构是怎么样的?(要会画哦,这个图)

Yarn提到的App Master能够理解为Spark中Standalone模式中的driver。Container中运行着Executor,在Executor中以多线程并行的方式运行Task。运行过程和第二题类似。
13.Executor启动时,资源经过哪几个参数指定?
1)num-executors是executor的数量
2)executor-memory 是每一个executor使用的内存
3)executor-cores 是每一个executor分配的CPU
14.为何会产生yarn,解决了什么问题,有什么优点?
1)为何产生yarn,针对MRV1的各类缺陷提出来的资源管理框架
2)解决了什么问题,有什么优点,参考这篇博文:http://www.aboutyun.com/forum.php?mod=viewthread&tid=6785
15.Mapreduce的执行过程?
阶段1:input/map/partition/sort/spill
阶段2:mapper端merge
阶段3:reducer端merge/reduce/output
详细过程参考这个http://www.cnblogs.com/hipercomer/p/4516581.htmlshell

16.一个task的map数量由谁来决定?
通常状况下,在输入源是文件的时候,一个task的map数量由splitSize来决定的,那么splitSize是由如下几个来决定的
goalSize = totalSize / mapred.map.tasks
inSize = max {mapred.min.split.size, minSplitSize}
splitSize = max (minSize, min(goalSize, dfs.block.size))
一个task的reduce数量,由partition决定。
17.reduce后输出的数据量有多大?
并非想知道确切的数据量有多大这个,而是想问你,MR的执行机制,开发完程序,有没有认真评估程序运行效率
1)用于处理redcue任务的资源状况,若是是MRV1的话,分了多少资源给map,多少个reduce
若是是MRV2的话,能够提一下,集群有分了多少内存、CPU给yarn作计算 。
2)结合实际应用场景回答,输入数据有多大,大约多少条记录,作了哪些逻辑操做,输出的时候有多少条记录,执行了多久,reduce执行时候的数据有没有倾斜等
3)再提一下,针对mapReduce作了哪几点优化,速度提高了多久,列举1,2个优化点就能够
18.你的项目提交到job的时候数据量有多大?
答:1)回答出数据是什么格式,有没有采用什么压缩,采用了压缩的话,压缩比大概是多少;2)文件大概多大:大概起了多少个map,起了多少个reduce,map阶段读取了多少数据,reduce阶段读取了多少数据,程序大约执行了多久,3)集群什么规模,集群有多少节点,多少内存,多少CPU核数等。把这些点回答进去,而不是给个数字了事。
19.大家提交的job任务大概有多少个?这些job执行完大概用多少时间?
仍是考察你开发完程序有没有认真观察过程序的运行,有没有评估程序运行的效率
20.大家业务数据量多大?有多少行数据?
这个也是看大家有没有实际的经验,对于没有实战的同窗,请把回答的侧重点放在MR的运行机制上面,
MR运行效率方面,以及如何优化MR程序(看别人的优化demo,而后在虚拟机上拿demo作一下测试)。
22.如何杀死一个正在运行的job
杀死一个job
MRV1:Hadoop job kill jobid
YARN: yarn application -kill applicationId
23.列出你所知道的调度器,说明其工做原理编程

a) Fifo schedular 默认的调度器 先进先出网络

b) Capacity schedular 计算能力调度器 选择占用内存小 优先级高的多线程

c) Fair schedular 调肚脐 公平调度器 全部job 占用相同资源
24.YarnClient模式下,执行Spark SQL报这个错,Exception in thread "Thread-2" java.lang.OutOfMemoryError: PermGen space,可是在Yarn Cluster模式下正常运行,多是什么缘由?
1)缘由查询过程当中调用的是Hive的获取元数据信息、SQL解析,而且使用Cglib等进行序列化反序列化,中间可能产生较多的class文件,致使JVM中的持久代使用较多
Cluster模式的持久代默认大小是64M,Client模式的持久代默认大小是32M,而Driver端进行SQL处理时,其持久代的使用可能会达到90M,致使OOM溢出,任务失败。
yarn-cluster模式下出现,yarn-client模式运行时却是正常的,原来在$SPARK_HOME/bin/spark-class文件中已经设置了持久代大小:
JAVA_OPTS="-XX:MaxPermSize=256m $OUR_JAVA_OPTS"
2)解决方法:在Spark的conf目录中的spark-defaults.conf里,增长对Driver的JVM配置,由于Driver才负责SQL的解析和元数据获取。配置以下:
spark.driver.extraJavaOptions -XX:PermSize=128M -XX:MaxPermSize=256M
25.spark.driver.extraJavaOptions这个参数是什么意思,大家生产环境配了多少?
传递给executors的JVM选项字符串。例如GC设置或者其它日志设置。注意,在这个选项中设置Spark属性或者堆大小是不合法的。Spark属性须要用SparkConf对象或者spark-submit脚本用到的spark-defaults.conf文件设置。堆内存能够经过spark.executor.memory设置
26.致使Executor产生FULL gc 的缘由,可能致使什么问题?
答:可能致使Executor僵死问题,海量数据的shuffle和数据倾斜等均可能致使full gc。以shuffle为例,伴随着大量的Shuffle写操做,JVM的新生代不断GC,Eden Space写满了就往Survivor Space写,同时超过必定大小的数据会直接写到老生代,当新生代写满了以后,也会把老的数据搞到老生代,若是老生代空间不足了,就触发FULL GC,仍是空间不够,那就OOM错误了,此时线程被Blocked,致使整个Executor处理数据的进程被卡住
27.Combiner 和partition的做用
combine分为map端和reduce端,做用是把同一个key的键值对合并在一块儿,能够自定义的。combine函数把一个map函数产生的<key,value>对(多个key,value)合并成一个新<key2,value2>.将新的<key2,value2>做为输入到reduce函数中这个value2亦可称之为values,由于有多个。这个合并的目的是为了减小网络传输。partition是分割map每一个节点的结果,按照key分别映射给不一样的reduce,也是能够自定义的。这里其实能够理解归类。咱们对于错综复杂的数据归类。好比在动物园里有牛羊鸡鸭鹅,他们都是混在一块儿的,可是到了晚上他们就各自牛回牛棚,羊回羊圈,鸡回鸡窝。partition的做用就是把这些数据归类。只不过在写程序的时候,mapreduce使用哈希HashPartitioner帮咱们归类了。这个咱们也能够自定义。shuffle就是map和reduce之间的过程,包含了两端的combine和partition。Map的结果,会经过partition分发到Reducer上,Reducer作完Reduce操做后,通OutputFormat,进行输出shuffle阶段的主要函数是fetchOutputs(),这个函数的功能就是将map阶段的输出,copy到reduce 节点本地
28.Spark执行任务时出现java.lang.OutOfMemoryError: GC overhead limit exceeded和java.lang.OutOfMemoryError: java heap space缘由和解决方法?
答:缘由:加载了太多资源到内存,本地的性能也很差,gc时间消耗的较多
解决方法:
1)增长参数,-XX:-UseGCOverheadLimit,关闭这个特性,同时增长heap大小,-Xmx1024m
2)下面这个两个参数调大点
export SPARK_EXECUTOR_MEMORY=6000M
export SPARK_DRIVER_MEMORY=7000M
能够参考这个:http://www.cnblogs.com/hucn/p/3572384.html
29.请列出在你之前工做中所使用过的开发map /reduce的语言
答:java,Scala,Python,shell
30.你认为/etc/hosts配置错误,会对集群有什么影响?
答:1)直接致使域名无法解析,主节点与子节点,子节点与子节点无法正常通信,2)间接致使配置错误的相关节点删的服务不正常,甚至无法启动,job执行失败等等架构

相关文章
相关标签/搜索