【Hadoop3.3.6】数据块副本放置策略及解析EditLog和FsImage

这篇具有很好参考价值的文章主要介绍了【Hadoop3.3.6】数据块副本放置策略及解析EditLog和FsImage。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、摘要

通过解析存储于NameNode节点上的日志文件EditLog和镜像文件(元数据)Fsimage来反向验证HDFS的数据块副本存放策略,其目的是希望加深对Hadoop的数据块放置策略的理解以及掌握如何查看日志文件及镜像文件的方法和理解其内容。

二、正文

2.1 环境说明

软件 说明
VMWareWorkstation 版本16.2.+
MobXterm 远程连接工具
Hadoop 版本3.3.6

2.2 网络拓扑

【Hadoop3.3.6】数据块副本放置策略及解析EditLog和FsImage,Hadoop3.x,hadoop

2.3 Hadoop副本放置策略介绍

  1. 副本放置机制的意义

    复制副本的放置对HDFS的可靠性和性能至关重要。优化复制副本放置将HDFS与大多数其他分布式文件系统区别开来。这是一个需要大量调整和经验的功能。机架感知复制副本放置策略的目的是提高数据的可靠性、可用性和网络带宽利用率。复制副本放置策略的当前实现是朝着这个方向迈出的第一步。实施此策略的短期目标是在生产系统上对其进行验证,了解更多关于其行为的信息,并为测试和研究更复杂的策略奠定基础。
    大型HDFS实例在通常分布在许多机架上的计算机集群上运行。不同机架中的两个节点之间的通信必须通过交换机。在大多数情况下,同一机架中机器之间的网络带宽大于不同机架中机器间的网络带宽。
    NameNode通过Hadoop rack Awareness中概述的过程确定每个DataNode所属的机架id。一个简单但非最优的策略是将复制副本放置在唯一的机架上。这样可以防止整个机架出现故障时丢失数据,并允许在读取数据时使用多个机架的带宽。此策略在群集中均匀分布复制副本,从而可以轻松平衡组件故障时的负载。但是,此策略增加了写入成本,因为写入需要将块传输到多个机架。

  2. 副本放置机制原理

    对于常见情况,当复制因子为3时,HDFS的放置策略是,如果写入程序位于数据节点上,则将一个副本放置在本地机器上,否则放置在与写入程序位于同一机架中的随机数据节点上、另一个副本放在不同(远程)机架中的节点上,最后一个副本则放在同一远程机架中的不同节点上。此策略可减少机架间写入流量,这通常会提高写入性能。机架故障的几率远小于节点故障的几率;此策略不会影响数据的可靠性和可用性保证。然而,它并没有减少读取数据时使用的聚合网络带宽,因为块只放置在两个唯一的机架中,而不是三个。使用此策略,块的副本不会均匀分布在机架上。两个复制副本位于一个机架的不同节点上,其余复制副本位于其他机架之一的节点上。此策略在不影响数据可靠性或读取性能的情况下提高了写入性能。

    如果复制系数大于3,则随机确定第4个和以下复制副本的位置,同时将每个机架的复制副本数量保持在上限以下(基本上为(复制副本-1)/机架+2)。因为NameNode不允许DataNodes具有同一块的多个副本,所以创建的最大副本数是当时DataNodes的总数。

    在HDFS中添加了对存储类型和存储策略的支持后,除了上述机架意识之外,NameNode还考虑了复制副本放置的策略。NameNode首先根据机架感知来选择节点,然后检查候选节点是否具有与文件相关联的策略所需的存储空间。如果候选节点没有存储类型,则NameNode会查找另一个节点。如果在第一个路径中找不到足够的节点来放置副本,则NameNode会在第二个路径中查找具有后备存储类型的节点。

    总之,当复制因子为3时,HDFS的放置策略是,如果写入程序位于数据节点上,则将一个副本放置在本地机器上,否则放置在与写入程序相同机架中的随机数据节点上、另一个副本放在不同(远程)机架中的节点上,最后一个副本则放置在同一远程机架中的不同节点上。如果复制系数大于3,则随机确定第4个和以下复制副本的位置,同时将每个机架的复制副本数量保持在上限以下(基本上为(复制副本-1)/机架+2)。除此之外,HDFS还支持4种不同的可插拔块放置策略。用户可以根据其基础结构和用例选择策略。
    以下为3副本策略时的副本放置策略示例图:
    【Hadoop3.3.6】数据块副本放置策略及解析EditLog和FsImage,Hadoop3.x,hadoop

  3. 副本的选择

    为了最大限度地减少全局带宽消耗和读取延迟,HDFS尝试满足来自最接近服务器读取副本的请求。如果在与该节点相同的机架上存在复制副本,则首选该复制副本来满足读取请求。如果HDFS集群跨越多个数据中心,那么驻留在本地数据中心的复制副本优先于任何远程复制副本。

