一、edits 文件

一)文件组成

  1. 一个edits文件记录了一次写文件的过程,该过程被分解成多个部分进行记录;(每条记录在hdfs中有一个编号)
  2. 每一个部分为: '<RECORD>...</RECORD>' ;
  3. 每一部分包含了:'<OPCODE> ... </OPCODE>'  和 '<DATA> ... </DATA>' 两部分内容;

二)文件内容理解

  1. 文件首: <OPCODE>OP_START_LOG_SEGMENT</OPCODE>

  • <RECORD>
    <OPCODE>OP_START_LOG_SEGMENT</OPCODE> --- 表示对一次写操作记录的开始
    <DATA>
    <TXID>138</TXID> ---------- HDFS的第138号记录
    </DATA>
    </RECORD>

  2. 文件的元数据: <OPCODE>OP_ADD</OPCODE>

    # a.xml._COPYING_: 写入 'a.xml' 文件的过程中,会先将文件写到该临时文件中,最后再将该文件重命名后存放到DN;

  •   <RECORD>
    <OPCODE>OP_ADD</OPCODE> ------------- 写文件操作
    <DATA>
    <TXID>139</TXID> ---------------- HDFS的第139号记录
    <LENGTH>0</LENGTH>
    <INODEID>16416</INODEID>
    <PATH>/a.xml._COPYING_</PATH> --- 写'a.xml'文件的过程中生成临时文件'a.xml._COPYING'
    <REPLICATION>3</REPLICATION> --- 副本数
    <MTIME>1603341874966</MTIME> --- 创建时间
    <ATIME>1603341874966</ATIME> --- 修改时间
    <BLOCKSIZE>134217728</BLOCKSIZE> --- 文件块的大小:128M
    <CLIENT_NAME>DFSClient_NONMAPREDUCE_-1327338057_1</CLIENT_NAME> ---- 来源哪个客户端
    <CLIENT_MACHINE>192.168.26.101</CLIENT_MACHINE> --------------- 通过哪个机器上传的
    <OVERWRITE>true</OVERWRITE> --------------- 是否允许被覆盖
    <PERMISSION_STATUS> ---------- 权限信息
    <USERNAME>heyc</USERNAME> ---------- 所属主
    <GROUPNAME>supergroup</GROUPNAME> ---------- 所属组
    <MODE>420</MODE> ---------- 权限大小(777最大)
    </PERMISSION_STATUS>
    <RPC_CLIENTID>3299ce83-ba14-4468-8cf8-b5edb5dea153</RPC_CLIENTID> ---- 集群ID
    <RPC_CALLID>3</RPC_CALLID>
    </DATA>
    </RECORD>

  3. 定义块id:<OPCODE>OP_ALLOCATE_BLOCK_ID</OPCODE>

  •  <RECORD>
    <OPCODE>OP_ALLOCATE_BLOCK_ID</OPCODE> ---- 表示该步为记录 “定义块ID”
    <DATA>
    <TXID>140</TXID> ---- HDFS的第140号记录
    <BLOCK_ID>1073741835</BLOCK_ID> ----- 块ID
    </DATA>
    </RECORD>

  4. 为块生成一个时间戳:<OPCODE>OP_SET_GENSTAMP_V2</OPCODE>

  • <RECORD>
    <OPCODE>OP_SET_GENSTAMP_V2</OPCODE>
    <DATA>
    <TXID>141</TXID>
    <GENSTAMPV2>1012</GENSTAMPV2>
    </DATA>
    </RECORD>

  5. 添加块: <OPCODE>OP_ADD_BLOCK</OPCODE>

  •  <RECORD>
    <OPCODE>OP_ADD_BLOCK</OPCODE>
    <DATA>
    <TXID>142</TXID>
    <PATH>/a.xml._COPYING_</PATH>
    <BLOCK>
    <BLOCK_ID>1073741835</BLOCK_ID>
    <NUM_BYTES>0</NUM_BYTES>
    <GENSTAMP>1012</GENSTAMP>
    </BLOCK>
    <RPC_CLIENTID></RPC_CLIENTID>
    <RPC_CALLID>-2</RPC_CALLID>
    </DATA>
    </RECORD>

  6. 封闭文件: <OPCODE>OP_CLOSE</OPCODE>

  •   <RECORD>
    <OPCODE>OP_CLOSE</OPCODE>
    <DATA>
    <TXID>143</TXID>
    <LENGTH>0</LENGTH>
    <INODEID>0</INODEID>
    <PATH>/a.xml._COPYING_</PATH>
    <REPLICATION>3</REPLICATION>
    <MTIME>1603341875516</MTIME>
    <ATIME>1603341874966</ATIME>
    <BLOCKSIZE>134217728</BLOCKSIZE>
    <CLIENT_NAME></CLIENT_NAME>
    <CLIENT_MACHINE></CLIENT_MACHINE>
    <OVERWRITE>false</OVERWRITE>
    <BLOCK>
    <BLOCK_ID>1073741835</BLOCK_ID>
    <NUM_BYTES>313</NUM_BYTES>
    <GENSTAMP>1012</GENSTAMP>
    </BLOCK>
    <PERMISSION_STATUS>
    <USERNAME>heyc</USERNAME>
    <GROUPNAME>supergroup</GROUPNAME>
    <MODE>420</MODE>
    </PERMISSION_STATUS>
    </DATA>
    </RECORD>

  7. 重命名临时文件 'a.xml._COPYING_' 为 'a.xml': <OPCODE>OP_RENAME_OLD</OPCODE>

  • <RECORD>
    <OPCODE>OP_RENAME_OLD</OPCODE>
    <DATA>
    <TXID>144</TXID>
    <LENGTH>0</LENGTH>
    <SRC>/a.xml._COPYING_</SRC>
    <DST>/a.xml</DST>
    <TIMESTAMP>1603341875552</TIMESTAMP>
    <RPC_CLIENTID>3299ce83-ba14-4468-8cf8-b5edb5dea153</RPC_CLIENTID>
    <RPC_CALLID>8</RPC_CALLID>
    </DATA>
    </RECORD>

