大数据面试真题

记一次大数据面试真题

1.mapduce的执行流程?

1)mapreduce 客户端向RM提交任务
2)RM计算任务开启节点,开启AppMaster
3)AppMaster向RM注册,申请资源
4)一旦 ApplicationMaster 申请到资源后,便与对应的 NodeManager 通信,要求 它启动任务。
5)Appmaster 分发具体task给每个node

2.shuffle阶段

在这里插入图片描述

3.Hive数据倾斜?要注意那些问题?
任务进度长时间维持在 99%或者 100%的附近,查看任务监控页面,发现只有少量 reduce 子任务未完成,因为其处理的数据量和其他的 reduce 差异过大。 单一 reduce 处理的记录数和平均记录数相差太大,通常达到好几倍之多,最长时间远大 于平均时长。

A、group by 不和聚集函数搭配使用的时候
  B、count(distinct),在数据量大的情况下,容易数据倾斜,因为 count(distinct)是按 group by 字段分组,按 distinct 字段排序
  C、 小表关联超大表 join
在这里插入图片描述

产生原因?
 A:key 分布不均匀
  B:业务数据本身的特性
  C:建表考虑不周全
D:某些 HQL 语句本身就存在数据倾斜

6、业务场景
(1)空值产生的数据倾斜
场景说明
在日志中,常会有信息丢失的问题,比如日志中的 user_id,如果取其中的 user_id 和用户表中的 user_id 相关联,就会碰到数据倾斜的问题。
2)给null值加一个随机数,散列null
解决方法1:子查询中过滤掉null值,id为空的不参与关联
解决方法2:用case when给空值分配随机的key值(字符串+rand())

(2)不同数据类型关联产生数据倾斜
场景说明
用户表中 user_id 字段为 int,log 表中 user_id 为既有 string 也有 int 的类型, 当按照两个表的 user_id 进行 join 操作的时候,默认的 hash 操作会按照 int 类型的 id 进 行分配,这样就会导致所有的 string 类型的 id 就被分到同一个 reducer 当中
解决方案
把数字类型 id 转换成 string 类型的 id
select * from user a left outer join log b on b.user_id = cast(a.user_id as string)
(3)大小表关联查询产生数据倾斜
注意:使用map join解决小表关联大表造成的数据倾斜问题。这个方法使用的频率很高。

4.Spark对比hive的优势?

感觉他应该想问对比mapreduce 的优势;
Spark基于内存
1)spark可以把多次使用的数据放到内存中
2)spark 会的算法多,方便处理数据
3)spark大部分算子都没有shuffle阶段,不会频繁落地磁盘,降低磁盘IO;同时这些算子可以不需要排序,省略排序的步骤。
4)在代码编写方面,不需要写那么复杂的MapReduce逻辑。

5.jvm内存

在这里插入图片描述

6.Rpc的框架

· Netty - Netty框架不局限于RPC,更多的是作为一种网络协议的实现框架,比如HTTP,由于RPC需要高效的网络通信,就可能选择以Netty作为基础。
· brpc是一个基于protobuf接口的RPC框架,在百度内部称为“baidu-rpc”,它囊括了百度内部所有RPC协议,并支持多种第三方协议,从目前的性能测试数据来看,brpc的性能领跑于其他同类RPC产品。
· Dubbo是Alibaba开发的一个RPC框架,远程接口基于Java Interface, 依托于Spring框架。
· gRPC的Java实现的底层网络库是基于Netty开发而来,其Go实现是基于net库。
· Thrift是Apache的一个项目(http://thrift.apache.org),前身是Facebook开发的一个RPC框架,采用thrift作为IDL (Interface description language)。
· jsonrpc

7.Hbase rowkey 的构建

1)rowkey长度原则
2)rowkey散列原则
3)rowkey唯一原则
(1)生成随机数、hash、散列值
(2)字符串反转

8.Flink和spark的区别?

在这里插入图片描述

9.Hdfs写入流程?

在这里插入图片描述