spark面试题Miles
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
spark面试题Miles
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.6
export SPARK_HOME=`pwd`
export PATH=${SPARK_HOME}/bin:$PATH
4. 本地运⾏行行Spark
4.1 运⾏行行SparkPi
$SPARK_HOME/bin/run-example SparkPi
4.2 运⾏行行spark-shell
$SPARK_HOME/bin/spark-shell
在提示符中开始运⾏行行Spark程序
5. 集群模式运⾏行行Spark
5.1 配置集群模式
cd $SPARK_HOME/conf
vim spark-env.sh
加⾏入如下内容
HADOOP_CONF_DIR=/home/bigdata/hadoop-2.6.0/etc/hadoop(Hadoop的安装⾏见参考⾏文档
5.2 运⾏行行SparkPi
export MASTER=yarn-client
$SPARK_HOME/bin/run-example SparkPi
export MASTER=yarn-cluster
$SPARK_HOME/bin/run-example SparkPi
5.2 运⾏行行Spark-shell
$SPARK_HOME/bin/spark-shell --master yarn-client
spark on yarn的两种模式? client 模式?和cluster模式?