1.HDFS 集群数据量计算
一个 hadoop 集群,hdfs 副本数为 3 ,此时存入 1G 数据。然后修改 hdfs 配置文件,将副本 设置为 2 ,然后重启 hadoop 集群,此时再存入 1G 数据。请问此时 hdfs 集群上数据量一共 有多大?
参考答案:
第一次存 1G 数据:1G3=3G 第二次存入 1G 数据:1G2=2G(配置修改重启后,只对后续 接入的数据有效, 已经存入的数据如果想改副本需要通过命令行来修改) 总数据大小: 3G+2G=5G
2.NameNode 内存多大合适
HDFS 元数据都会存在于 NameNode 的内存中,因此 NameNode 的内存大小直接决定了集群 支持的最大容量,那么如何估算 NameNode 需要的内存大小? 比如一个含有 200 个节点的 集群,每个节点有 24TB 的磁盘,每个 Block 的大小为 128MB ,每个块有 3 个副本,那么请 问,在这种场景下需要 NameNode 的内存大小为多少?
前提条件:一般 1GB 内存可以管理 100 万个 block 文件
参考答案:
先计算块文件的个数;20025165824MB(24TB)/1283= 13107200 一般 1GB 内存可以管理 100 万万个 block 文件 参照该方法计算最终大概需要 13.1072GB 的内存。除此之外还要基于性 万个 block 文件,所以在选择 NameNode 内存时要选择一个大于该值的一个合理的整数值
3.NameNode HA 机制
简述 namenode 的 HA 机制。他是如何实现故障切换的?
参考答案:
(1)通过 QJM 解决 NameNode 元数据共享存储问题
NameNode 记录了 HDFS 的目录文件等元数据 ,客户端每次对文件的增删改等操作 , Namenode 都会记录一条日志,叫做 edit log,而元数据存储在 fsimage 中。为了保持 Stad n by 与 active 的状态一致,standby 需要尽量实时获取每条 edit log 日志,并应用到 FsImage 中。 这时需要一个共享存储存放 edit log ,standby 能实时获取日志。
有两个关键点需要保证:
1)共享存储是高可用的。
2)需要防止两个 NameNode 同时向共享存储写数据导致数据损坏。
共享存储常用的方式是 Qurom Journal Manager,QJM 可以认为是包含一些 Journal Node 的集 群,Journal Node 运行在不同的机器上,每个 Journal Node 是一个很轻量的守护进程,所以可 以部署在 hadoop 集群的节点上,QJM 中至少要有 3 个 Journal Node ,因为 edit log 必须要写 到 Journal Nodes 中大部分节点中 , 比如运行 3,5,7 个 Journal Node ,如果你运行了 N 个 Journal Node ,那么系统可以容忍最多(N- 1)/2 个节点失败。

共享存储实现逻辑:
1)初始化后,Active NN 把 edit log 写到大多数 JN 并返回成功(即大于等于 N+1)即认定写 成功。
2)Standby NN 定期从 JN 读取一批 edit log ,并应用到内存中的 FsImage 中。
3)NameNode 每次写 Edit log 都需要传递一个编号 Epoch 给 JN,JN 会对比 Epoch ,如果比自 己保存的 Epoch 大或相同,则可以写,JN 更新自己的 Epoch 到最新,否则拒绝操作。在切 换时,Standby 转换为 Active 时,会把 Epoch+1 ,这样就防止即使之前的 NameNode 向 JN 写 日志,即使写也会失败。
(2)利用 Zookeeper 实现 NameNode 故障转移

(3) HDFS2 NN 的主备切换流程

4.Hive 元数据存储位置
在 hive 数据库当中你们的元数据信息是存储在哪里的?
参考答案:
1)hive 默认内置元数据库为 derby 数据库
2)生产环境中我们使用 mysql 数据库
5.HDFS 体系结构
简述 HDFS 体系结构?
参考答案:
HDFS 具有主/从架构。一个 HDFS 集群包含一个 NameNode( 一个主服务器),用于管理文 件系统名称空间并管理客户端对文件的访问。此外,还有许多 DataNode ,通常是群集中的 每个节点一个 DataNode ,用于数据存储。HDFS 对外暴露文件系统名称空间并允许用户数据 存储在文件中 。在内部,文件被分成一个或多个块,这些块存储在一组 DataNode 中 。 NameNode 执行文件系统命名空间操作,如打开,关闭和重命名文件和目录。它还确定块到 DataNode 的映射。DataNode 负责提供来自文件系统客户端的读取和写入请求。DataNode 还在 NameNode 的指令下执行块创建,删除,复制。