二、fsimage 文件

1)文件组成

  1. fsimage 由多个 '<INodeDirectorySection> ... </INodeDirectorySection>'
  2. 每个 '<INodeDirectorySection> ... </INodeDirectorySection>' 中有多个 '<inode> ... </inode>'

2)文件内容理解

  • <inode>
    <id>16417</id>
    <type>FILE</type> ------ 文件类型:常规文件(如果是文件夹则为 'DIRECTORY')
    <name>b.xml</name>    ----- 文件名
    <replication>3</replication> --- 副本数
    <mtime>1603342078483</mtime> --- 创建时间
    <atime>1603342078253</atime> --- 修改时间
    <perferredBlockSize>134217728</perferredBlockSize> --- 块大小
    <permission>heyc:supergroup:rw-r--r--</permission> --- 权限
    <blocks> ---- 被切成了几个块
    <block> --- 一个快
    <id>1073741836</id> ----- 块的id
    <genstamp>1013</genstamp> --- 块的时间戳
    <numBytes>313</numBytes> --- 块中存放的数据的大小(该文件只有一个块,该大小即为文件大小)
    </block>
    </blocks>
    </inode>

数仓:解读 NameNode 的 edits 和 fsimage 文件内容的更多相关文章

  1. HDFS源码分析之FSImage文件内容(一)总体格式

    FSImage文件是HDFS中名字节点NameNode上文件/目录元数据在特定某一时刻的持久化存储文件.它的作用不言而喻,在HA出现之前,NameNode因为各种原因宕机后,若要恢复或在其他机器上重启 ...

  2. 数仓面试高频考点--解决hive小文件过多问题

    本文首发于公众号:五分钟学大数据 小文件产生原因 hive 中的小文件肯定是向 hive 表中导入数据时产生,所以先看下向 hive 中导入数据的几种方式 直接向表中插入数据 insert into ...

  3. hadoop源代码解读namenode高可靠:HA;web方式查看namenode下信息;dfs/data决定datanode存储位置

    点击browserFilesystem,和命令查看结果一样 当我们查看hadoop源代码时,我们看到hdfs下的hdfs-default.xml文件信息 我们查找${hadoop.tmp.dir}这是 ...

  4. Hadoop-2.4.1学习之edits和fsimage查看器

    在hadoop中edits和fsimage是两个至关关键的文件.当中edits负责保存自最新检查点后命名空间的变化.起着日志的作用,而fsimage则保存了最新的检查点信息.这个两个文件里的内容使用普 ...

  5. HAWQ取代传统数仓实践(十三)——事实表技术之周期快照

    一.周期快照简介 周期快照事实表中的每行汇总了发生在某一标准周期,如一天.一周或一月的多个度量.其粒度是周期性的时间段,而不是单个事务.周期快照事实表通常包含许多数据的总计,因为任何与事实表时间范围一 ...

  6. 技术专家说 | 如何基于 Spark 和 Z-Order 实现企业级离线数仓降本提效?

    [点击了解更多大数据知识] 市场的变幻,政策的完善,技术的革新--种种因素让我们面对太多的挑战,这仍需我们不断探索.克服. 今年,网易数帆将持续推出新栏目「金融专家说」「技术专家说」「产品专家说」等, ...

  7. 数仓1.4 |业务数仓搭建| 拉链表| Presto

    电商业务及数据结构 SKU库存量,剩余多少SPU商品聚集的最小单位,,,这类商品的抽象,提取公共的内容 订单表:周期性状态变化(order_info) id 订单编号 total_amount 订单金 ...

  8. 数仓1.1 分层| ODS& DWD层

    数仓分层 ODS:Operation Data Store原始数据 DWD(数据清洗/DWI) data warehouse detail数据明细详情,去除空值,脏数据,超过极限范围的明细解析具体表 ...

  9. 在HUE中将文本格式的数据导入hive数仓中

    今天有一个需求需要将一份文档形式的hft与fdd的城市关系关系的数据导入到hive数仓中,之前没有在hue中进行这项操作(上家都是通过xshell登录堡垒机直接连服务器进行操作的),特此记录一下. - ...

