一线大厂大数据面试真题解析(30道)
1. 怎么查看Hive有什么自带函数?怎么查看函数的详细信息? (腾讯) (1)  问题分析
考官主要考核你对Hive命令的掌握程度,因此需要说出查看Hive自带函数的命令和查看函数详细信息的命令。
(2)  核心问题回答
-- 查看系统自带函数
show functions;
-- 显示自带函数的用法
desc function upper;
desc function extended upper;
2. 写出你常用的HDFS命令? (京东)
(1)  问题分析
考官主要考核你对HDFS命令的梳理程度,因此需要讲出常用的HDFS命令,至少10个。
(2)  核心问题回答
-mkdir:在HDFS上创建目录;
-moveFromLocal:从本地剪切粘贴到HDFS
-appendToFile:追加一个文件到已经存在的文件末尾
-cat:显示文件内容
-copyFromLocal:从本地文件系统中拷贝文件到HDFS路径
-copyToLocal:从HDFS拷贝到本地
-cp:从HDFS的一个路径拷贝到HDFS的另一个路径
-
mv:在HDFS目录中移动文件
-tail:显示一个文件的末尾
-rm:删除文件或文件夹
-rmdir:删除空目录
-du:统计文件夹的大小信息
-setrep:设置HDFS中文件的副本数量
-lsr:递归查看根目录下所有文件和文件夹
-df:统计文件系统的可用空间信息
-touchz:在Hadoop指定目录下新建一个空文件
3. Redis分布式锁怎么实现? (京东金融)
(1)  问题分析
考官主要考核你对Redis分布式锁的理解,因此需要讲出Redis分布式锁的概念以及具体实现即可。
(2)  核心问题回答
分布式锁是控制分布式系统之间同步访问共享资源的一种方式,其具体实现是使用set命令获取分布式锁,使用Redis+lua脚本释放锁。
4. HDFS文件系统中,Fsimage和Edit的区别? (水滴互助)
(1)  问题分析
考官主要考核你对Fsimage和Edit的理解,因此需要讲出Fsimage和Edit的概念和区别即可。
(2)  核心问题回答
Fsimage镜像文件:是元数据的一个持久化的检查点,包含Hadoop文件系统中的所有目录和文件元数据信息,但不包含文件块位置的信息。文件块位置信息只存储在内存中,是在DataNode加入集的时候,NameNode询问DataNode得到的,并且间断的更新。
•Edits编辑日志:存放的是Hadoop文件系统的所有更改操作(文件创建,删除或修改),文件系统客户端执行的更改操作首先会被记录到Edits文件中。
•相同点:
•  Fsimage和Edits文件都是经过序列化的,在NameNode启动时,它会将Fsimage文件中的内容加载到内存中,之后再执行Edits文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作,也是完整的元数据。
•不同点:
•当客户端对HDFS中的文件进行新增或者修改操作,操作记录首先被记入Edits日志文件中,当客户端操作成功后,相应的元数据会更新到内存元数据中.因为Fsimage文件一般都很大(GB级别的很常见),如果所有的更新操作都往Fsimage文件中添加,这样会导致系统运行的十分缓慢。
•  HDFS这种设计实现:一是内存中数据更新、查询快,极大缩短了操作响应时间;二是内存中元数据丢失风险颇高(断电等),因此辅佐元数据镜像文件(Fsimage)+编辑日志文件(Edits)的备份机制进行确保元数据的安全。
5. Flume的做了什么? (泰康保险)
(1)  问题分析
考官主要考核你对Flume的理解,因此需要讲出Flume的作用即可。
(2)  核心问题回答
的位置是在Source和Channel之间,当我们为Source指定后,在中会得到Event,从而根据需求对Event进行保留或舍弃操作,舍弃的数据不会进入Channel中。
6. HDFS如何保证数据安全性? (中关村在线)
(1)  问题分析
HDFS作为Hadoop中很重要的组件,需要理解它的原理,这部分面试官想考察的是你对基础的理解。
(2)  核心问题回答
a) HDFS是典型的Master/Slave架构,它往往是一个NameNode加多个DataNode组成,NameNode是集
的;且HDFS中是分块存储的,为了容错文件的每个Block都会有副本。
b) HBase只支持一次写入多次读出的场景且不支持文件的随机修改。
c) 第一个副本一般放置在与Client(客户端)所在的同一节点上(若客户端无DataNode,则随机放),
二个副本放置到与第一个副本同一机架的不同节点,第三个副本放到不同机架的DataNode节点,当取用时遵循就近原则;
d) DataNode已Block为单位,每3s报告心跳状态,做10min内不报告心跳状态则NameNode认为Block已
死掉,NameNode会把其上面的数据备份到其他一个DataNode节点上,保证数据的副本数量;
e) Datanode会默认每小时把自己节点上的所有块状态信息报告给NameNode;
f) 采用Safemode模式:DataNode会周期性的报告Block信息且HDFS元数据采用SecondaryName备份或
者HA备份;
(3) 问题扩展
Hadoop三大组件MapReduce,HDFS,Yarn都要做到了解原理。HDFS读写流程,MapReduce的原理图也要做到理解。
(4)  结合项目使用
清楚哪些组件和HDFS结合时候用的,像Hive,HBase都有结合HDFS使用。
7. Hive跟HBase的区别是什么?(e代驾)
(1)  问题分析
考察对Hive,HBase大数据相关组件的了解程度,考察基础,可以从Hive,HBase概念延伸到区别然后结合实际做一个回答。
(2) 核心问题回答
Hive:是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类似于SQL查询用于解决海量结构化日志的数据统计(海量的结构化数据的运算分析),本质为将HiveSQL转化成
MapReduce程序或者Spark程序(分布式运算框架)
Hive的元数据默认存储在自带的derby数据库中,推荐使用MySQL,而原始数据一般储存在HDFS中.
• HBase:HBase是一个高可靠性、高性能(快)、面向列、可伸缩的分布式数据库系统,HBase支持单行事务,数据存储在HDFS中。适用于单表数据超千万,并发量高,数据分析需求弱,无需过于灵活和实时,与Hadoop 一样,HBase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。
•二者区别:
•  Hive和HBase是两种基于Hadoop的不同技术:Hive是一种类SQL的引擎,并且运行MapReduce任务,HBase是一种在Hadoop之上的NoSQL的Key/Value数据库,只支持简单的行列操作。当然,这两种工具是可以同时使用的。Hive可以用来进行统计查询,HBase可以用来进行快速的实时查询,数据也可以从Hive写到HBase,设置再从HBase写回Hive。
(3)  问题扩展
类似的数据库有很多,要清楚他们之间的区别,比如MySQL和HBase,Redis和HBase等等,要清楚他们的核心功能以及特性异同。
(4)  综合项目使用
知道在哪种场景下,使用哪种技术。当所存储数据需要快速插入查询时,使用HBase。
当数据需要大量聚合运算,计算分析结果时,使用hive存储,所以Hive是数仓,etl的常用工具。
8. 请说明Hive中SORT BY,ORDER BY,CLUSTER BY,DISTRIBUTE BY各代表什么意思?(01财经)
(1)  问题分析
主要考察HiveSQL基础。在回答这几种是什么的情况下,再把各自的特点结合讲一下。
(2)  核心问题回答
1)SORT BY:会在每个reduce中排序,全局无序.但是分区内有序;
2)ORDER BY:对输入做全局排序,因此只有一个Reduce,当输入规模较大时,会消耗很大的时间
3)DISTRIBUTE BY:根据字段进行分区,类似MR中Partition,进行分区,结合sort by使用。
4)CLUSTER BY:当DISTRIBUTE BY和SORT BY字段相同时,可以使用CLUSTER BY方式。CLUSTER BY 除了具有DISTRIBUTE  BY的功能外还兼具SORT BY的功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC。
(3)  问题扩展
Hive中常用分析函数:
Row_Number():从1开始,按照顺序,生成分组内记录的序列,Row_Number()的值不会存在重复,当排序的值相同时,按照表中记录的顺序进行排列;通常用于获取分组内排序第一的记录;获取一个Session中的第一条refer等。
Rank():生成数据项在分组中的排名,排名相等会在名次中留下空位。
Dense_Rank():生成数据项在分组中的排名,排名相等会在名次中不会留下空位。
(4)  综合项目使用
HiveSQL在实际生产中,数仓这部分非常常用的一个工具,所以要重视起来,项目中常用的一些分析函数一定要记住3、5个。
1. Kafka零拷贝的原理?(京东)
(1)  问题分析
考官主要考核你对Kafka零拷贝的理解,因此需要讲出零拷贝的原理即可.
(2)  核心问题回答
零拷贝并不是不需要拷贝,而是减少不必要的拷贝次数,通常是说在IO读写过程中.
场景:读取文件,Socket发送
传统方式实现:先读取、再发送,实际经过1~4四次Copy.
a.第一次:将磁盘文件,读取到操作系统内核缓冲区;
hbase工作原理b.第二次:将内核缓冲区的数据,Copy到Application应用程序的Buffer;
c.第三步:将Application应用程序Buffer中的数据,Copy到Socket网络发送缓冲区(属于操作
系统内核的缓冲区);
d.第四次:将Socket Suffer的数据,Copy到网络协议栈,由网卡进行网络传输.
•零拷贝实现:
•零拷贝指的是Kafka将磁盘数据通过DMA(直接存储器访问)拷贝到内核态Buffer,直接通过DMA拷贝到NIC Buffer(Socket Buffer),无需CPU拷贝。
•具体实现:数据传输通过TransportLayer来完成,其子类PlaintextTransportLayer通过Java NIO的FileChannel的TransferTo和TransferFrom方法实现零拷贝。
2. HiveSQL语句中SELECT FROM WHERE GROUP BY LIMIT ORDER BY的执行顺序(京东)
(1)  问题分析
掌握sql的执行原理并进行优化是一项非常重要的技能,结合Hive SQL如何写能更加优化来进行回答。(2)  核心问题讲解
SELECT (查询)                    --最后一步执行
FROM(进行表的查和加载)    --第一步执行
WHERE(过滤)                      --第二步执行
GROUP BY(执行分组后的相关计算)    --第三步执行
ORDER BY(对于结果集进行排序)    --第四步执行
LIMIT(排序)                      --第五步执行
•这里再结合Hive中写sql时的一些提高效率节省资源的部分:
•  a) 比如使用一个表的字段来约束另一个表时,用IN来代替JOIN,IN比JOIN快.
•  b) 使用GROUP BY去重COUNT(1)统计来代替 COUNT DISTINCT去重统计.
•  c) 应尽量避免在 WHERE 子句中对字段进行 NULL 值判断;避免WHERE子句中使用!= <>操作符;
•  d) 避免WHERE子句中使用OR连接条件,会导致引擎放弃索引而进行全表扫描.
•  e) 用EXISTS代替 IN.
•  f) 尽量不要使用UNION去掉重复的记录,而是使用UNION ALL再用GROUP BY去重.
(3)  问题扩展
知道了Hive的执行顺序后,我们来看几条可以提升Hive速度的方式。
•原则一:尽量加上分区;
•原则二:连接表时使用相同的关键词,这样只会产生一个Job;
•原则三:减少每个阶段的数据量,有时候为了减少代码量,包含了多余的字段,导致速度会变慢一些,所以我们只选出需要的,在JOIN表前就进行过滤;
•原则四:Map端聚合。hive.map.aggr=true; // 用于设定是否在 Map 端进行聚合,默认值为真;
•  upby.mapaggr.checkinterval=100000; // 用于设定 Map 端进行聚合操作的条目数;
(4)  综合项目使用

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。