大数据面试题集锦(一)

原创 2018年04月14日 22:20:42

1.Spark master使用zookeeper进行HA的,有哪些元数据保存在Zookeeper

答:spark过这个参数spark.deploy.zookeeper.dir指定master元数据在zookeeper中保存的位置,包括WorkerDriverApplication以及Executorsstandby节点要从zk中,获得元数据信息,恢复集群运行状态,才能对外继续提供服务,作业提交资源申请等,在恢复前是不能接受请求的。另外,Master切换需要注意2

1)在Master切换的过程中,所有的已经在运行的程序皆正常运行!因为Spark Application在运行前就已经通过Cluster Manager获得了计算资源,所以在运行时Job本身的调度和处理和Master是没有任何关系的!

2 Master的切换过程中唯一的影响是不能提交新的Job:一方面不能够提交新的应用程序给集群,因为只有Active Master才能接受新的程序的提交请求;另外一方面,已经运行的程序中也不能够因为Action操作触发新的Job的提交请求;

2.Spark master HA 主从切换过程不会影响集群已有的作业运行,为什么?

答:因为程序在运行之前,已经申请过资源了,driverExecutors通讯,不需要和master进行通讯的。

3.Spark on Mesos中,什么是的粗粒度分配,什么是细粒度分配,各自的优点和缺点是什么?

答:1)粗粒度:启动时就分配好资源, 程序启动,后续具体使用就使用分配好的资源,不需要再分配资源;好处:作业特别多时,资源复用率高,适合粗粒度;不好:容易资源浪费,假如一个job1000task,完成了999个,还有一个没完成,那么使用粗粒度,999个资源就会闲置在那里,资源浪费。2)细粒度分配:用资源的时候分配,用完了就立即回收资源,启动会麻烦一点,启动一次分配一次,会比较麻烦。

4.Apache Spark有哪些常见的稳定版本,Spark1.6.0的数字分别代表什么意思?

答:常见的大的稳定版本有Spark 1.3,Spark1.6, Spark 2.0 Spark1.6.0的数字含义

1)第一个数字:

major version : 代表大版本更新,一般都会有一些 api 的变化,以及大的优化或是一些结构的改变;

2)第二个数字:

minor version : 代表小版本更新,一般会新加 api,或者是对当前的 api 就行优化,或者是其他内容的更新,比如说 WEB UI 的更新等等;

3)第三个数字:0

patch version  代表修复当前小版本存在的一些 bug,基本不会有任何 api 的改变和功能更新;记得有一个大神曾经说过,如果要切换 spark 版本的话,最好选 patch version  0 的版本,因为一般类似于 1.2.0, … 1.6.0 这样的版本是属于大更新的,有可能会有一些隐藏的 bug 或是不稳定性存在,所以最好选择 1.2.1, … 1.6.1 这样的版本。

通过版本号的解释说明,可以很容易了解到,spark2.1.1的发布时是针对大版本2.1做的一些bug修改,不会新增功能,也不会新增API,会比2.1.0版本更加稳定。

5.driver的功能是什么?

答: 1)一个Spark作业运行时包括一个Driver进程,也是作业的主进程,具有main函数,并且有SparkContext的实例,是程序的人口点;2)功能:负责向集群申请资源,向master注册信息,负责了作业的调度,,负责作业的解析、生成Stage并调度TaskExecutor上。包括DAGSchedulerTaskScheduler

6.spark的有几种部署模式,每种模式特点?

1)本地模式

Spark不一定非要跑在hadoop集群,可以在本地,起多个线程的方式来指定。将Spark应用以多线程的方式直接运行在本地,一般都是为了方便调试,本地模式分三类

·  local:只启动一个executor

·  local[k]:启动kexecutor

·  local[*]:启动跟cpu数目相同的 executor

2)standalone模式

分布式部署集群, 自带完整的服务,资源管理和任务监控是Spark自己监控,这个模式也是其他模式的基础,

3)Spark on yarn模式

分布式部署集群,资源和任务监控交给yarn管理,但是目前仅支持粗粒度资源分配方式,包含clusterclient运行模式,cluster适合生产,driver运行在集群子节点,具有容错功能,client适合调试,dirver运行在客户端

4Spark On Mesos模式。官方推荐这种模式(当然,原因之一是血缘关系)。正是由于Spark开发之初就考虑到支持Mesos,因此,目前而言,Spark运行在Mesos上会比运行在YARN上更加灵活,更加自然。用户可选择两种调度模式之一运行自己的应用程序:

1)   粗粒度模式(Coarse-grained Mode):每个应用程序的运行环境由一个Dirver和若干个Executor组成,其中,每个Executor占用若干资源,内部可运行多个Task(对应多少个“slot”)。应用程序的各个任务正式运行之前,需要将运行环境中的资源全部申请好,且运行过程中要一直占用这些资源,即使不用,最后程序运行结束后,回收这些资源。