随机推荐

  1. 【JavaScript基础】Js的定时器(你想看的原理也在哟)

    [JavaScript基础]Js的定时器(你想看的原理也在哟) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 本章是经历 ...

  2. MVC之三个单选按钮的切换选择

    实现需求: 1.三个多选按钮中:只能同时选择限时抢购和分享金或者拼团特惠和分享金,其中限时抢购和拼团特惠不能同时选择.并且点击后显示,再次点击赢隐藏. 1 @*活动信息*@ 2 <div> ...

  3. Codeforces Round #741 (Div. 2)部分题题解

    我果然还是太菜了,就写了两道题....真是水死了.... A The Miracle and the Sleeper 简化题意:给定\(l,r\),求\(a\)%\(b\)的最大值,其中\(r> ...

  4. /etc/hosts 详解

    /etc/hosts:主机名查询静态表,是ip地址与域名快速解析的文件.ip地址与主机名之间的映射,包括主机的别名. 通常将常用的域名和ip地址映射加入到hosts文件中,实现快速方便的访问. 如果没 ...

  5. flex步局 11.02

    语法 justify-content: flex-start | flex-end | center | space-between | space-around flex-start:弹性盒子元素将 ...

  6. 【JAVA】编程(4)---摇色子

    作业要求: 利用" Math.random ( )  "生成随机数的方法来模拟同时摇三个色子获得的点数:点数的多少不同,也会导致不同的输出结果:可适当对程序增添一些更有趣的功能: ...

  7. Django笔记&教程 6-2 表单(Form)基础操作

    Django 自学笔记兼学习教程第6章第2节--表单(Form)基础操作 点击查看教程总目录 1 - 编写表单类 创建新的表单类的代码,一般写到一个专门的forms.py文件中(一般放在对应的app文 ...

  8. Go语言核心36讲(Go语言实战与应用五)--学习笔记

    27 | 条件变量sync.Cond (上) 前导内容:条件变量与互斥锁 我们常常会把条件变量这个同步工具拿来与互斥锁一起讨论.实际上,条件变量是基于互斥锁的,它必须有互斥锁的支撑才能发挥作用. 条件 ...

  9. Forest v1.5.13 发布,声明式 HTTP 框架,已超 1.7k star

    Forest介绍 Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL.Header 以及 Body 等信息)绑定到您自定义的 Interfac ...

  10. 理解PHP的运行机制

    PHP是一种纯解释型在服务端执行的可以内嵌HTML的脚本语言,尤其适合开发Web应用程序.请求一个 PHP 脚本时,PHP 会读取该脚本,并将其编译为 Zend 操作码,这是要执行的代码的一种二进制表 ...