1、 集群有 8 个节点,每个节点有 8 块硬盘(默认 3 副本)。如果某个节点有 3 块盘损坏,是否可能存在数
据块丢失情况;如果有 3 个节点发生故障,是否可能存在数据块丢失情况;并简述原因。
第一个不会,因为副本放在三个不同的节点上
第二个有可能,如果三个副本正好是在这三个节点上,则会丢失。
–第 1 个副本放在客户端所在节点
• 如果是远程客户端,block 会随机选择节点
• 系统会首先选择空闲的 DataNode 节点
– 第 2 个副本放在不同的机架节点上
– 第 3 个副本放在与第 2 个副本同一机架的不同机器上
2、 请描述一个 100GB 文件写入 HDFS 的整个过程:
– 客户端发送创建文件指令给分布式文件系统
– 文件系统告知 namenode
• 检查权限,查看文件是否存在
• EditLog 增加记录
• 返回输出流对象
– 客户端往输出流中写入数据,分成一个个数据包
– 根据 namenode 分配,输出流往 datanode 写数据
• 多个 datanode 构成一个管道 pipeline,输出流写第一个,后面的转发
– 每个 datanode 写完一个块后,返回确认信息
– 写完数据,关闭输出流
– 发送完成信号给 namenode
3、 假设集群的每个节点初始有 6 块硬盘,运行一段时间后,每个节点又加了 4 块新硬盘,为了使数据在
所有硬盘上分布均匀,能否通过 hdfs balancer 达到效果,为什么?并列出能达到效果的两种措施。
不能,旧版本的 hdfs 仅支持节点间的数据平衡,新版本可通过 balancer 实现
1. 手动重写所有数据
2. 将数据全部移到几个节点上,再在节点间数据平衡
4、 请描述 HDFS 的高可用性实现机制:
1. 支持 NameNode HA。集群可以运行两个冗余的 NameNode,一个作为 active 节点提供服务,一个
standby 节点作为热备份,集群只能有一个 activeNameNode 为了保证 standby 节点与 active 节
点之间数据的同步,两个节点会与另一组服务集群“journalNodes” (JNs)进行通信
• 当 active 节点对命名空间做任何改动时,操作日志会被记录到超过半数的 JournalNode 上
• standby 节点会去 JournalNode 上读取这些日志
2. 利用 2N+1 台 JournalNode 存储 EditLog
3. 最多容忍 N 台服务器挂掉
4. 基于 Paxos 的一致性算法算法