本栏目大数据开发岗高频面试题主要出自
大数据技术
专栏的各个小专栏,由于个别笔记上传太早,排版杂乱,后面会进行原文美化、增加。
文章目录- 面试题 01、spark.storage.memoryFraction参数的含义,实际生产中如何调优?
- 面试题02、Spark有哪两种算子?
- 面试题03、Spark有哪些聚合类的算子,我们应该尽量避免什么类型的算子?
- 面试题04、如何从Kafka中获取数据?
- 面试题05、RDD创建有哪几种方式?
- 总结
停不要往下滑了,
默默想5min,
看看这5道面试题你都会吗?
代码语言:javascript复制面试题 01、spark.storage.memoryFraction参数的含义,实际生产中如何调优?
面试题02、Spark有哪两种算子?
面试题 03、Spark有哪些聚合类的算子,我们应该尽量避免什么类型的算子?
面试题04、如何从Kafka中获取数据?
面试题05、RDD创建有哪几种方式?
以下答案仅供参考:
面试题 01、spark.storage.memoryFraction参数的含义,实际生产中如何调优?
1)用于设置RDD持久化数据在Executor内存中能占的比例,默认是0.6,,默认Executor 60%的内存,可以用来保存持久化的RDD数据。根据你选择的不同的持久化策略,如果内存不够时,可能数据就不会持久化,或者数据会写入磁盘; 2)如果持久化操作比较多,可以提高spark.storage.memoryFraction参数,使得更多的持久化数据保存在内存中,提高数据的读取性能,如果shuffle的操作比较多,有很多的数据读写操作到JVM中,那么应该调小一点,节约出更多的内存给JVM,避免过多的JVM gc发生。在web ui中观察如果发现gc时间很长,可以设置spark.storage.memoryFraction更小一点。
面试题02、Spark有哪两种算子?
Transformation(转化)算子和Action(执行)算子。
面试题03、Spark有哪些聚合类的算子,我们应该尽量避免什么类型的算子?
在我们的开发过程中,能避免则尽可能避免使用reduceByKey、join、distinct、repartition等会进行shuffle的算子,尽量使用map类的非shuffle算子。 这样的话,没有shuffle操作或者仅有较少shuffle操作的Spark作业,可以大大减少性能开销。
面试题04、如何从Kafka中获取数据?
1)基于Receiver的方式 这种方式使用Receiver来获取数据。Receiver是使用Kafka的高层次Consumer API来实现的。receiver从Kafka中获取的数据都是存储在Spark Executor的内存 中的,然后Spark Streaming启动的job会去处理那些数据。 2)基于Direct的方式 这种新的不基于Receiver的直接方式,是在Spark 1.3中引入的,从而能够确保更加健壮的机制。替代掉使用Receiver来接收数据后,这种方式会周期性地 查询Kafka,来获得每个topic partition的最新的offset,从而定义每个batch的offset的范围。当处理数据的job启动时,就会使用Kafka的简单consumer api来 获取Kafka指定offset范围的数据。
面试题05、RDD创建有哪几种方式?
1)使用程序中的集合创建rdd 2)使用本地文件系统创建rdd 3)使用hdfs创建rdd 4)基于数据库db创建rdd 5)基于Nosql创建rdd,如hbase 6)基于s3创建rdd 7)基于数据流,如socket创建rdd
总结
今天我们复习了面试中常考的Spark相关的五个问题,你做到心中有数了么?