6.HDFS 数据块大小
hdfs 数据块的默认大小是多少?过大过小有什么优缺点?
参考答案:
(1)数据块默认大小 Hadoop2.0 之前,默认数据块大小为 64MB Hadoop2.0 之后,默认数据 块大小为 128MB
(2)优缺点
1)数据块太小: a)会导致寻址时间相对比较长,如果读取数据块数据的时间小于寻址 时间,这样是很不划算的,所以数据块要尽可能大一点。 b)数据块的大量元数据会占用 namenode 内存,影响 namenode 管理的集群规模
2)数据块太大:为了保证数据的本地性,通常一个块的 数据是交给一个 map 任务来处理, 如果数据块太大,就导致 map 任务处理的数据量就会很多,时间就会很长,不能很好地实 现并行处理。
7.HDFS 副本策略
简述 hadoop 的副本策略?副本过多过少有什么优缺点?
参考答案:
(1)默认的副本策略:Block PlacementPolicyDefault
1)1st replica. 如果写请求方所在机器是其中一个 datanode,则直接存放在本地,否则随机在集 群中选择一个 datanode.
2)2nd replica. 第二个副本存放于不同第一个副本的所在的机架.
3)3rd replica.第三个副本存放于第二个副本所在的机架,但是属于不同的节点. 4)剩下其它的副本随机选择存储的位置
(2)副本过多导致存储空间的浪费,增加节点之间数据传输对时间和资源的消耗 副本过少容 易导致数据丢失,起不到数据安全可靠的作用
8.DataNode 宕机对副本策略影响
DataNode 副本存储策略?如果 Hadoop 在保存副本的时候,比如,第二个副本存完毕,向第 三个副本存入数据时 DataNode 挂了,会出现什么情况?
参考答案:
(1)默认的副本策略:
Block PlacementPolicyDefault
1)1st replica. 如果写请求方所在机器是其中一个 datanode,则直接存放在本地,否则随机在集 群中选择一个 datanode.
2)2nd replica. 第二个副本存放于不同第一个副本的所在的机架.
3)3rd replica.第三个副本存放于第二个副本所在的机架,但是属于不同的节点. 4)剩下其它的副本随机选择存储的位置
(2)数据复制过程中出现问题怎么解决?
1)这个问题其实也是写数据过程,当数据写入 DataNode 的过程中,当其中一个 DataNode 挂掉了,会将这个 DataNode 移除流水线,然后将数据写入到剩余的 datanode。
2)在写入结束后, namenode 会收集 datanode 的信息,发现此文件的数据块的 replication 没有达到配置的要求(default=3),然后再选择一个 datanode 保存副本。
9.HDFS 写数据流程
客户端向 HDFS 写入数据过程?
参考答案:
写数据流程:
1)首先客户端对文件进行切分,切分成数据块,每个数据块默认存储到 3 个节点上
2)在写入数据之前,客户端首先会告诉 NameNode 要写一个文件,此时 NameNode 会增加 一个文件,记录这个文件的详细信息,把这个文件放入目录树里面
3)然后开始写数据,因为客户端把文件划分成了很多块,在写第一个数据块时,NameNode先要返回 3 个 DataNode 位置,这样第一个数据块会以一个一个数据包的方式(packet)写 入第一个 DataNode ,同时数据包也同时会向第二,第三个节点写,形成数据写的流水线, 每个 DataNode 写完数据包之后,会返回确认。当第一个数据块写完之后,以同样的方式写 下一个数据块。
4)当所有数据块写完之后,它调用 close 关闭写入流,它会通知 NameNode 文件写完了, 这时就会关闭 socket ,结束数据的写过程。
10.HDFS 读数据流程
客户端从 HDFS 读数据过程?
读数据流程:
1)客户端首先发送一个 open 请求到 NameNode ,获取这个文件所包含数据块,以及每个数 据块的存储位置。
2)这些数据块信息返回给客户端之后,它依次按照这个数据块的顺序,读取每一个数据块。
3)第一个数据块在这个节点上面读,第二个数据块在这个节点读,读完之后,按照文件实际数据块的先后位置,显示给用户,整个文件读完之后,就会调用 close ,关闭输出流就 ok 了
11.DataNode 在什么情况下不会备份
datanode 什么情况下不会备份?
参考答案:
设置备份数为 1 时, 就不会备份了。
延申:Hadoop 中在哪里设置备份数, 是哪个字段?
在 hdfs-site.xml 中的 dfs.replication 变量.
12.HDFS 小文件问题
HDFS 中大量小文件带来的问题以及解决方法
参考答案:
问题:
hadoop 中目录,文件和块都会以对象的形式保存在 namenode 的内存中, 大概每个对象会占 用 150bytes. 小文件数量多会大量占用 namenode 的内存; 使 namenode 读取元数据速度变慢, 启动时间延长; 还因为占用内存过大, 导致 gc 时间增加等.
解决办法:
两个角度, 一是从根源解决小文件的产生, 二是解决不了就选择合并.从数据来源入手, 如每小时抽取一次改为每天抽取一次等方法来积累数据量。
如果小文件无可避免, 一般就采用合并的方式解决. 可以写一个 MR 任务读取某个目录下的 所有小文件, 并重写为一个大文件。
13.fs image 和 edit logs 的作用
fsimage 和 edit logs 是做什么用的?
参考答案:
命名空间镜像(FSl mage):HDFS 的目录树及文件/目录元信息是保存在内存中的,如果节点停 电或进程崩溃,数据将不再存在,必须将上述信息保存到磁盘,Fsl mage 就是保存某一个时刻元 数据的信息的磁盘文件。
镜像编辑日志(EditLog):对内存目录树的修改,也必须同步到磁盘元数据上,但每次修改都将 内存元数据导出到磁盘,显然是不现实的,为此,namenode 引入了镜像编辑日志,将每次 的改动都保存在日志中,如果 namenode 机器宕机或者 namenode 进程挂掉后可以使用 FSl mage 和 EditLog 联合恢复内存元数据。
14.数据块大小多大合适
Linux 中的块大小为 4KB, 为什么 HDFS 中块大小为 64MB 或 128MB?
参考答案:
(1)块是存储在文件系统中的数据的最小单元. 如果采用 4kb 的块大小来存放存储在 Hadoop 中的数据, 就会需要大量的块, 大大增加了寻找块的时间, 降低了读写效率.
(2)一个 map 或者一个 reduce 都是以一个块为单位处理, 如果块很小, mapreduce 任务数就会 很多, 任务之间的切换开销变大, 效率降低.
15.数据能否并发写入 HDFS 文件
并发写入 HDFS 文件可行吗?
参考答案:
不行。因为客户端通过 namenode 接收到在数据块上写入的许可后, 那个块会锁定直到写入 操作完成, 所以不能在同一个块上写入.
16.HDFS 集群角色
HDFS 分布式文件系统集群的角色主要有?
参考答案:
NameNode 、DataNode 、SecondaryNameNode
17.HDFS 格式化命令
首次启动 HDFS 时,必须对其进行格式化操作的命令?
参考答案:
bin/hdfs namenode -format 或者 bin/hadoop namenode –format
18.HDFS 启停命令
单独启停 HDFS 进程命令?
参考答案:
1)启停 NameNode
bin/hdfs --daemon start namenode
bin/hdfs --daemon stop namenode
2)启停 DataNode
bin/hdfs --daemon start datanode
bin/hdfs --daemon stop datanode
19.HDFS 垃圾桶配置
垃圾桶配置参数是什么?
参考答案:
fs.trash.interval
20.NameNode 的作用
NameNode 的主要功作用有哪些?
参考答案:
一是管理文件系统文件的元数据信息(包括文件名称、大小、位置、属性、创建时间、修改 时间等等)
二是维护文件到块的对应关系和块到节点的对应关系
三是维护用户对文件的操作信息(文件的增删改查)
21.DataNode 宕机如何恢复
一个 datanode 宕机,怎么恢复?
参考答案:
Datanode 宕机了后,如果是短暂的宕机,可以实现写好脚本监控,将它启动起来。如果是 长时间宕机了,那么 datanode 上的数据应该已经被备份到其他机器了,那这台 datanode 就 是一台新的 datanode 了,删除他的所有数据文件和状态文件,重新启动。
22.NameNode 宕机如何解决
Hadoop 的 namenode 宕机,怎么解决?
参考答案:
1)先分析宕机后的损失,宕机后直接导致 client 无法访问,内存中的元数据丢失,但是硬盘 中的元数据应该还存在,如果只是节点挂了,重启即可,
2)如果是机器挂了,重启机器后看节点是否能重启,不能重启就要找到原因修复了。
但是最终的解决方案应该是在设计集群的初期就考虑到这个问题,做 namenode 的 HA。 提高容错:
第一种方式是将持久化存储在本地硬盘的文件系统元数据备份。
第二种方式是运行一个辅助的 NameNode(Secondary Namenode )。
第三种 zookeeper 提供的高可用(ha )机制。
23.HDFS 文件丢失如何处理
hadoop 出现文件块丢失怎么处理?
参考答案:
首先需要定位到哪的数据块丢失,可以通过查看日志进行检查和排除,找到文件块丢失的位置后,如果文件不是很重要可以直接删除,然后重新复制到集群上一份即可,如果删除不了, 每一个集群都会有备份,需要恢复备份。
24.如何查看 DataNode 健康状态
用命令显示所有 datanode 的健康状态?
参考答案:
bin/hadoop dfsadmin -report
25.HDFS 安全模式操作
hdfs 如何离开安全模式?
参考答案:
hadoop dfsadmin -safemode leave
26.HDFS 小文件如何合并
当 hdfs 小文件数量过多时,如何合并小文件?
参考答案:
1)当每个小文件数据量比较小的时候,可以通过命令的方式进行小文件的合并如:
hdfs dfs -cat hdfs 😕/mycluster/logs/*. log | hdfs dfs -appendToFile -
hdfs 😕/mycluster/logs/largeFile.log,
2)当数据量比较大的时候建议使用 MR 进行小文件的合并.
27.HDFS 常见压缩算法
hdfs 常见的数据压缩算法?
参考答案:
- Gzip 压缩
- Bzip2 压缩
- Lzo 压缩
- Snappy 压缩
28.文件是先写入还是先复制
有 180M 的文件写入 HDFS 是先写 128M 复制完之后再写 52M 还是全部写完再复制?
参考答案:
HDFS 上在写入数据的时候,首先会对数据切块,然后从客户端到 datanode 形成一个管道, 在至少将一个文件写入 hdfs 上后,表示文件写入成功,然后进行复制备份操作,所以是全部写完再复制。
7882



被折叠的 条评论
为什么被折叠?



