spark面试题Miles

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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模式?

相关文档
最新文档