说完之后感觉对着吧,果然,听见面试官说嗯嗯,好。觉得差不多对啦
19 嗯嗯,好,说说yarn吧,它有什么优势,能解决什么问题?
yarn集群主要分为主节点ResourceManage,从节点 NodeManage ResourceManage负责资源的分配,将集群的资源分配给
各个应用使用,资源分配的基本单元是Container,NodeManage则是一个计算节点的管理者,负责启动应用的
所需的Conbiner,并对内部资源进行监控等。
yarn一般和mapreduce进行结合,主要是对mapreduce中的资源计算进行维护等。
答完之后,心想别问yarn吧,这块看得不是很深,哈哈,果然,面试官问了一个问题后就跳过了
20 说说Spark吧,Spark为啥比Mapreduce运行块,原因都有哪些?
1 spark是基于内存计算,mapreduce是基于磁盘运算,所以速度快
2 spark拥有高效的调度算法,是基于DAG,形成一系列的有向无环图
3 spark 是通过RDD算子来运算的,它拥有两种操作,一种转换操作,一种动作操作,可以将先运算的结果存储在
内存中,随后在计算出来
4 spark 还拥有容错机制Linage
21 什么是RDD?
RDD就是弹性分布式数据集,可以理解为一种数据结构,拥有多种不同的RDD算子
22 你都知道哪些RDD算子?
比如转换操作,有map().fliter() flatMap(),distinct()等 动作操作 有 collect ,reduce 等
23. 你知道reduceBykey 和groupBykey有啥区别吗?
reduceByKey会在结果发送至reducer之前会对每个mapper在本地进行merge,
有点类似于在MapReduce中的combiner。这样做的好处在于,在map端进行一次reduce之后,数据量会大幅度减小,
从而减小传输,保证reduce端能够更快的进行结果计算。
groupByKey会对每一个RDD中的value值进行聚合形成一个序列(Iterator),此操作发生在reduce端,
所以势必会将所有的数据通过网络进行传输,造成不必要的浪费。同时如果数据量十分大,
可能还会造成OutOfMemoryError。
24.现在有一个业务,当SparkStreaming在消费kafka里面的数据,然后消费了一段时间之后,程序挂了,当
下一次程序启动时如何保证SparkStraming能继续消费kafka之前的位置?
听到这个问题时,我就偷笑啦,幸亏上次海康威视问过我,我就好好看了一下
可以依靠checkPoint机制来保证,每次SparkStreaming消费kafka数据后,将消费的kafka offsets更新到checkpoint,当
程序挂机或升级时,就可以用过读取checkpoint 的记录来接着上次的位置进行读取,实现数据的零丢失。
25,除了这种方式还有什么方式?
还可以在sparkStreaming中另外启动一个预写日志,这将同步保存所有收到的kafka数据导hdfs中,以便发生故障时,
恢复到上次的位置和之前的数据。
26,你说说Spark的广播变量?
听到这个问题后,一脸懵逼,不会拉。。 我都猜想 面试官肯定在想,小样,我还难不倒你拉。。。。
然后我就让面试官给我讲了一下。。
Spark中因为算子中的真正逻辑是发送到Executor中去运行的,所以当Executor中需要引用外部变量时,
需要使用广播变量。广播变量只能在Driver端定义,不能在Executor端定义,在Driver端可以修改广播
变量的值,在Executor端无法修改广播变量的值
27 那你知道累加器吗?
之前看过一点,累机器相当于统筹大变量,常用于计数,统计。累加器常常被作为rdd的map filter操作的副产品等。
28.你说说spark中 job,stage,task,分别代表什么?
Job简单讲就是提交给spark的任务。 Stage是每一个job处理过程要分为的几个阶段。
Task是每一个job处理过程要分几为几次任务。Task是任务运行的最小单位。最终是要以task为单位运行在executor中。
29.嗯嗯 好,说说Spark的工作机制?
我去,咋问的都是大问题啊,幸亏之前复习过。。
用户在客户端提交job作业后,会由driver运行main方法并创建SparkContext上下文。执行RDD算子,形成DAG图,
然后将DAG图交给DAGScheduler来处理。DAGScheduler按照RDD之间的依赖关系划分stage,输入task Scheduler,
task Scheduler会将stage划分为task set分发到各个节点的executer中执行,executor以多线程的方式执行,每个线程
负责一个任务,任务结束后,根据不同类型的任务返回不同的结果。
30 你了解zookeeper吗?
zookeeper 是一个分布式协调服务,zookeeper集群包括 leader 和 follow
31 说说zookeeper的选举过程,比如现在有五台机器,ABCDE依次启动起来,那么哪台是leader?
记得不太清楚了。。就大概说了一下
1.首先更新logicalclock并提议自己为leader并广播出去
2.进入本轮投票的循环
3.从recvqueue队列中获取一个投票信息,如果为空则检查是否要重发自己的投票或者重连,否则
判断投票信息中的选举状态: 就回答到这,后来下来百度了一下。。。
32 hive了解吗?
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能
33.说说内部表和外部表的区别?
内部表的数据是由Hive自身管理的,外部表的数据是由HDFS管理的;
删除内部表会删除元数据和存储的数据;删除外部表只删除元数据不删除存储的数据
34,你知道UDF吗?
UDF就是Hive提供的内置函数无法满足业务处理需要时,可以考虑使用用户自定义函数。
35 一张大表,一张小表,你写join in时,哪个表放左边,哪个表放右边?
小表放前,大表放后,左查询,根据小表为主进行查询。
36 问一下kafka的问题吧,kafka是怎么进行数据备份的?
哇,面试官 你是要把大数据里面的每个组件分别问一下,。。。。深呼一口气,思考了一下 然后巴拉巴拉
备份机制是Kafka0.8版本之后出的,一个备份数量为n的集群允许n-1个节点失败。在所有备份节点中,
有一个节点作为lead节点,这个节点保存了其它备份节点列表,并维持各个备份间的状体同步。
37.消费者是从leader中拿数据,还是从follow中拿数据?
。。。不太会,备份机制这块没咋深入了解过。
kafka是由follower周期性或者尝试去pull(拉)过来(其实这个过程与consumer消费过程非常相似),
写是都往leader上写,但是读并不是任意flower上读都行,读也只在leader上读,flower只是数据的一个备份,
保证leader被挂掉后顶上来,并不往外提供服务。
38.那换个问题吧。说说kafka的ISR机制?
- kafka 为了保证数据的一致性使用了isr 机制,
-
- leader会维护一个与其基本保持同步的Replica列表,该列表称为ISR(in-sync Replica),每个Partition都会有一个ISR,