2.4 解析EditLog和Fsimage镜像文件

  1. EditLog文件

    editlog主要是在NameNode已经启动情况下对HDFS进行的各种更新操作进行记录,HDFS客户端执行所有的写操作都会被记录到editlog中。该文件记录了集群运行期间所有对HDFS的相关操作。

  2. Fsimage文件

    fsimage保存了最新的元数据检查点,在HDFS启动时加载fsimage的信息,包含了整个HDFS文件系统的所有目录和文件的信息。
    对于文件来说包括了数据块描述信息、修改时间、访问时间等。
    对于目录来说包括修改时间、访问权限控制信息(目录所属用户,所在组)等。

  3. EditLog和Fsimage的主要作用

    Fsimage,editlog主要用于在集群启动时将集群的状态恢复到关闭前的状态。为了达到这个目的,集群启动时将Fsimage、editlog加载到内存中,进行合并,合并后恢复完成。

  4. 实验与解析
    为了测试方便,以下是在新安装的hadoop3.3.6全分布式环境上(具体安装请参考博文:Hadoop3.3.6全分布式环境搭建)所在的操作:

    1. 登录到NameNode所在节点

    2. 创建HDFS的目录testdatas

      hdfs dfs -mkdir /testdatas
      
    3. 上传hadoop-3.3.6.tar.gz到testdatas目录下

      上传前先查看hadoop-3.3.6.tar.gz文件大小

      [root@master ~]# ls -lh
      -rw-r--r--. 1 root root 697M Apr 20 21:33 hadoop-3.3.6.tar.gz
      [root@master ~]#
      

      以数据块128M来计算下数据块总数:697M/128M = 5.4,即该文件上传到HDFS上时会被分成6个数据块。

      执行如下命令开始上传:

      hdfs dfs -put hadoop-3.3.6.tar.gz /testdatas
      
    4. 解析EditLog文件
      由于EditLog是二进制文件无法直接打开查看和阅读,需要使用hdfs命令将其转换成可阅读的文件格式再进行阅读,具体执行如下命令进行文件格式的转换:

      [root@master ~]# cd /opt/software/hadoop-3.3.6/tmp/dfs/name/current/
      hdfs oev -i edits_inprogress_0000000000000000008 -o ./edits_inprogress.xml
      

      查看转换后的文件edits_inprogress.xml
      文件内容如下:文章来源地址https://www.toymoban.com/news/detail-861679.html

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <EDITS>
        <EDITS_VERSION>-66</EDITS_VERSION>
        <RECORD>
          <OPCODE>OP_START_LOG_SEGMENT</OPCODE>
          <DATA>
            <TXID>8</TXID>
          </DATA>
        </RECORD>
        <RECORD>
          <OPCODE>OP_MKDIR</OPCODE>
          <DATA>
            <TXID>9</TXID>
            <LENGTH>0</LENGTH>
            <INODEID>16386</INODEID>
            <PATH>/testdatas</PATH>
            <TIMESTAMP>1713672689223</TIMESTAMP>
            <PERMISSION_STATUS>
              <USERNAME>root</USERNAME>
              <GROUPNAME>supergroup</GROUPNAME>
              <MODE>493</MODE>
            </PERMISSION_STATUS>
          </DATA>
        </RECORD>
        <RECORD>
          <OPCODE>OP_ADD</OPCODE>
          <DATA>
            <TXID>10</TXID>
            <LENGTH>0</LENGTH>
            <INODEID>16387</INODEID>
            <PATH>/testdatas/hadoop-3.3.6.tar.gz._COPYING_</PATH>
            <REPLICATION>3</REPLICATION>
            <MTIME>1713672994012</MTIME>
            <ATIME>1713672994012</ATIME>
            <BLOCKSIZE>134217728</BLOCKSIZE>
            <CLIENT_NAME>DFSClient_NONMAPREDUCE_268238562_1</CLIENT_NAME>
            <CLIENT_MACHINE>192.168.85.128</CLIENT_MACHINE>
            <OVERWRITE>true</OVERWRITE>
            <PERMISSION_STATUS>
              <USERNAME>root</USERNAME>
              <GROUPNAME>supergroup</GROUPNAME>
              <MODE>420</MODE>
            </PERMISSION_STATUS>
            <ERASURE_CODING_POLICY_ID>0</ERASURE_CODING_POLICY_ID>
            <RPC_CLIENTID>4b339db6-64fe-4703-8e53-6a510784e347</RPC_CLIENTID>
            <RPC_CALLID>3</RPC_CALLID>
          </DATA>
        </RECORD>
        <RECORD>
          <OPCODE>OP_ALLOCATE_BLOCK_ID</OPCODE>
          <DATA>
            <TXID>11</TXID>
            <BLOCK_ID>1073741825</BLOCK_ID>
          </DATA>
        </RECORD>
        <RECORD>
          <OPCODE>OP_SET_GENSTAMP_V2</OPCODE>
          <DATA>
            <TXID>12</TXID>
            <GENSTAMPV2>1001</GENSTAMPV2>
          </DATA>
        </RECORD>
        <RECORD>
          <OPCODE>OP_ADD_BLOCK</OPCODE>
          <DATA>
            <TXID>13</TXID>
            <PATH>/testdatas/hadoop-3.3.6.tar.gz._COPYING_</PATH>
            <BLOCK>
              <BLOCK_ID>1073741825</BLOCK_ID>
              <NUM_BYTES>0</NUM_BYTES>
              <GENSTAMP>1001</GENSTAMP>
            </BLOCK>
            <RPC_CLIENTID/>
            <RPC_CALLID>-2</RPC_CALLID>
          </DATA>
        </RECORD>
        <RECORD>
          <OPCODE>OP_ALLOCATE_BLOCK_ID</OPCODE>
          <DATA>
            <TXID>14</TXID>
            <BLOCK_ID>1073741826</BLOCK_ID>
          </DATA>
        </RECORD>
        <RECORD>
          <OPCODE>OP_SET_GENSTAMP_V2</OPCODE>
          <DATA>
            <TXID>15</TXID>
            <GENSTAMPV2>1002</GENSTAMPV2>
          </DATA>
        </RECORD>
        <RECORD>
      

