spark面试题Miles.docx_第1页
spark面试题Miles.docx_第2页
spark面试题Miles.docx_第3页
spark面试题Miles.docx_第4页
spark面试题Miles.docx_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

13、 hadoop和spark的都是并行计算,那么他们有什么相同和区别?两者都是用mr模型来进行并行计算,hadoop的一个作业称为job,job里面分为map task和reduce task,每个task都是在自己的进程中运行的,当task结束时,进程也会结束。spark用户提交的任务成为application,一个application对应一个sparkcontext,app中存在多个job,每触发一次action操作就会产生一个job。这些job可以并行或串行执行,每个job中有多个stage,每个stage里面有多个task,组成taskset由TaskSchaduler分发到各个executor中执行,executor的生命周期是和app一样的,即使没有job运行也是存在的,所以task可以快速启动读取内存进行计算。hadoop的job只有map和reduce操作,表达能力比较欠缺而且在mr过程中会重复的读写hdfs,造成大量的io操作,多个job需要自己管理关系。spark的迭代计算都是在内存中进行的,API中提供了大量的RDD操作如join,groupby等,而且通过DAG图可以实现良好的容错。16、 简单说一下hadoop和spark的shuffle过程?hadoop:map端保存分片数据,通过网络收集到reduce端。spark:spark的shuffle是在DAGSchedular划分Stage的时候产生的,TaskSchedule要分发Stage到各个worker的executor。减少shuffle可以提高性能。17、RDD机制?rdd分布式弹性数据集,简单的理解成一种数据结构,是spark框架上的通用货币。所有算子都是基于rdd来执行的,不同的场景会有不同的rdd实现类,但是都可以进行互相转换。rdd执行过程中会形成dag图,然后形成lineage保证容错性等。从物理的角度来看rdd存储的是block和node之间的映射。18、spark有哪些组件?(1)master:管理集群和节点,不参与计算。(2)worker:计算节点,进程本身不参与计算,和master汇报。(3)Driver:运行程序的main方法,创建spark context对象。(4)spark context:控制整个application的生命周期,包括dagsheduler和task scheduler等组件。(5)client:用户提交程序的入口。19、spark工作机制?用户在client端提交作业后,会由Driver运行main方法并创建spark context上下文。执行rdd算子,形成dag图输入dagscheduler,按照rdd之间的依赖关系划分stage输入task scheduler。task scheduler会将stage划分为task set分发到各个节点的executor中执行。20、spark的优化怎么做?通过spark-env文件、程序中sparkconf和set property设置。(1)计算量大,形成的lineage过大应该给已经缓存了的rdd添加checkpoint,以减少容错带来的开销。(2)小分区合并,过小的分区造成过多的切换任务开销,使用repartition。21、kafka工作原理?producer向broker发送事件,consumer从broker消费事件。事件由topic区分开,每个consumer都会属于一个group。相同group中的consumer不能重复消费事件,而同一事件将会发送给每个不同group的consumer。Scala的特点?Scala是兼容的Scala是简洁的Scala是高层级的Scala是静态类型的和Java的区别?(1)scala与java都有7中数值类型:int、short、long、byte、float、double、boolean这7种,但是scala中这7种值类型是类,在java中属于基本类型,java中,数据类型分成基本类型和引用类型,scala中不区分。(2)scala中的变量或函数的类型总是写在变量或者函数名的后面(3)scala中的操作符与java中的操作符没有什么不同,但是在scala中,操作符是方法,在java中操作符不是方法,且在scala中,除了字母数字之外的其他特殊字符也可以作为方法(4)scala中的通配符是_,java中的通配符是*(5)scala中的unit相当于java中的void(6)scala中的if/else的表达式与java中的差不多,但是scala中有值(7)scala中没有static,但是可以用object来达到java中相同的效果,scala中的object可以实现单例对象.RDD的数据结构是怎么样的?RDD的全称:弹性分布式数据集合,它是spark的基本数据结构,spark中的所有数据都是通过RDD的形式进行组织。RDD是不可变的数据集合,不可变的意思是RDD中的每个分区数据是只读的。RDD数据集是要做逻辑分区的(这里的分区类似hadoop中的逻辑切片split),每个分区可以单独在集群节点进行计算。RDD数据集中的数据类型可以包含任何java类型、scala类型、python类型或者自定义的类型。RDD擅长的领域:迭代式的数据处理,比如机器学习。1.分区列表,Partition List。这里的分区概念类似hadoop中的split切片概念,即数据的逻辑切片 2.针对每个split(切片)的计算函数,即同一个RDD的每个切片的数据使用相同的计算函数 3.对其他rdd的依赖列表 4.可选,如果是(Key,Value)型的RDD,可以带分区类 5.可选,首选块位置列表(hdfs block location);简要描述Spark分布式集群搭建的步骤1. 下载Spark的发行版2. 解压缩文件3. 设置环境变量cd spark-1.6.3-bin-hadoop2.6export SPARK_HOME=pwdexport PATH=$SPARK_HOME/bin:$PATH4. 本地运行Spark4.1 运行SparkPi$SPARK_HOME/bin/run-example SparkPi4.2 运行spark-shell$SPARK_HOME/bin/spark-shell在提示符中开始运行Spark程序5. 集群模式运行Spark5.1 配置集群模式cd $SPARK_HOME/confvim spark-env.sh加入如下内容HADOOP_CONF_DIR=/home/bigdata/hadoop-2.6.0/etc/hadoop(Hadoop的安装见参考文档5.2 运行SparkPiexport MASTER=yarn-client$SPARK_HOME/bin/run-example SparkPiexport MASTER=yarn-cluster$SPARK_HOME/bin/run-example SparkPi5.2 运行Spark-shell$SPARK_HOME/bin/spark-shell -master yarn-clientspark on yarn的两种模式? client 模式? 和cluster模式?yarn-cluster和yarn-client模式的区别其实就是Application Master进程的区别,yarn-cluster模式下,driver运行在AM(Application Master)中,它负责向YARN申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉Client,作业会继续在YARN上运行。而yarn-client模式下,Application Master仅仅向YARN请求executor,client会和请求的container通信来调度他们工作,也就是说Client不能离开。数据倾斜Spark如何处理非结构化数据?通过Scala的函数式编程进行基于RDD的非结构化数据处理。7. 快在哪里呢?Spark和Mapreduce快? 为什么快呢? 快在哪里呢? 1. 统一的RDD抽象和操作2. 基于内存的迭代式计算3. 它可以把整个执行过程做一个图,然后进行优化。8. spark sql又为什么比hive快呢1. 消除了冗余的HDFS读写2. 消除了冗余的MapReduce阶段3. JVM的优化RDD的数据结构是怎么样的?1. 一个分片列表 partition list2. 一个计算函数compute,对每一个split进行计算3. 对其他rdd的依赖列表dependencies list.依赖又份 宽依赖和窄依赖。4. partitioner for key-value RDDs.比如说 hash-partitioned rdd(这是可选的,并不是所有的add都会有这个特征)5. 对每一个split计算的优先位置 Preferred Location。比如对一个hdfs文件进行计算时,可以获取优先计算的block locations.Spark工作的一个流程1.构建Spark Application的运行环境(启动SparkContext),SparkContext向资源管理器(可以是Standalone、Mesos或YARN)注册并申请运行Executor资源;2.资源管理器分配Executor资源,Executor运行情况将随着心跳发送到资源管理器上;3.SparkContext构建成DAG图,将DAG图分解成Stage,并把Taskset发送给Task Scheduler。Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行同时SparkContext将应用程序代码发放给Executor。4.Task在Executor上运行,运行完毕释放所有资源。stage怎么划分的?划分Stage的一个主要依据是当前计算因子的输入是否是确定的,如果是则将其分在同一个Stage,避免多个Stage之间的消息传递开销400-820-7975宽依赖窄依赖是什么?窄依赖(图左):父partition对子partition是一对一或多对一。宽依赖(图右):父partition对子partition是一对多。如果两个RDD在进行join操作时,一个RDD的partition仅仅和另一个RDD中已知个数的Partition进行join,那么这种类型的join操作就是窄依赖 7.问了shuffle过程。 Spark的Shuffle总体而言就包含两个基本的过程:Shuffle write和Shuffle read。ShuffleMapTask的整个执行过程就是Shuffle write。将数据根据Hash的结果,将各个Reduce分区的数据写到各自的磁盘文件中,写数据时不做排序操作。 首先 是将map的输出结果送到对应的缓冲区bucket里面,每个bucket里的文件会被写入本地磁盘文件ShuffleBlockFile中,形成一个FileSegment文件。 Shuffle read指的是reducer对属于自己的FileSegment文件进行fetch操作,这里采用的netty框架,fetch操作会等到所有的Shuffle Write过程结束后再进行,.reducer通过fetch得到的FileSegment先放在缓冲区softBuffer中,默认大小48MB。 Spark性能优化主要有哪些手段? 过对Stage/Cache

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论