2)   细粒度模式(Fine-grained Mode):鉴于粗粒度模式会造成大量资源浪费,Spark On Mesos还提供了另外一种调度模式:细粒度模式,这种模式类似于现在的云计算,思想是按需分配。

7.SparkWorker的主要工作是什么?

答:主要功能:管理当前节点内存,CPU的使用状况,接收master分配过来的资源指令,通过ExecutorRunner启动程序分配任务,worker就类似于包工头,管理分配新进程,做计算的服务,相当于process服务。需要注意的是:1worker会不会汇报当前信息给masterworker心跳给master主要只有workid,它不会发送资源信息以心跳的方式给matermaster分配的时候就知道work,只有出现故障的时候才会发送资源。2worker不会运行代码,具体运行的是Executor是可以运行具体appliaction写的业务逻辑代码,操作代码的节点,它不会运行程序的代码的。

8.Spark为什么比mapreduce快?

答:1)基于内存计算,减少低效的磁盘交互;2)高效的调度算法,基于DAG3)容错机制Linage,精华部分就是DAGLingae

9.hadoopsparkshuffle相同和差异?

答:1从 high-level 的角度来看,两者并没有大的差别。 都是将 mapperSpark 里是 ShuffleMapTask)的输出进行 partition,不同的 partition 送到不同的 reducerSpark 里 reducer 可能是下一个 stage 里的 ShuffleMapTask,也可能是 ResultTask)。Reducer 以内存作缓冲区,边 shuffle 边 aggregate 数据,等到数据 aggregate 好以后进行 reduce() Spark 里可能是后续的一系列操作)。

2)从 low-level 的角度来看,两者差别不小。 Hadoop MapReduce 是 sort-based,进入 combine() 和 reduce() 的 records 必须先 sort。这样的好处在于 combine/reduce() 可以处理大规模的数据,因为其输入数据可以通过外排得到(mapper 对每段数据先做排序,reducer 的 shuffle 对排好序的每段数据做归并)。目前的 Spark 默认选择的是 hash-based,通常使用 HashMap 来对 shuffle 来的数据进行 aggregate,不会对数据进行提前排序。如果用户需要经过排序的数据,那么需要自己调用类似 sortByKey() 的操作;如果你是Spark 1.1的用户,可以将spark.shuffle.manager设置为sort,则会对数据进行排序。在Spark 1.2中,sort将作为默认的Shuffle实现。

3)从实现角度来看,两者也有不少差别。 Hadoop MapReduce 将处理流程划分出明显的几个阶段:map(), spill, merge, shuffle, sort, reduce() 等。每个阶段各司其职,可以按照过程式的编程思想来逐一实现每个阶段的功能。在 Spark 中,没有这样功能明确的阶段,只有不同的 stage 和一系列的 transformation(),所以 spill, merge, aggregate 等操作需要蕴含在 transformation() 中。

如果我们将 map 端划分数据、持久化数据的过程称为 shuffle write,而将 reducer 读入数据、aggregate 数据的过程称为 shuffle read。那么在 Spark 中,问题就变为怎么在 job 的逻辑或者物理执行图中加入 shuffle write 和 shuffle read 的处理逻辑?以及两个处理逻辑应该怎么高效实现? 

Shuffle write由于不要求数据有序,shuffle write 的任务很简单:将数据 partition 好,并持久化。之所以要持久化,一方面是要减少内存存储空间压力,另一方面也是为了 fault-tolerance

10.MapreduceSpark的都是并行计算,那么他们有什么相同和区别

答:两者都是用mr模型来进行并行计算:

1)hadoop的一个作业称为jobjob里面分为map taskreduce task,每个task都是在自己的进程中运行的,当task结束时,进程也会结束。 

2)spark用户提交的任务成为application,一个application对应一个sparkcontextapp中存在多个job,每触发一次action操作就会产生一个job。这些job可以并行或串行执行,每个job中有多个stagestageshuffle过程中DAGSchaduler通过RDD之间的依赖关系划分job而来的,每个stage里面有多个task,组成tasksetTaskSchaduler分发到各个executor中执行,executor的生命周期是和app一样的,即使没有job运行也是存在的,所以task可以快速启动读取内存进行计算。 

3)hadoopjob只有mapreduce操作,表达能力比较欠缺而且在mr过程中会重复的读写hdfs,造成大量的io操作,多个job需要自己管理关系。 

spark的迭代计算都是在内存中进行的,API中提供了大量的RDD操作如joingroupby等,而且通过DAG图可以实现良好的容错。

11.RDD机制? 

答:rdd分布式弹性数据集,简单的理解成一种数据结构,是spark框架上的通用货币。 

所有算子都是基于rdd来执行的,不同的场景会有不同的rdd实现类,但是都可以进行互相转换。 