到了这里,关于【Hadoop3.3.6】数据块副本放置策略及解析EditLog和FsImage的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 最新版本——Hadoop3.3.6单机版完全部署指南

    大家好,我是独孤风,大数据流动的作者。 本文基于最新的 Hadoop 3.3.6 的版本编写,带大家通过单机版充分了解 Apache Hadoop 的使用。本文更强调实践,实践是大数据学习的重要环节,也能在实践中对该技术有更深的理解,所以一些理论知识建议大家多阅读相关的书籍(都在资

    2024年02月03日
    浏览(34)
  • 【大数据基础】Hadoop3.1.3安装教程

    来源: https://dblab.xmu.edu.cn/blog/2441/ 前言:重装解决一切bug!事实上,问题中的绝大部分衍生问题都可以通过重装解决。 创建Hadoop用户 首先按 ctrl+alt+t 打开终端窗口,输入如下命令创建新用户 : 接着使用如下命令设置密码,可简单设置为 hadoop,按提示输入两次密码: 可为

    2024年02月09日
    浏览(54)
  • 大数据之Hadoop3简单入门(一)(通俗易懂)

    目录 一. 大数据基础概论 1.1 何为大数据 2.1 大数据特点(4V) 2.1.1 Volume(大量) 2.2.2 Velocity(高速) 2.2.3 Varity(多样) 2.2.4 Value(低价值密度) 二. hadoop入门概述 2.1 什么是hadoop 2.1.1 概念 2.1.2 hadoop优势 2.1.3 hadoop不同版本区别 2.2  HDFS架构概述 2.3  Yarn架构概述 2.4 MapReduce架

    2024年02月02日
    浏览(34)
  • 大数据第一步-Mac安装Hadoop3

    前提是把jJDK8安装好,hadoop3.x最低需要jdk8。 然后打开共享把远程登陆打开,不打开说是后面会报错, 到终端输入命令:ssh localhost 生成新的keygen否则后面会报错 Permission denied 命令:ssh-keygen -t rsa -P \\\'\\\' -f ~/.ssh/id_rsa   注册,命令为如下: 安装hadoop,命令为我用的是bre

    2024年02月16日
    浏览(47)
  • 【大数据入门核心技术-Hadoop】(六)Hadoop3.2.1高可用集群搭建

    目录 一、Hadoop部署的三种方式 1、Standalone mode(独立模式) 2、Pseudo-Distributed mode(伪分布式模式) 3、Cluster mode(集群模式) 二、准备工作 1、先完成zk高可用搭建 2、/etc/hosts增加内容 3、各台服务器分别创建目录 4、关闭防火墙和禁用swap交换分区 5、三台机器间免密 6、安装

    2023年04月20日
    浏览(76)
  • Hadoop3.0大数据处理学习2(HDFS)

    HDFS:Hadoop Distributed File System。Hadoop分布式存储系统 一种允许文件通过网络在多台主机上分享的文件系统,可以让多机器上的用户分享文件和存储空间。 两大特性:通透性、容错性 分布式文件管理系统的实现很多,HDFS只是其中一种,HDSF不适合存储小文件。GFS、TFS。 使用格式

    2024年02月08日
    浏览(40)
  • 大数据之Hadoop3(3),这份资料可帮你解决95%的问题

    🌹写在开头 ======================================================================== 小袁准备更新 从零搭建Hadoop集群教程 ,此博客针为 没有Linux基础,还不会装centos系统 的小伙伴而准备的,期待你的关注❤️❤️ 第一篇文章:大数据之Hadoop图解概述 第二篇文章:大数据之Hadoop模板虚拟机

    2024年04月15日
    浏览(39)
  • Hadoop3.0大数据处理学习1(Haddop介绍、部署、Hive部署)

    学习步骤: 三大组件的基本理论和实际操作 Hadoop3的使用,实际开发流程 结合具体问题,提供排查思路 开发技术栈: Linux基础操作、Sehll脚本基础 JavaSE、Idea操作 MySQL Hadoop是一个适合海量数据存储与计算的平台。是基于Google的GoogleFS、Map Reduce、BigTable实现的。 移动数据:数据

    2024年02月08日
    浏览(38)
  • 大数据-安装 Hadoop3.1.3 详细教程-伪分布式配置(Centos7)

    **相关资源:**https://musetransfer.com/s/q43oznf6f(有效期至2023年3月16日)|【Muse】你有一份文件待查收,请点击链接获取文件 1.检查是否安装ssh (CentOS 7 即使是最小化安装也已附带openssh 可跳过本步骤) 若已安装进行下一步骤 若未安装 请自行百度 本教程不做过多讲解 2.配置ss

    2023年04月08日
    浏览(31)
  • Hadoop3.0大数据处理学习4(案例:数据清洗、数据指标统计、任务脚本封装、Sqoop导出Mysql)

    直播公司每日都会产生海量的直播数据,为了更好地服务主播与用户,提高直播质量与用户粘性,往往会对大量的数据进行分析与统计,从中挖掘商业价值,我们将通过一个实战案例,来使用Hadoop技术来实现对直播数据的统计与分析。下面是简化的日志文件,详细的我会更新

    2024年02月08日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包