为了保证效率和质量,每篇文章发布6个知识点,由简单及难,我们开始spark+kafka:

一般情况下面试的时候只要涉及到实时计算或者大批量计算,都会涉及到kafka和spark的面试问题,两者一般是综合起来的的,因此我把他们放在一起进行总结,这一块的问题会比较多,将分不同纬度多次总结。

spark 实时 面试题 spark面试题案例_kafka

spark 实时 面试题 spark面试题案例_spark_02

 

1)spark的执行流程?

1.构建Spark Application的运行环境(启动SparkContext),SparkContext向资源管理器(可以是Standalone、Mesos或YARN)注册并申请container资源;
2.资源管理器分配container资源并启动Executor,Executor的运行情况将随着心跳发送到资源管理器上;
3.SparkContext构建成DAG图,将DAG图分解成Stage,并把Taskset发送给Task Scheduler。Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行。
4.Task在Executor上运行,运行完毕释放所有资源。

2)写一个简单的Wordcount并描述?

以Scala为例进行介绍,代码如下:

val result = sc.textFile(input_path).flatmap(line => line.strip().split(‘,’)).map(word=>(word,1)).reduceByKey(_+_).map(x => x._1+’\t’+x._2).saveAsTextFile(output_path)

描述的时候大家可以结合自己的调优经验或者解决数据倾斜的经验进行补充,给面试官留下一个好印象。

3)kafka的partition设置多了或少了会有什么影响?

1、越多的分区可以提供更高的吞吐量,因为在kafka中,单个patition是kafka并行操作的最小单元,只允许单个partition的数据被一个consumer线程消费。
2、越多的分区需要打开更多地文件句柄,在kafka的数据日志文件目录中,每个日志数据段都会分配两个文件,一个索引文件和一个数据文件,分区越多,需要的句柄越多。
3、更多地分区会导致更高的不可用性,见kafka的容灾特点
4、越多的分区可能增加端对端的延迟,消息在所有in-sync副本列表同步复制完成之后才暴露。因此,in-sync副本复制所花时间将是kafka端对端延迟的最主要部分。
5、越多的partition意味着需要客户端需要更多的内存。在内部实现层面,producer按照每一个partition来缓存消息。如果partition的数量增加,众多的partition所消耗的内存汇集起来,有可能会超过设置的内容大小限制。

4)kafka的容灾是如何实现的?

Kafka通过多副本复制技术,实现kafka集群的高可用和稳定性。每个partition都会有多个数据副本,每个副本分别存在于不同的broker。所有的数据副本中,有一个数据副本为Leader,其他的数据副本为follower。在kafka集群内部,所有的数据副本皆采用自动化的方式进行管理,并且确保所有的数据副本的数据皆保持同步状态。不论是producer端还是consumer端发往partition的请求,皆通过leader数据副本所在的broker进行处理。
当broker发生故障时,对于leader数据副本在该broker的所有partition将会变得暂时不可用。Kafka将会自动在其他数据副本中选择出一个leader,用于接收客户端的请求。这个过程由kafka controller节点broker自动完成,主要是从Zookeeper读取和修改受影响partition的一些元数据信息。

5)shuffle manager的种类?

通过set spark.shuffle.manager = hash来设定。
Spark 1.5以后,有三个可选项:hash、sort和tungsten-sort。Hash Shuffle Manager是Spark 1.2以前的默认选项,但是Spark 1.2以及之后的版本默认都是Sort Shuffle Manager了。tungsten-sort与sort类似,但是使用了tungsten计划中的堆外内存管理机制,内存使用效率更高。
调优建议:由于SortShuffleManager默认会对数据进行排序,因此如果你的业务逻辑中需要该排序机制的话,则使用默认的SortShuffleManager就可以;而如果你的业务逻辑不需要对数据进行排序,设定为的HashShuffleManager来避免排序操作,同时提供较好的磁盘读写性能。

6)RDD中存的是什么?及Spark中Driver的作用是什么?

RDD中存的是数据块的集合,即partition的集合。

Driver的作用是:

1.创建spark的上下文
2.划分RDD并生成有向无环图(DAGScheduler)
3.与spark中的其他组进行协调,协调资源等等(SchedulerBackend)
4.生成并发送task到executor(taskScheduler)

 

spark 实时 面试题 spark面试题案例_spark_03

 



为了保证效率和质量,每篇文章发布6个知识点,由简单及难,我们开始spark+kafka: