自学内容网 自学内容网

大数据常见面试题及答案(Linux、Zookeeper、Hadoop、Hive)

技术问答题目

一、Linux

1.如何给⽂件(⽂件夹)分配读rwx的操作权限?

2. vi 编辑器的常⽤命令有哪些?

3.Linux 中⽂件的操作权限分为⼏种? 

4.Linux 中实时查看日志的方法

5. Linux查看内存、磁盘存储、io 读写、端口占用、进程等命令

6. 说⼀说你能想到的 linux 基础指令并解释其作⽤?

二、Zookeeper

7.简述Zookeeper的架构角色  请简述ZooKeeper的选举机制

8. ZooKeeper对节点的watch监听是永久的吗?为什么?

9. 请说明ZooKeeper使用到的各个端口的作用? 

三、Hadoop

10. 分布式分析系统(HDFS)的特点

11.HDFS三个核心组件时什么,分别有什么作用 

12. NN如何管理元数据?SNN的功能职责

13.HDFS的存储机制(读写流程)

        13.1读流程 

        13.2写流程

14.小文件存储场景如何优化? 

15.Namenode的工作机制

16.Datenode工作机制    

17.MapReduce执行流程

        17.1 MapTask工作机制

        17.2 ReduceTask工作机制

18. 如何决定一个jobmapreduce的数量?

19. MapReduce Shuffle机制 20.Yarn组件有哪些?

21.Yarn 调度流程

22. yarn调度策略 scheduler

四、Hive

23.请谈一下Hive的特点, HiveRDBMS有什么异同? 

24.数仓的特性特点

25.数仓的分层思想

26.阐述Hive中架构、名词

27. hive SerDe机制(序列化机制) 

28.内部表、外部表的区别

29.分区表和分桶表的区别

        Hive为什么要分桶?

30.Hive 中的存储格式

31.Hive的函数: UDFUDAFUDTF的区别?

32.Hive基本函数

33.hive函数高阶应用 

34.Hive数据倾斜

        34.1 数据倾斜原因

        34.2 数据倾斜解决方案

35.HiveHSQL转换为MapReduce的过程?

36.row_number() rank()dense_rank()的区别

37.请说明HiveSort ByOrder ByCluster By Distrbute By各代表什么意思?

38.简述拉链表 39.下钻与上卷

40.渐变维(SCD

一、 Linux

1.如何给⽂件(⽂件夹)分配读rwx的操作权限?

给⽂件(⽂件夹)分配权限,⼀共分为 3 种⽅式,具体如下:

数字表示法

 ⽐如:chmod 777 1.txt

字⺟加减法

 ⽐如:chmod u+x,g-w 1.txt

等号赋值法

 ⽐如:chmod u=rwx,g=rw-,o=--- 1.txt

2. vi 编辑器的常⽤命令有哪些?

G:跳到⽂件的最后⼀⾏

gg:跳到⽂件的第⼀⾏

yy:复制光标所在⾏的内容

nyy:复制光标所在⾏往后的n⾏内容

p:在光标所在⾏的下⼀⾏粘贴内容

dd:删除光标所在⾏的内容

ndd:删除光标所在⾏往后的n⾏内容

u :撤销上⼀步的操作

x :删除当前光标所在的字符

r + 字符:替换当前光标所在字符

3.Linux 中⽂件的操作权限分为⼏种?

针对于Linux中的每个⽂件(⽂件夹),分为3组共9个操作权限,具体如下:

⽂件(⽂件夹)的所属⽤户对该⽂件(⽂件夹)的读r、写w、执⾏ x权限;

⽂件(⽂件夹)的所属组的⽤户对该⽂件(⽂件)的读r、写w、执⾏ x权限;

⽂件(⽂件夹)的其他⽤户对该⽂件(⽂件夹)的读r、写w、执⾏ x权限;

4.Linux 中实时查看日志的方法

静态日志

        可以使用 cat,more等命令

实时日志        

        tail -f  *.log

        tail -fn 100  *.log

5. Linux查看内存、磁盘存储、 io 读写、端口占用、进程 等命令

1、查看内存: top

2、查看磁盘存储情况: df -h

3、查看磁盘IO读写情况: iotop (需要安装一下:yum install iotop)、 iotop -o (直接查看输出比较 高的磁盘读写程序)

4、查看端口占用情况: netstat -tunlp  | grep 端口号

5、查看进程: ps aux

6. 说⼀说你能想到的 linux 基础指令并解释其作⽤?

pwd:查看当前所处的位置(当前路径)

mkdir ⽬录路径:创建⽬录(⽂件夹),如果需要把创建⽬录的⽗⽬录⼀并创建,需要加 -p 参数。 

cd ⽬录路径:切换到指定的⽬录中。注意: cd 是不能进⼊⽂件的!!!

ls 指定路径:显示指定路径下的内容,默认为当前路径。 

touch ⽂件路径:在指定位置创建⼀个⽂件。

cat ⽂件路径:查看指定⽂件的内容,在终端进⾏显示。适合⼩⽂件查看。

rm ⽂件路径:删除指定的⽂件。如果要删除的是⽬录,需要添加 -r参数,另外,如果想强制删 除,不进⾏确认,还需要添加 -f 参数。

cp 源⽂件 ⽬标位置:将源⽂件拷⻉⾄⽬标位置,如果拷⻉的是⽬录,需要添加 -r参数。

mv 源⽂件 ⽬标位置:将源⽂件拷⻉⾄⽬标位置,如果源⽂件和⽬标位置是同⼀⽬录,则是重命 名操作。

head -n ⽂件:查看指定⽂件的前 n ⾏内容,默认为前 10 ⾏。 

tail -n ⽂件:查看指定⽂件的后 n ⾏内容,默认为后 10 ⾏。

nd 指定⽬录 查找条件:在指定⽬录下,按指定条件查找⽂件。

command | grep 指定内容:从左边命令的输出结果中检索指定的内容,输出检索到的⾏。

tar -cvf 打包名.tar ⽂件或⽬录:对指定⽂件或⽬录进⾏打包操作。 

tar -xvf 打包名.tar:将指定tar⽂件进⾏解包操作。

tar -zcvf 打包名.tar ⽂件或⽬录:对指定⽂件或⽬录进⾏打包压缩操作。 

tar -zxvf 打包名.tar:将指定tar⽂件进⾏解包解压缩操作。

ln -s ⽬标⽂件的绝对路径 软链接名:创建软链接(类似于快捷⽅式)。

ln ⽬标⽂件的绝对路径 硬链接名:创建硬链接(同⼀个磁盘⽂件区域对应多个⽂件名称)。

二、Zookeeper

7.简述Zookeeper的架构角色

请简述ZooKeeper的选举机制

假设有五台服务器组成的zookeeper集群,它们的id1-5,同时它们都是最新启动的,也就是没有历史数据,

在存放数据量这一点上,都是一样的。假设这些服务器依序启动,来看看会发生什么。

1)服务器1启动,此时只有它一台服务器启动了,它发出去的报没有任何响应,所以它的选举状态一直是LOOKING状态。

2)服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有 历史数据,所以id值较大的服务器2胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中 的半数以上是3),所以服务器12还是继续保持LOOKING状态。

3)服务器3启动,根据前面的理论分析,服务器3成为服务器123中的Leader,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的Leader。

4)服务器4启动,根据前面的分析,理论上服务器4应该是服务器1234中最大的,但是由于前 面已经有半数以上的服务器选举了服务器3,所以它成为Follower

5)服务器5启动,同4一样成为Follower

注意,如果按照5,4,3,2,1的顺序启动,那么5成为Leader,因为在满足半数条件后, ZooKeeper群启动, 5Id最大,被选举为Leader

8. ZooKeeper对节点的watch监听是永久的吗?为什么?

不是。

官方声明:一个Watch事件是一个一次性的触发器,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了Watch的客户端,以便通知它们。

为什么不是永久的,举个例子,如果服务端变动频繁,而监听的客户端很多情况下,每次变动都要通知到所有的客户端,这太消耗性能了。

一般是客户端执行getData(“/节点A”,true),如果节点A发生了变更或删除,客户端会得到它的watch件,但是在之后节点A又发生了变更,而客户端又没有设置watch事件,就不再给客户端发送。

在实际应用中,很多情况下,我们的客户端不需要知道服务端的每一次变动,我只要最新的数据即可。

9. 请说明ZooKeeper使用到的各个端口的作用?

2888 FollowerLeader交换信息的端口。

3888:万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这 个端口就是用来执行选举时服务器相互通信的端口。

三、 Hadoop

10. 分布式分析系统(HDFS)的特点

11.HDFS三个核心组件时什么,分别有什么作用

1-NameNode. 集群的核心, 是整个文件系统的管理节点. 维护着

a) 文件系统的文件目录结构和元数据信息

b) 文件与数据块列表的对应关系

2-DataNode. 存放具体数据块的节点, 主要负责数据的读写, 定期向NameNode发送心跳

3-SecondaryNameNode. 辅助节点, 同步NameNode中的元数据信息, 辅助NameNodefsimage

editsLog行合并.

12. NN如何管理元数据?SNN的功能职责

13.HDFS的存储机制(读写流程)

HDFS存储机制,包括HDFS的写入过程和读取过程两个部分.

13.1读流程

1)客户端向namenode请求上传文件, namenode检查目标文件是否已存在,父目录是否存在。

2 namenode返回是否可以上传。

3)客户端请求第一个 block上传到哪几个datanode服务器上。

4 namenode返回3datanode节点,分别为dn1dn2dn3

5)客户端请求dn1上传数据, dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。

6dn1dn2dn3逐级应答客户端

7)客户端开始往dn1上传第一个block (先从磁盘读取数据放到一个本地内存缓存),packet为单位,dn1收到一个packet就会传给dn2 dn2传给dn3dn1每传一个packet会放入一个应答队列等待应答

8)当一个block传输完成之后,客户端再次请求namenode上传第二个block的服务器。(重复执行3-7 步)

13.2写流程

1)客户端向namenode请求下载文件, namenode通过查询元数据,找到文件块所在的datanode址。

2)挑选一台datanode(就近原则,然后随机)服务器,请求读取数据。

3datanode开始传输数据给客户端(从磁盘里面读取数据放入流,以packet为单位来做校验)。

4)客户端以packet为单位接收,先在本地缓存,然后写入目标文件。

14.小文件存储场景如何优化?

15.Namenode的工作机制

第一阶段: NameNode启动

1)第一次启动NameNode格式化后,创建FsimageEdits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。

2)客户端对元数据进行增删改的请求。

3NameNode记录操作日志,更新滚动日志。

4NameNode在内存中对元数据进行增删改。 

第二阶段: Secondary NameNode工作

1Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。

2Secondary NameNode请求执行CheckPoint

3NameNode滚动正在写的Edits日志。

4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode

5Secondary NameNode加载编辑日志和镜像文件到内存,并合并。

6)生成新的镜像文件fsimage.chkpoint

7)拷贝fsimage.chkpointNameNode

8 NameNodefsimage.chkpoint重新命名成fsimage

16.Datenode工作机制

1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身, 一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。

2 DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。

3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。

4)集群运行中可以安全加入和退出一些机器。

17.MapReduce执行流程

17.1 MapTask工作机制

1 Read阶段: Map Task通过用户编写的RecordReader,从输入InputSplit中解析出一个个 key/value

2 Map阶段:该节点主要是将解析出的key/value交给用户编写map()函数处理,并产生一系列新的 key/value

3Collect收集阶段:在用户编写map()函数中,当数据处理完成后, 一般会调用 OutputCollector.collect()输出结果。在该函数内部,它会将生成的key/value分区(调用Partitioner),并写入一个环形内存缓冲区 中。

4Spill阶段:即溢写,当环形缓冲区满后, MapReduce会将数据写到本地磁盘上,生成一个临时 文件。需要注意的是,将数据写入本地磁盘之前,先要对数据进行一次本地排序,并在必要时对数据进行合并、压 缩等操作。

5Combine阶段:当所有数据处理完成后, MapTask对所有临时文件进行一次合并,以确保最终只 会生成一个数据文件。

当所有数据处理完后, MapTask会将所有临时文件合并成一个大文件,并保存到文件output/file.out 中,同时生成相应的索引文件output/file.out.index

在进行文件合并过程中, MapTask以分区为单位进行合并。对于某个分区,它将采用多轮递归合并的方 式。每轮合并io.sort.factor(默认100)个文件,并将产生的文件重新加入待合并列表中,对文件排序  后,重复以上过程,直到最终得到一个大文件。让每个MapTask最终只生成一个数据文件,可避免同时 打开大量文件和同时读取大量小文件产生的随机读取带来的开销。

17.2 ReduceTask工作机制

1Copy阶段: ReduceTask从各个MapTask上远程拷贝一片数据,并针对某一片数据,如果其大小 超过一定阈值,则写到磁盘上,否则直接放到内存中。

2 Merge阶段:在远程拷贝数据的同时, ReduceTask启动了两个后台线程对内存和磁盘上的文件进 行合并,以防止内存使用过多或磁盘上文件过多。

3Sort阶段:按照MapReduce语义,用户编写reduce()函数输入数据是按key进行聚集的一组数 据。为了将key相同的数据聚在一起, Hadoop采用了基于排序的策略。由于各个MapTask已经实现对自己的处理结果 进行了局部排序,因此, ReduceTask只需对所有数据进行一次归并排序即可

4 Reduce阶段: reduce()函数将计算结果写到HDFS上。

18. 如何决定一个jobmapreduce的数量?

1 map数量

splitSize=max{minSize,min{maxSize,blockSize}}

map数量由处理的数据分成的block数量决定default_num = total_size / split_size;

2 reduce数量

reduce的数量job.setNumReduceTasks(x);x reduce的数量。不设置的话默认为 1

19. MapReduce Shuffle机制

20.Yarn组件有哪些?

21.Yarn 调度流程

22. yarn调度策略 scheduler

Hadoop调度器主要分为三类:

FIFO Scheduler:先进先出调度器:优先提交的,优先执行,后面提交的等待【生产环境不会使用】

Capacity Scheduler:容量调度器:允许看创建多个任务对列,多个任务对列可以同时执行。但是一个 队列内部还是先进先出。【Hadoop2.7.2默认的调度器】

Fair Scheduler:公平调度器:第一个程序在启动时可以占用其他队列的资源(100%占用),当其他队 列有任务提交时,占用资源的队列需要将资源还给该任务。还资源的时候,效率比较慢。【CDH版本的yarn度器默认】

四、 Hive

23.请谈一下Hive的特点, HiveRDBMS有什么异同?

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL 句快速实现

简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析,但是Hive 不支持实时查询。

Hive与关系型数据库的区别:

24.数仓的特性特点

25.数仓的分层思想

26.阐述Hive中架构、名词

27. hive SerDe机制(序列化机制)

28.内部表、外部表的区别

29.分区表和分桶表的区别

Hive为什么要分桶?

1)获得更高的查询处理效率

在分区数量过于庞大以至于可能导致文件系统崩溃时,或数据集找不到合理的分区字段时,我们就需要使用分桶来解决问题了。 分区中的数据可以被进一步拆分成桶,不同于分区对列直接进行拆分,桶往往使用列的哈希值 对数据打散,并分发到各个不同的桶中从而完成数据的分桶过程。

注意,hive使用对分桶所用的值进行hash,并用hash结果除以桶的个数做取余运算的方式来分 桶,保证了每个桶中都有数据,但每个桶中的数据条数不一定相等。 如果另外一个表也按照同样的规则分成了一个个小文件。两个表join的时候,就不必要扫描整 个表,只需要匹配相同分桶的数据即可,从而提升效率。 在数据量足够大的情况下,分桶比分区有更高的查询效率。

2)数据采样

在真实的大数据分析过程中,由于数据量较大,开发和自测的过程比较慢,严重影响系统的开

发进度。此时就可以使用分桶来进行数据采样。采样使用的是一个具有代表性的查询结果而不是全 部结果,通过对采样数据的分析,来达到快速开发和自测的目的,节省大量的研发成本。

3)分桶和分区的区别

1. 分桶和分区两者不干扰,可以把分区表进一步分桶;

2. 分桶对数据的处理比分区更加细粒度化:分区针对的是数据的存储路径;分桶针对的是数据文件;

3. 分桶是按照列的哈希函数进行分割的,相对比较平均;而分区是按照列的值来进行分割的,容易造 成数据倾斜。

4) 文本数据处理

注意:对于分桶表,不能使用loaddata的方式进行数据插入操作,因为loaddata导入的数据不会有分 桶结构

30.Hive 中的存储格式

1. TextFile

默认格式,存储方式为行存储,数据不做压缩,磁盘开销大,数据解析开销大。可结合Gzip

Bzip2使用(系统自动检查,执行查询时自动解压),但使用这种方式,压缩后的文件不支持split Hive不会对数据进行切分,从而无法对数据进行并行操作。并且在反序列化过程中,必须逐个字符判断是不是分隔符和行结束符,因此反序列化开销会比SequenceFile高几十倍。

2. SequenceFile

SequenceFileHadoop API提供的一种二进制文件支持,,存储方式为行存储,其具有使用方

便、可分割、可压缩的特点。

SequenceFile支持三种压缩选择: NONE  RECORD  BLOCK Record压缩率低, 一般建议使用 BLOCK缩。

优势是文件和hadoop api中的MapFile是相互兼容的

3. RCFile

存储方式:数据按行分块,每块按列存储。结合了行存储和列存储的优点: 

首先, RCFile 保证同一行的数据位于同一节点,因此元组重构的开销很低;

其次,像列存储一样, RCFile 能够利用列维度的数据压缩,并且能跳过不必要的列读取; RCFile的一个行组包括三个部分:

第一部分是行组头部的【同步标识】,主要用于分隔 hdfs 块中的两个连续行组

第二部分是行组的【元数据头部】,用于存储行组单元的信息,包括行组中的记录数、每个列的字 节数、列中每个域的字节数

第三部分是【表格数据段】,即实际的列存储数据。在该部分中,同一列的所有域顺序存储。

4. ORCFile

存储方式:数据按行分块 每块按照列存储。 

压缩快 快速列存取。

效率比rcle,rcle的改良版本

总结:相比TEXTFILESEQUENCEFILE  RCFILE由于列式存储方式,数据加载时性能消耗较大,但是具有较好的压缩比和查询响应。数据仓库的特点是一次写入、多次读取,因此,整体来看, RCFILE相比其余两种 格式具有较明显的优势

31.Hive的函数: UDF UDAF UDTF的区别?

UDF User-Dened-Function: 单行进入,单行输出

UDAF User-Dened Aggregation Function: 多行进入,单行输出

UDTF User-Dened Table-Generating Functions: 单行输入,多行输出

32.Hive基本函数

33.hive函数高阶应用

34.Hive数据倾斜

34.1 数据倾斜原因

34.2 数据倾斜解决方案

参数调优:

35.HiveHSQL转换为MapReduce的过程?

HiveSQL ->AST(抽象语法树) -> QB(查询块) ->OperatorTree(操作树) ->优化后的操作树- >mapreduce务树->优化后的mapreduce任务树

过程描述如下:

SQL ParserAntlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象 语法树AST Tree

Semantic Analyzer:遍历AST Tree,抽象出查询的基本组成单元QueryBlock Logical plan:遍历QueryBlock,翻译为执行操作树OperatorTree

Logical plan optimizer: 逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator 减少shuffle数据量;

Physical plan:遍历OperatorTree,翻译为MapReduce任务;

Logical plan optimizer:物理层优化器进行MapReduce任务的变换,生成最终的执行计划;

36.row_number()  rank()dense_rank()的区别

row_number():根据查询结果的顺序计算排序,多用于分页查询 

rank():排序相同时序号重复,总序数不变

dense_rank():排序相同时序号重复时,总序数减少

37.请说明HiveSort By  Order By  Cluster By  Distrbute By各代表什么意思?

order by:会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)。只有一个reducer会导致当输入规模较大时,需要较长的计算时间。

sort by:不是全局排序,其在数据进入reducer前完成排序.

distribute by:按照指定的字段对数据进行划分输出到不同的reduce中。 

cluster by:除了具有 distribute by 的功能外还兼具 sort by 的功能。

38.简述拉链表

39.下钻与上卷

维度中有不同的层次,每个层次可以有多个级别,这样就可以根据多个维护层次和级别进行分析,可以 灵活获取高级别的汇总信息,获取低级别的明细信息,把获取高级别的汇总信息的过程叫上卷,把获取 低级别的明细信息的过程叫下钻,比如:课程访问量分析,时间维度有四个级别,分别是年、月、天、  小时,现在我们某个级别分析每天的课程访问量,比如按天分析课程访问量,此时我们可以按小时下钻 分析,得出一天内每小时的课程访问量,也可以按月上卷,得到月度的课程访问量。

下钻维度: 

        天、小时

上卷维度: 

        年、月

40.渐变维(SCD

什么是渐变维?

维度可以根据变化剧烈程度主要分为无变化维度、缓慢变化维度和剧烈变化维度。例如一个人的相关信 息,身份证号、姓名和性别等信息数据属于不变的部分,政治面貌和婚姻状态属于缓慢变化部分,而工 作经历、工作单位和培训经历等在某种程度上属于急剧变化字段。

大多数维度表随时间的迁移是缓慢变化的。比如增加了新的产品,或者产品的ID号码修改了,或者产品 增加了一个新的属性,此时,维度表就会被修改或者增加新的记录行。这样,在设计维度和使用维度的 过程中,就要考虑到缓慢变化维度的处理。

缓慢渐变维,即维度中的属性可能会随着时间发生改变,比如包含用户住址AddressDimCustomer 度,用户的住址可能会发生改变,进而影响业务统计精度,  DimCustomer维度就是缓慢渐变维(SCD)。

SCD有三种分类,我们这里以顾客表为例来进行说明:

假设在第一次从业务数据库中加载了一批数据到数据仓库中,当时业务数据库有这样的一条顾客的信 息。

顾客 BIWORK ,居住在北京,目前是一名 BI 的开发工程师。假设 BIWORK 因为北京空气质量 PM2.5 等原因从北京搬到了三亚。那么这条信息在业务数据库中应该被更新了。

那么当下次从业务数据库中抽取这类信息的时候,数据仓库又应该如何处理呢?

我们假设在数据仓库中实现了与业务数据库之间的同步,数据仓库中也直接将词条数据修改更新。后来 我们创建报表做一些简单的数据统计分析,这时在数据仓库中所有对顾客 BIWORK 的销售都指向了BIWORK 新的所在地 - 城市三亚,但是实际上 BIWORK 在之前所有的购买都发生在 BIWORK 居住在北 京的时候。

通过这个简单的例子,描述了因一些基本信息的更改可能会引起数据归纳和分析出现的问题。


原文地址:https://blog.csdn.net/m0_63845988/article/details/143704545

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!