欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

大数据面试题 -- 02

程序员文章站 2024-03-23 15:24:52
...

1.kafka出现消息堆积怎么办?

1、最简单的原因:消费者太少,增加消费者来解决
2、还有一个原因就是消费者每次poll的数据业务处理时间不能超过kafka的max.poll.interval.ms,该参数在kafka 0.10.2.1 中的默认值是300s,所以要综合业务数据来设置每次poll的数据量。

2.kafka如何实现高吞吐?

顺序读写
在硬盘中采用顺序读写的方式,性能损耗不大

零拷贝
“零拷贝技术”只用将磁盘文件的数据复制到页面缓存中一次,然后将数据从页面缓存直接发送到网络中(发送给不同的订阅者时,都可以使用同一个页面缓存),避免了重复复制操作。

文件分段
读取快速,定位快速。

批量发送
批量发送记录Offset。不是一次只发一条数据。

数据压缩

3.spark算子了解哪些,哪些算子会触发suffle?join会触发suffle吗?

两个RDD的分区数相同,在join的时候设置的分区数也相同,则在join阶段不会产生shuffle
两个RDD的分区数不同,在join的时候设置的分区数不同,则在join阶段都会产生shuffle
两个RDD的分区数不同,在join的时候设置的分区数和其中一个相同,则在join阶段不同的会产生shuffle
*也就是说,当两个rdd分区数和分区方式一样时做join就不会产生shuffle***

4.sqoop是不是和集群对应?

Sqoop只是一个将关系型数据库中的数据和hadoop生态体系的数据进行相互传输的工具,单节点就可以

5.flume怎么提高吞吐量?

可以配置source时批处理的配置batchsize增大;channel中的event条数配置加大;sink配置batchsize参数加大。在source端设置选择器将event写入多个channel中,channel使用memory.

6.Hbase怎么高效写入,如何模糊查询?

先写成一个hfile文件然后直接可以映射进去,比put快很多
模糊查询利用API:使用正则比较器写一个正则模糊查询,然后将比较器绑定到过滤器上,在将过滤器提交到hbase

7.kafka怎么保证一次,语义有哪几种?区别是什么?

使用幂等机制和事务机制来确保消息只发送一次.
语义有3种:
1.at most once : 意思是最多一次,数据不可能重复(类似 ack = 0)
2.at least once : 意思是最少一次,数据可能重复 (类似 ack = -1\all)
3.exactly once : 意思是正好一次,数据不可能重复 ,需要配合幂等机制来实现. 也就是 idempotent + at least once = exactly once (开启幂等机制的方法:在配置文件中添加 enable.idempotence = true)

8.## 机架感知了解吗

2.8.2之前是近近远 ,也就是客户端访问的服务器保存一份副本,与第一份副本同机架不同节点保存一份副本,与前两份副本不同机架随机节点保存一份副本

2.8.2之后是近远远 ,也就是客户端访问的服务器保存一份副本,与第一份副本不同机架随机节点存储一份副本,与第二份副本相同机架不同节点存储一份副本。

9.Dataframe和RDD的区别,要对比,他说DF比rdd效率高,为啥效率高?

RDD:弹性分布式数据集.是spark最底层的数据的抽象,内部的数据可以并行计算,是一种数据结构.
弹性:自动切换内存和磁盘;某一个RDD数据丢失,可以根据血缘从父RDD上重新计算;任务或者某一个阶段失败会自动进行重试;RDD中的数据是有分区的,分区的大小可以*设置和更细力度的调整.
分布式:就是可以存放在多个节点上.
数据集:就是一个存放数据的集合.

DataFrame比RDD多了一个schema元数据信息,可以说成是表名,表头,字段类型.
DF比RDD效率高的原因:
1.使用DF会使用Spark的解析器来对我们写的sql进行解析编译,并且进行优化,大部分情况下是要比开发人员写的要效率高.
2.DF使用列式存储大数据面试题 -- 02

10.Spark2.x版的新特性

一、API

1. 出现新的上下文接口:SparkSession,统一了SQLContext和HiveContext,并且为SparkSession开发了新的流式调用的configuration API

2. 统一了DataFrame和DataSet。DataFrame相当于DataSet[Row],以及DataSet的增强聚合API

3. 增强了累加器accumulator的功能,支持Web UI,便捷的API,性能更高

二、SQL

1. 支持SQL2003标准

2. 支持ansi-sql 和hive ql的sql parser(SQL解析器)

3. 支持DDL,支持子查询(in/not in 、 exists/ not exists)

三、性能

1. 通过whole-stage-code generation(全流程代码生成)技术将SparkSQL和DataSet的性能提升了2~10倍。(在下一篇博文中会浅谈全流程代码生成技术)

2. 通过vectorization(向量化)技术提升parquet文件的扫描吞吐量

3. 提升orc文件的读写性能

4. 提升catalyst查询优化器的性能

5. 通过native实现方式提升窗口函数的性能

四、 Spark Streaming

1. Structured Streaming在Spark2.0中是测试版,2.0之后是released(发布)版,它基于SparkSQL和Catalyst引擎构建,支持DataFrame风格的API进行流式计算。

2. 基于DStream的API支持kafka0.10版本

五、Spark MLlib

1.  基于DataFrame的API支持持久化保存、加载模型、Pipeline,支持更多的算法,支持向量和矩阵使用性能更高的序列化机制。

2.  Spark R支持MLlib算法,包括线性回归、朴素贝叶斯等

3. 未来Spark MLlib将主要基于DataSet API来实现,基于RDD和API将转为维护阶段

六、Other

1. 支持csv文件

2. 支持hive风格的bucket表

3. 支持缓存和程序运行的堆外内存管理

4. 完全移除了对akka的依赖

5. 使用Scala2.11代替了Scala2.10,要求基于Scala2.11版本进行开发,而不是Scala2.10

6. Mesos粗粒度模式下,支持启动多个Executor

11.kafka中的controller是干什么的?

Kafka集群中多个broker,有一个会被选举为controller leader,负责管理整个集群中分区和副本的状态,比如partition的leader 副本故障,由controller 负责为该partition重新选举新的leader 副本;当检测到ISR列表发生变化,有controller通知集群中所有broker更新其MetadataCache信息;或者增加某个topic分区的时候也会由controller管理分区的重新分配工作

当broker启动的时候,都会创建KafkaController对象,但是集群中只能有一个leader对外提供服务,这些每个节点上的KafkaController会在指定的zookeeper路径下创建临时节点,只有第一个成功创建的节点的KafkaController才可以成为leader,其余的都是follower。当leader故障后,所有的follower会收到通知,再次竞争在该路径下创建节点从而选举新的leader

KafkaController vs ReplicaManager

KafkaController: 负责管理整个集群中分区和副本的状态

ReplicaManager:负责管理当前broker所有分区和副本的信息,会处理KafkaController发起的一些请求,副本状态的切换,添加/读取消息等