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

目录

    • 一、摘要
    • 二、正文
      • 2.1 环境说明
      • 2.2 网络拓扑
      • 2.3 Hadoop副本放置策略介绍
      • 2.4 解析EditLog和Fsimage镜像文件
    • 三、小结

一、摘要

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

二、正文

2.1 环境说明

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

2.2 网络拓扑

在这里插入图片描述

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副本策略时的副本放置策略示例图:
    在这里插入图片描述

  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
      文件内容如下:

      <?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>
      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/566224.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024HVV在即| 最新漏洞CVE库(1.5W)与历史漏洞POC总结分享!

前言 也快到护网的时间了,每年的护网都是一场攻防实战的盛宴,那么漏洞库就是攻防红蓝双方人员的弹药库,红队人员可以通过工具进行监测是否存在历史漏洞方便快速打点,而蓝队则可以对资产进行梳理和监测历史漏洞,及时处理和修复,做好准备. 下面分享的…

【电控笔记5.4】pwm延迟

PWM延迟 1标准采样法 Td=MCU计算延迟+输出延迟 Tcon=电流控制周期 Ts=PWM载波周期 Td=1.5Ts(6.3节 ) 电流环跟PWM采样周期同步 2修改采样法

YOLOv5改进 | Conv篇 | 利用CVPR2024-DynamicConv提出的GhostModule改进C3(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是CVPR2024的最新改进机制DynamicConv其是CVPR2024的最新改进机制&#xff0c;这个论文中介绍了一个名为ParameterNet的新型设计原则&#xff0c;它旨在在大规模视觉预训练模型中增加参数数量&#xff0c;同时尽量不增加浮点运算&#x…

如何使用 ArcGIS Pro 快速为黑白地图配色

对于某些拍摄时间比较久远的地图&#xff0c;限于当时的技术水平只有黑白的地图&#xff0c;针对这种情况&#xff0c;我们可以通过现在的地图为该地图进行配色&#xff0c;这里为大家讲解一下操作方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微…

kafka 命令行使用 消息的写入和读取 quickstart

文章目录 Intro命令日志zookeeper serverkafka servercreate topic && describe topic Intro Kafka在大型系统中可用作消息通道&#xff0c;一般是用程序语言作为客户端去调用kafka服务。 不过在这之前&#xff0c;可以先用下载kafka之后就包含的脚本文件等&#xff0…

ChromaDB教程

使用 Chroma DB&#xff0c;管理文本文档、将文本嵌入以及进行相似度搜索。 随着大型语言模型 &#xff08;LLM&#xff09; 及其应用的兴起&#xff0c;我们看到向量数据库越来越受欢迎。这是因为使用 LLM 需要一种与传统机器学习模型不同的方法。 LLM 的核心支持技术之一是…

数据库管理-第173期 OceanBase一体化Plus多模融合(20240422)

数据库管理173期 2024-04-22 数据库管理-第173期 OceanBase一体化Plus多模融合&#xff08;20240422&#xff09;1 架构简化2 不止融合2.1 行列混存2.2 多维使用2.3 多模JOIN 3 展望 数据库管理-第173期 OceanBase一体化Plus多模融合&#xff08;20240422&#xff09; 作者&…

Skill Check: Building Blocks for an LLM Application

Skill Check: Building Blocks for an LLM Application

腾讯云轻量2核4G5M服务器优惠价格165元1年,2024年多配置报价单

腾讯云轻量2核4G5M服务器优惠价格165元1年。腾讯云服务器价格表2024年最新价格&#xff0c;轻量2核2G3M服务器61元一年、2核2G4M服务器99元1年&#xff0c;三年560元、2核4G5M服务器165元一年、3年900元、轻量4核8M12M服务器646元15个月、4核16G10M配置32元1个月、8核32G配置11…

vue-element-admin vue设置动态路由 刷新页面后出现跳转404页面Bug 解决方法

做项目时遇到的这个bug&#xff0c;因为除了跳404之外也没太大影响&#xff0c;之前就一直放着没管&#xff0c;现在项目基本功能实现了&#xff0c;转头处理了一下&#xff0c;现在在这里记录一下解决方法 这个bug的具体情况是&#xff1a;设置了动态路由之后&#xff0c;不同…

如何在PostgreSQL中使用索引覆盖扫描提高查询性能?

文章目录 解决方案1. 创建合适的索引2. 确保查询能够使用索引覆盖扫描3. 调整查询以利用索引覆盖扫描4. 监控和调优 示例代码1. 创建索引2. 编写查询3. 检查是否使用索引覆盖扫描4. 调整索引 总结 在PostgreSQL中&#xff0c;索引是提高查询性能的关键工具之一。索引允许数据库…

物理机中没有VMNet1和VMNet8虚拟网卡

控制面板——网络连接——网络适配器 VMware Network Adapter VMnet1 VMware Network Adapter VMnet8 如果没有这两个虚拟网卡&#xff0c;虚拟机的网络会出现问题 # 解决办法-恢复虚拟网卡默认设置 1、下载并打开ccleaner&#xff0c;ccleaner官网&#xff1a;CCleaner M…

【苍穹外卖】HttpClient-快速理解入门

目录 HttpClient-快速理解&入门1. 需求2. 如何使用3. 具体示例4. 大致优点5. 大致缺点 HttpClient-快速理解&入门 1. 需求 在平常访问服务器里面的资源的时候&#xff0c;我们通常是通过浏览器输入网址&#xff08;或者在浏览器点击某个连接&#xff09;这种方式&…

OpenCV杂记(2):图像拼接(hconcat, vconcat)

OpenCV杂记&#xff08;1&#xff09;&#xff1a;绘制OSD&#xff08;cv::getTextSize, cv::putText&#xff09;https://blog.csdn.net/tecsai/article/details/137872058 1. 简述 做图像处理或计算机视觉技术的同学都知道&#xff0c;我们在工作中会经常遇到需要将两幅图像拼…

Spring Boot中判断轨迹数据是否经过设置的打卡点,且在PGSQL中把点拼接成线,判断某个点是否在线上或在线的50米范围内

问题描述 轨迹数据判断是否经过打卡点&#xff0c;轨迹数据太多&#xff0c;循环判断的话非常消耗内存。解决办法只需要把所有轨迹数据点拼成了一条线&#xff0c;然后只需要循环打卡点即可&#xff0c;打卡点不多&#xff0c;一般不会超过100个&#xff0c;如果多的话&#x…

苹果手机远程打卡教程

关于苹果手机远程打卡教程之——有电脑零成本版 &#x1f4ce;个人主页&#xff1a;我的主页 &#x1f4ce;小白一枚&#xff0c;欢迎指教&#x1f44f; 嗨嗨嗨&#xff0c;今天来出一期iPhone实现远程打卡的教程&#xff0c;让我们可以随时随地的打卡wherever&#xff5e; 准…

shell进阶之正则表达式:字符转义(十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

【深度学习】烟雾和火焰数据集,野外数据集,超大量数据集,目标检测,YOLOv5

标注了2w张数据集&#xff0c;是目标检测yolo格式的&#xff0c;有火焰、烟雾两个目标。 训练方法看这里&#xff1a; https://qq742971636.blog.csdn.net/article/details/138097481 打包 依据不一样的需求&#xff0c; 详情请查看 https://docs.qq.com/sheet/DUEdqZ2l…

在windows系统中安装kafka配置全步骤记录

在windows系统中安装kafka配置全步骤记录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可…

软考高级架构师:AI 通俗讲解负载测试、压力测试、强度测试、容量测试和可靠性测试

在软件工程领域&#xff0c;测试是一个确保软件质量和性能的关键步骤。负载测试、压力测试、强度测试、容量测试和可靠性测试都是性能测试的不同类型&#xff0c;它们的目的和方法有所不同。 下面我将通过简单的比喻和解释&#xff0c;帮助您理解这些测试之间的区别。 负载测试…