大数据面试高频题目 - 深入解析 Hadoop:探索强大的HDFS存储系统

在大数据面试中,深刻理解 Hadoop 是取得成功的关键之一。以下是一些关于 Hadoop 的HDFS存储系统的高频面试题目以及解答思路和经验分享:

一、 HDFS读流程

  1. 发起下载请求: 客户端创建分布式文件系统,向 NameNode 请求下载 user/warehouse/ss.avi 文件;
  2. 获取文件元数据:NameNode 返回目标文件的元数据,包括文件块的位置;
  3. 请求读取第一个块:客户端向 data1 请求读取第一个块;
  4. 数据传输:data1 通过 FSDataInputStream 将数据返回给客户端;
  5. 继续请求读取:重复步骤 3-4 直到所有文件块都读取完毕,然后关闭 FSDataInputStream。

二、 HDFS写流程

  1. 发起上传请求:客户端创建分布式文件系统,向 NameNode 请求上传 user/warehouse/ss.avi 文件;
  2. 权限与路径检查:NameNode 检查路径是否存在,客户端是否有上传权限,然后向客户端响应可上传文件;
  3. 请求上传第一个块:客户端请求上传第一个块,让 NameNode 返回 DataNode;
  4. 分配存储位置:NameNode 返回 dn1、dn2、dn3,表示用这三个节点存储数据;
  5. 建立传输通道:客户端请求建立块传输通道,三个 DataNode 相互协作;
  6. 数据传输与同步:客户端通过 FSDataOutputStream 向 dn1 传输数据,dn1 将数据保存并传输给 dn2,dn2 再同步给 dn3;
  7. 完成传输:数据传输完成后客户端关闭 FSDataOutputStream 并向 NameNode 响应数据传输成功。

三、HDFS写入流程中DataNode挂掉的处理

在某个 DataNode 挂掉时:

  • 客户端无法接收该 DataNode 的 ACK 确认;
  • 客户端通知 NameNode;
  • NameNode 检查并确定该块的副本与规定不符后通知其他空闲的 DataNode 复制副本;
  • 挂掉的节点恢复后,先删除不完整的数据。

    四、HDFS的NameNode内存

    • Hadoop 2.x 系列,配置 NameNode 默认为 2000MB;
    • Hadoop 3.x 系列,NameNode 的内存是动态分配的,默认最小内存为 1GB,每增加 100 万个文件块,增加 1GB 内存。

      五、小文件问题及解决方案

      危害

      1. 存储层面:一个文件块占用 NameNode 大约 150 字节内存,128GB 内存可存储 9.1 亿文件块;
      2. 计算层面:每个小文件启动一个 MapTask,默认内存 1GB,浪费资源。

      解决方案

      1. 采用HAR归档;
      2. 采用CombineTextInputFormat;
      3. 开启JVM重用;
      4. 自行编写MapReduce程序合并小文件。

      六、纠删码原理

      • HDFS 默认情况下有三个副本,引入纠删码,通过计算方式可节省约一半的存储空间。
      • 例如,使用 rs-3-2-1024k 编码,每三个数据单元生成两个检验单元,共 5 个单元,只要有任意的三个单元存在就可以得到原始数据。

        七、异构存储

        1. 存储类型:
        • RAM_DISK(内存镜像文件系统)
        • SSD(固态硬盘)
        • DISK(普通磁盘)
        • ARCHIVE(归档)
          • 存储策略:
            • lazy_persist:一个副本在 RAM_DISK,其余在 DISK;
            • all_ssd:所有副本在 SSD;
            • one_ssd:一个副本在 SSD,其余在 DISK;
            • hot(默认):所有副本在 DISK。

              八、 HDFS的优缺点

              优点

              1. 高容错性:数据自动保存多个副本,通过增加副本提高容错性;
              2. 适合处理大数据(数据规模、文件规模);
              3. 可构建在廉价机器上,通过多副本机制提高可靠性。

              缺点

              1. 不适合低延时数据访问,比如毫秒级的存储数据是做不到的;
              2. 无法高效的对大量小文件进行存储,可能占用 NameNode 大量内存;
              3. 不支持并发写入、文件随机修改。

              九、HDFS文件块大小

              1. 寻址与传输时间:寻址时间与传输时间的最佳状态为 1%;
              2. 磁盘传输速率:目前磁盘传输速率为 100MB/s;
              3. 文件块大小设置:取决于磁盘传输速率。

              以上是关于 Hadoop 的HDFS系统的高频面试题目,希望这些问题和解答思路能够在面试中帮助你更自信地回答。如有特定问题或需要深入了解,请在评论区留言,我将尽力提供帮助。