rdd执行过程中会形成dag图,然后形成lineage保证容错性等。 从物理的角度来看rdd存储的是blocknode之间的映射。

12spark工作机制? 

答:用户在client端提交作业后,会由Driver运行main方法并创建spark context上下文。 

执行add算子,形成dag图输入dagscheduler,按照add之间的依赖关系划分stage输入task scheduler task scheduler会将stage划分为task set分发到各个节点的executor中执行。

13.什么是RDD宽依赖和窄依赖?

RDD和它依赖的parent RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide dependency)。

1)窄依赖指的是每一个parent RDDPartition最多被子RDD的一个Partition使用

2)宽依赖指的是多个子RDDPartition会依赖同一个parent RDDPartition

14.spark-submit的时候如何引入外部jar 

方法一:spark-submit –jars

根据spark官网,在提交任务的时候指定–jars,用逗号分开。这样做的缺点是每次都要指定jar包,如果jar包少的话可以这么做,但是如果多的话会很麻烦。

命令:spark-submit --master yarn-client --jars ***.jar,***.jar

方法二:extraClassPath

提交时在spark-default中设定参数,将所有需要的jar包考到一个文件里,然后在参数中指定该目录就可以了,较上一个方便很多:

spark.executor.extraClassPath=/home/hadoop/wzq_workspace/lib/* spark.driver.extraClassPath=/home/hadoop/wzq_workspace/lib/*

需要注意的是,你要在所有可能运行spark任务的机器上保证该目录存在,并且将jar包考到所有机器上。这样做的好处是提交代码的时候不用再写一长串jar了,缺点是要把所有的jar包都拷一遍。

15.cachepesist的区别 

答:1cachepersist都是用于将一个RDD进行缓存的,这样在之后使用的过程中就不需要重新计算了,可以大大节省程序运行时间;2 cache只有一个默认的缓存级别MEMORY_ONLY cache调用了persist,而persist可以根据情况设置其它的缓存级别;3executor执行的时候,默认60%cache40%task操作,persist最根本的函数,最底层的函数

16.spark如何解决数据倾斜的问题?

    参见博客:https://blog.csdn.net/zonzereal/article/details/78796111

             https://blog.csdn.net/zonzereal/article/details/78798575

             https://blog.csdn.net/zonzereal/article/details/78919388


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Zonzereal/article/details/79944931

java面试题集锦(一)

(1):equals和==的区别         equals是用于比较两个实例所指向的内存空间里面的值是否相等;         ==用于两个实例是否指向同一内存空间; (2):String与Str...
  • hzw19920329
  • hzw19920329
  • 2016-07-19 22:55:58
  • 2683

Android客户端面试题集锦

转自 http://www.cnblogs.com/jasonkent27/p/4856209.html 声明:本文问题来自但不限于Xoper.ducky大牛的面试总结,网址:http://ww...
  • u010054982
  • u010054982
  • 2017-07-18 19:19:18
  • 955

Android面试题集锦(一)

(1):事件分发机制概述         首先应该搞清楚两个问题:事件分发机制分发的是什么?怎么进行分发?         分发的是MotionEvent事件了,也就是当我们的MotionEvent...
  • hzw19920329
  • hzw19920329
  • 2016-07-20 19:22:51
  • 2500

android阿里面试题锦集

转自 http://www.jianshu.com/p/cf5092fa2694 前几天突然就经历了阿里android实习内推的电面,感觉有好多以前看过的东西都忘记了,然后又复习了一...
  • u010054982
  • u010054982
  • 2017-07-18 19:22:18
  • 712

大数据面试题及答案 2018

1.   java内存模型2.gc3.编译好的scala程序,运行时还需要scala环境吗Scala的代码执行是用REPL过程,ReadExecute Print Loop4.object中有哪些方法...
  • qianfeng_dashuju
  • qianfeng_dashuju
  • 2018-02-28 17:14:21
  • 466

java面试题集锦.rar

  • 2008年11月27日 20:14
  • 26KB
  • 下载

J2EE面试题集锦 java

  • 2010年04月18日 23:24
  • 44KB
  • 下载

大数据工程师面试题(一)

1.   选择题 1.1.  下面哪个程序负责 HDFS 数据存储。 c)Datanode  答案 C datanode 1.2.  HDfS 中的 block 默认保存几份? a)3 份 ...
  • u011682879
  • u011682879
  • 2017-02-19 13:46:40
  • 5895

百度、淘宝、网易、搜狐前端开发面试题

  • 2013年08月14日 09:56
  • 728KB
  • 下载

大数据面试题以及答案整理(一)

在进行大数据工作的面试中,将面试问题进行了汇总,然后对答案进行了整理。...
  • godblesspl
  • godblesspl
  • 2018-02-27 22:27:40
  • 3782
收藏助手
不良信息举报
您举报文章:大数据面试题集锦(一)
举报原因:
原因补充:

(最多只允许输入30个字)