• HDFS中DataNode的工作机制


    1 DataNode 工作机制

    请添加图片描述

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

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

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

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

    2 数据完整性检验

    ​ 若 DataNode 节点上的数据出现损坏,显然会造成一些不必要的损失。如何保证 DataNode 节点的数据完整性十分有必要,检验流程如下:

    1. 当 DataNode 读取 Block 的时候,它会计算 CheckSum 。
    2. 如果计算后的 CheckSum,与 Block 创建时值不一样,说明 Block 已经损坏。
    3. Client 读取其他 DataNode 上的 Block。
    4. 常见的校验算法 crc(32),md5(128),sha1(160)
    5. DataNode 在其文件创建后周期验证 CheckSum。

    请添加图片描述

    3 掉线时限参数设置

    1. DataNode 进程死亡或者网络故障造成无法与NameNode通信;
    2. NameNode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长;
    3. HDFS默认的超时时长为10 min + 30 s;
    4. 如果定义超时时间为TimeOut,则超时时长的计算公式为:
      TimeOut = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval

    默认的dfs.namenode.heartbeat.recheck-interval 大小为5分钟,dfs.heartbeat.interval默认为3秒。可在hdfs-site.xml配置文件中进行修改二者的值,值得注意的是,heartbeat.recheck.interval的单位为毫秒,dfs.heartbeat.interval的单位为秒。

    <property>
     <name>dfs.namenode.heartbeat.recheck-intervalname>
     <value>300000value>
    property>
    <property>
     <name>dfs.heartbeat.intervalname>
     <value>3value>
    property>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4 DataNode多目录配置

    DataNode 可以配置成多个目录,每个目录存储的数据不一样。即:数据不是副本

    具体配置方法:

    1. 在 hdfs-site.xml 文件中添加如下内容
    <property>
     <name>dfs.datanode.data.dirname>
    <value>file://${hadoop.tmp.dir}/dfs/data1,file://${hadoop.tmp.dir}
    /dfs/data2value>
    property>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 停止集群,删除三台节点的 data 和 logs 中所有数据。
    [pbh@hadoop102 hadoop-3.1.3]$ rm -rf data/ logs/
    [pbh@hadoop103 hadoop-3.1.3]$ rm -rf data/ logs/
    [pbh@hadoop104 hadoop-3.1.3]$ rm -rf data/ logs/
    
    • 1
    • 2
    • 3
    1. 格式化集群并启动。
    [pbh@hadoop102 hadoop-3.1.3]$ bin/hdfs namenode –format
    [pbh@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
    
    • 1
    • 2
    1. 查看结果
    [pbh@hadoop102 dfs]$ ll
    总用量 12
    drwx------. 3 pbh pbh 4096 44 14:22 data1
    drwx------. 3 pbh pbh 4096 44 14:22 data2
    drwxrwxr-x. 3 pbh pbh 4096 1211 08:03 name1
    drwxrwxr-x. 3 pbh pbh 4096 1211 08:03 name2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    SLA 、SLO & SLI
    浅谈ThreadLocal
    基本工具-NETCAT(telnet-banner、传输文本信息)
    Git分布式管理-头歌实验日志和版本回退
    MySQL-索引详解(三)
    JVM本地方法接口和执行引擎
    DECLARE_DYNAMIC提示缺少显示类型指定
    什么是集成测试?集成测试方法有哪些?
    一条推特触动开发者神经:我们不想做运维!
    人工智能基础_机器学习001_线性回归_多元线性回归_最优解_基本概念_有监督机器学习_jupyter notebook---人工智能工作笔记0040
  • 原文地址:https://blog.csdn.net/meng_xin_true/article/details/126039349