HDFS 用户手册

2024-06-07 15:58
文章标签 hdfs 用户手册

本文主要是介绍HDFS 用户手册,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 一 目的
  • 二 概述
  • 三 先决条件
  • 四 Web接口
  • 五 Shell命令
    • 1 DFSAdmin命令
  • 六 Secondary NameNode Hadoop 1x
  • 七 Checkpoint 节点
  • 八 Backup Node
  • 九 引入 Checkpoint
  • 十 再平衡
  • 八 机架感知Rack awareness
  • 九 安全模式
  • 十 fsck
  • 十一 fetchdt
  • 十二 恢复模式
  • 十三 升级与回滚
  • 十四 文件权限与安全
  • 十五 扩展性
  • 十六 相关文献



一. 目的

本文档的目标是为 Hadoop 分布式文件系统(HDFS)的用户提供一个学习的起点,这里的 HDFS 既可以作为 Hadoop 集群的一部分,也可以作为一个独立的分布式文件系统。虽然 HDFS 在很多环境下被设计成是可正确工作的,但是了解 HDFS 的工作原理对在特定集群上改进 HDFS 的运行性能和错误诊断都有极大的帮助。



二. 概述

HDFS 是 Hadoop 应用用到的一个最主要的分布式存储系统。一个 HDFS 集群主要由一个 NameNode 和很多个 Datanode 组成:Namenode 管理文件系统的元数据,而 Datanode 存储了实际的数据。HDFS 的体系结构在这里有详细的描述。本文档主要关注用户以及管理员怎样和 HDFS 进行交互。HDFS 架构设计中的图解描述了 Namenode、Datanode 和 客户端 之间的基本的交互操作。基本上,客户端联系 Namenode 以获取文件的元数据或修饰属性,而真正的文件 I/O 操作是直接和 Datanode 进行交互的。

下面列出了一些多数用户都比较感兴趣的重要特性。

  • Hadoop(包括HDFS)非常适合在商用硬件(commodity hardware)上做分布式存储和计算,因为它不仅具有容错性和可扩展性,而且非常易于扩展。Map-Reduce 框架以其在大型分布式系统应用上的简单性和可用性而著称,这个框架已经被集成进 Hadoop 中
  • HDFS 的可配置性极高,同时,它的默认配置能够满足很多的安装环境。多数情况下,这些参数只在非常大规模的集群环境下才需要调整
  • 用 Java 语言开发,支持所有的主流平台
  • 支持类 Shell 命令,可直接和 HDFS 进行交互
  • NameNode 和 DataNode 有内置的 Web 服务器,方便用户检查集群的当前状态
  • 新特性和改进会定期加入 HDFS 的实现中

下面列出的是 HDFS 中常用特性的一部分:

  • 文件权限和授权
  • 机架感知(Rack awareness):在调度任务和分配存储空间时考虑节点的物理位置
  • 安全模式:一种维护需要的管理模式
  • fsck:一个诊断文件系统健康状况的工具,能够发现丢失的文件或数据块
  • Rebalancer:当 datanode 之间数据不均衡时,平衡集群上的数据负载
  • 升级和回滚:在软件更新后有异常发生的情形下,能够回滚到 HDFS 升级之前的状态
  • Secondary Namenode:对文件系统名字空间执行周期性的检查点,将 Namenode上HDFS 改动日志文件的大小控制在某个特定的限度下



三. 先决条件

下面的文档描述了如何安装和搭建Hadoop集群:

  • Hadoop 快速入门 针对初次使用者
  • Hadoop 集群搭建 针对大规模分布式集群的搭建

文档余下部分假设用户已经安装并运行了至少包含一个 Datanode 节点的 HDFS。就本文目的来说,Namenode 和 Datanode 可以运行在同一个物理主机上。



四. Web接口

NameNode 和 DataNode 各自启动了一个内置的 Web 服务器,显示了集群当前的基本状态和信息。在默认配置下 NameNode 的首页地址是 http://namenode-name:50070/。这个页面列出了集群里的所有 DataNode 和集群的基本状态。这个 Web 接口也可以用来浏览整个文件系统(使用 NameNode 首页上的 “Browse the file system” 链接)。



五. Shell命令

Hadoop 包括一系列的类 shell 的命令,可直接和 HDFS 以及其他 Hadoop 支持的文件系统进行交互。bin/hadoop fs -help 命令列出所有 Hadoop Shell 支持的命令。而 bin/hadoop fs -help command-name 命令能显示关于某个命令的详细信息。这些命令支持大多数普通文件系统的操作,比如复制文件、改变文件权限等。它还支持一些 HDFS特有的操作,比如改变文件副本数目。


5.1 DFSAdmin命令

'bin/hadoop dfsadmin' 命令支持一些和 HDFS 管理相关的操作。bin/hadoop dfsadmin -help 命令能列出所有当前支持的命令。比如:

  • -report:报告HDFS的基本统计信息。有些信息也可以在NameNode Web服务首页看到
  • -safemode:虽然通常并不需要,但是管理员的确可以手动让NameNode进入或离开安全模式
  • -finalizeUpgrade:删除上一次升级时制作的集群备份



六. Secondary NameNode (Hadoop 1.x)

NameNode 将对文件系统的改动追加保存到本地文件系统上的一个日志文件(edits)。当一个 NameNode 启动时,它首先从一个映像文件(fsimage)中读取 HDFS 的状态,接着应用日志文件中的 edits 操作。然后它将新的 HDFS 状态写入(fsimage)中,并使用一个空的 edits 文件开始正常操作。因为 NameNode 只有在启动阶段才合并 fsimage 和 edits,所以久而久之日志文件可能会变得非常庞大,特别是对大型的集群。日志文件太大的另一个副作用是下一次 NameNode 启动会花很长时间。

Secondary NameNode 定期合并 fsimage 和 edits 日志,将 edits 日志文件大小控制在一个限度下。因为内存需求和 NameNode 在一个数量级上,所以通常 secondary NameNode 和 NameNode 运行在不同的机器上。Secondary NameNode 通过 bin/start-dfs.shconf/masters 中指定的节点上启动。

Secondary NameNode 的检查点进程启动,是由两个配置参数控制的:

  • dfs.namenode.checkpoint.period : 两次连续的检查点之间的最大的时间间隔,缺省值是1小时
  • dfs.namenode.checkpoint.txns : 最大的没有没有执行检查点的事务数目,即使执行检查点的周期未到,也将执行一次紧急检查点,缺省值是1百万

Secondary NameNode 存储最新的检查点,它目录结构与主 NameNode 一致,所以这个备用的检查点映像在主 NameNode 需要时,总是能访问的。



七. Checkpoint 节点

NameNode 采用两个文件来保存命名空间的信息:fsimage,它是最新的已执行检查点的命名空间的信息;edits,它是执行检查点后命名空间变化的日志文件。当 NameNode 启动时,fsimage 和 edits合并,提供一个最新的文件系统的 metadata,然后 NameNode 将新的 HDFS 状态写入 fasimage,并开始一个新的 edits 日志。

Checkpoint 节点周期性地创建命名空间的检查点。它从 NameNode 下载 fsimage 和 edits,在本地合并它们,并将其发回给 active 的 NameNode。Checkpoint 节点通常与 NameNode 不在同一台机器上,因为它们有同样的内存要求。Checkpoint 节点由配置文件中的 bin/hdfs namenode –checkpoint 来启动。

Checkpoint (或 Backup )节点的位置以及附带的 web 接口由 dfs.namenode.backup.address anddfs.namenode.backup.http-address 参数指定。

Checkpoint 进程的运行受两个配置参数控制:

  • dfs.namenode.checkpoint.period,两次连续的检查点之间的最大的时间间隔,缺省值是 1 小时
  • dfs.namenode.checkpoint.txns,最大的没有没有执行检查点的事务数目,即使执行检查点的周期未到,也将执行一次紧急检查点,缺省值是 1百万

Checkpoint 节点上保存的最新的检查点,其目录结构与 NameNode 上一样,这样,如果需要,NameNode 总是可以读取这上面的已执行检查点的文件映像。参见“import checkpoint”。

多个 Checkpoint 节点可以在集群的配置文件中指定。



八. Backup Node

Backup 节点与 Checkpoint 节点提供同样的执行检查点功能,只不过它还在内存中保存一份最新的命名空间的的拷贝,该拷贝与 NameNode 中的保持同步。除了接收 NameNode 中发送的 edits 并把它保存到磁盘之外,Backup 还将 edits 用到自己的内存中,因而创建出一份命名空间的备份。

因为 Backup 节点在内存中保持有最新的命名空间的状态,因此它不需要从 NameNode 下载 fsimage 和 edits 文件来创建一个检查点,而这是 Checkpoint 节点或 Secondary NameNode 所必需的步骤。Backup 节点的检查点进程更高效,因为它只需要将命名空间信息保存到本地的 fsimage 文件并重置 edits 就可以了。

由于 Backup 节点内存中维护了一份命名空间的拷贝,它的内存要求与 NameNode 一致。

NameNode 同一时刻只支持一个 Backup 节点。如果 Backup 在用,则不能注册 Checkpont 节点。同时有多个 Backup 节点会在将来被支持

Backup 节点的配置与 Checkpoint 节点一样,它采用 bin/hdfs namenode –backup 启动。Backup (或 Checkup )节点的位置及其 web 接口由配置参数 dfs.namenode.backup.address 和 dfs.namenode.backup.http-address 指定。

使用 Backup 节点,NameNode 就可以选择不进行存储,而将保持命名空间状态的责任交给 Backup 节点。为此,在 NameNode 的配置中,采用选项 -importCheckpoint 来启动 NameNode,并且不设置 edits 的存储位置选项 dfs.namenode.edits.dir

关于创建 Backup 和 Checkpoint 节点背后动机的详细讨论,请参见 HADOOP-4539。



九. 引入 Checkpoint

如果其它所有的映像文件和 edits 都丢失了,可以将最后的检查点导入到 NameNode,为此,需要以下步骤:

  • 创建一个空目录,在 dfs.namenode.name.dir 项中配置为该目录
  • 设置 dfs.namenode.checkpoint.dir 为检查点目录
  • 采用 -importCheckpoint 选项来启动 NameNode

NameNode 将从 dfs.namenode.checkpoint.dir 设置的目录中上载检查点,并将其保存在 dfs.namenode.name.dir 指定的目录中。如果 dfs.namenode.name.dir 中存在一个合法的映像文件,NameNode 就会启动失败,NameNode 要验证 dfs.namenode.checkpoint.dir 中的映像文件是否合法,但在任何情况下,都不会修改该文件。



十. 再平衡

HDFS 的数据不可能总是在 DataNode 中均匀分布。一个最常见的原因是因为有新的 DataNode 加入。当存放新数据块(文件是以一系列数据来保存的)时,NameNode 会考虑各种参数来选择 DataNode 接收该数据块,以下是一些这样的考虑:

  • 在同一个节点上,需要复制一份数据块的策略
  • 需要将复制块分散到不同的机架上,以便机架故障时,集群依然能恢复
  • 一份复制块放在同一机架上,以便减少跨机架的网络 IO
  • 将数据块均匀分布到集群中的 DataNode 上

基于多种考虑,DataNode 上的数据可能会不平衡,HDFS 为管理者提供了一个分析和再平衡数据的工具。一个简要的管理者指南的 PDF 附在 HADOOP-1652 中。



八. 机架感知(Rack awareness)

通常,大型 Hadoop 集群是以机架的形式来组织的,同一个机架上不同节点间的网络状况比不同机架之间的更为理想。另外,NameNode 设法将数据块副本保存在不同的机架上以提高容错性。Hadoop 允许集群的管理员通过配置 dfs.network.script 参数来确定节点所处的机架。当这个脚本配置完毕,每个节点都会运行这个脚本来获取它的机架 ID。默认的安装假定所有的节点属于同一个机架。这个特性及其配置参数在 HADOOP-692 所附的 PDF 上有更详细的描述。



九. 安全模式

NameNode 启动时会从 fsimage 和 edits 日志文件中装载文件系统的状态信息,接着它等待各个 DataNode 向它报告它们各自的数据块状态,这样,NameNode 就不会过早地开始复制数据块,即使在副本充足的情况下。这个阶段,NameNode 处于安全模式下。NameNode 的安全模式本质上是 HDFS 集群的一种只读模式,此时集群不允许任何对文件系统或者数据块修改的操作。通常 NameNode 会在开始阶段自动地退出安全模式。如果需要,你也可以通过 bin/hadoop dfsadmin -safemode 命令显式地将 HDFS 置于安全模式。NameNode 首页会显示当前是否处于安全模式。关于安全模式的更多介绍和配置信息请参考 JavaDoc:setSafeMode()。



十. fsck

HDFS 支持 fsck 命令来检查系统中的各种不一致状况。这个命令被设计来报告各种文件存在的问题,比如文件缺少数据块或者副本数目不够。不同于在本地文件系统上传统的 fsck 工具,这个命令并不会修正它检测到的错误。一般来说,NameNode 会自动修正大多数可恢复的错误。HDFS 的 fsck 不是一个 Hadoop shell 命令。它通过 bin/hadoop fsck 执行。 命令的使用方法请参考 fsck 命令 fsck 可用来检查整个文件系统,也可以只检查部分文件。



十一. fetchdt

HDFS 支持 fetchdt 命令来获取授权标识,并将其存储在本地文件系统的一个文件中。以后,一个“非安全”的客户端可以用这个标识以后来访问受限的服务器(例如 NameNode)。获取这个标识,采用 RPC 或 HTTPS(over Kerberos) 方式,然后,在获取之前需要提交 Kerberos 凭证(运行 kinit 来获得凭证)。HDFS fechedt 命令不是一个 Hadoop shell 命令。它以 bin/hadoop fetchdt DTfile 方式运行。当你获得授权标识后,通过指定环境变量 HADOOP_TOKEN_FILE_LOCATION 为授权标识文件名,你就可以运行 HDFS 命令,而不需要 Kerberros 凭证了。



十二. 恢复模式

通常,你要配置多个 metadata 存储位置,当一个存储位置崩溃后,你可以从其它位置读取到 metadata。

但是,如果仅有的一个存储位置崩溃后怎么办呢?在这种情况下,有一个特别的 NameNode 启动模式,叫恢复模式,允许你恢复大大部分数据。

你可以像这样启动恢复模式:namenode –recover

在恢复模式时,NameNode 以命令行的方式与你交互,显示你可能采取的恢复数据的措施。

如果你不想采用交互模式,你可以加上选项 -force,这个选项将强制选取第一个选择恢复,通常,这是最合理的选择。

由于恢复模式可能使数据丢失,你应该在使用它之前备份 edit 日志文件和 fsimage。



十三. 升级与回滚

当在一个已有集群上升级 Hadoop 时,像其他的软件升级一样,可能会有新的 bug 或一些会影响到现有应用的非兼容性变更出现。在任何有实际意义的 HDSF 系统上,丢失数据是不被允许的,更不用说重新搭建启动 HDFS 了。HDFS 允许管理员退回到之前的 Hadoop 版本,并将集群的状态回滚到升级之前。更多关于 HDFS 升级的细节在升级 wiki 上可以找到。HDFS 在一个时间可以有一个这样的备份。在升级之前,管理员需要用 bin/hadoop dfsadmin -finalizeUpgrade(升级终结操作)命令删除存在的备份文件。下面简单介绍一下一般的升级过程:

  • 升级 Hadoop 软件之前,请检查是否已经存在一个备份,如果存在,可执行升级终结操作删除这个备份。通过 dfsadmin -upgradeProgress status 命令能够知道是否需要对一个集群执行升级终结操作
  • 停止集群并部署新版本的Hadoop
  • 使用 -upgrade 选项运行新的版本(bin/start-dfs.sh -upgrade)
  • 在大多数情况下,集群都能够正常运行。一旦我们认为新的 HDFS 运行正常(也许经过几天的操作之后),就可以对之执行升级终结操作。注意,在对一个集群执行升级终结操作之前,删除那些升级前就已经存在的文件并不会真正地释放 DataNodes 上的磁盘空间
  • 如果需要退回到老版本
    • 停止集群并且部署老版本的Hadoop
    • 用回滚选项启动集群(bin/start-dfs.h -rollback)

When upgrading to a new version of HDFS, it is necessary to rename or delete any paths that are reserved in the new version of HDFS. If the NameNode encounters a reserved path during upgrade, it will print an error like the following:

/.reserved is a reserved path and .snapshot is a reserved path component in this version of HDFS. Please rollback and delete or rename this path, or upgrade with the -renameReserved [key-value pairs] option to automatically rename these paths during upgrade.

Specifying -upgrade -renameReserved [optional key-value pairs] causes the NameNode to automatically rename any reserved paths found during startup. For example, to rename all paths named .snapshot to .my-snapshot and .reserved to .my-reserved, a user would specify -upgrade -renameReserved .snapshot=.my-snapshot,.reserved=.my-reserved.

If no key-value pairs are specified with -renameReserved, the NameNode will then suffix reserved paths with ..UPGRADE_RENAMED, e.g. .snapshot.-51.UPGRADE_RENAMED.

There are some caveats to this renaming process. It’s recommended, if possible, to first hdfs dfsadmin -saveNamespace before upgrading. This is because data inconsistency can result if an edit log operation refers to the destination of an automatically renamed file.



十四. 文件权限与安全

文件的权限设计地类似于其它类平台,如 Linux。目前,安全还限制在简单的文件权限方面。启动 NameNode 的用户被 HDFS 视为超级用户。HDFS 的以后版本将支持网络安全协议,例如 Kerberos,来做用户安全认证和加密数据传输,详细的讨论见权限指南。



十五. 扩展性

Hadoop 目前可以运行在由上千个节点组成的集群上。Wiki 页上列出了一些采用大集群的组织。每个集群有一个NameNode。目前NameNode上可用的总内存数量是一个扩展性的基本限制。在非常巨大的集群上,增加存储在HDFS上文件的平均大小,有助于增加整个集群的尺寸而不会增加NameNode上内存的使用量,缺省的配置可能不适合非常巨大的集群,Wike页列出了在大集群情况下为提供性能而建议的配置项。



十六. 相关文献

本文档的目标是为 Hadoop 分布式文件系统(HDFS)的用户提供一个学习的起点。尽管用户手册继续改进,但仍然有很多关于 Hadoop 和 HDFS 的文档。以下救列举了一系列关于未来探索的学习点:

  • Hadoop Site: The home page for the Apache Hadoop site.
  • Hadoop Wiki: The home page (FrontPage) for the Hadoop Wiki. Unlike the released documentation, which is part of Hadoop source tree, Hadoop Wiki is regularly edited by Hadoop Community.
  • FAQ: The FAQ Wiki page.
  • Hadoop JavaDoc API.
  • Hadoop User Mailing List: user[at]hadoop.apache.org.
  • Explore hdfs-default.xml. It includes brief description of most of the configuration variables available.
  • Hadoop Commands Guide: Hadoop commands usage.

这篇关于HDFS 用户手册的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1039628

相关文章

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节

argodb自定义函数读取hdfs文件的注意点,避免FileSystem已关闭异常

一、问题描述 一位同学反馈,他写的argo存过中调用了一个自定义函数,函数会加载hdfs上的一个文件,但有些节点会报FileSystem closed异常,同时有时任务会成功,有时会失败。 二、问题分析 argodb的计算引擎是基于spark的定制化引擎,对于自定义函数的调用跟hive on spark的是一致的。udf要通过反射生成实例,然后迭代调用evaluate。通过代码分析,udf在

【hadoop Sqoop】Sqoop从mysql导数据到hdfs

1.下载sqoop安装包 wget https://mirrors.tuna.tsinghua.edu.cn/apache/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz 2.解压安装包 tar -xzvf /sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz 3.配置hadoop mv s

【Hadoop|HDFS篇】NameNode和SecondaryNameNode

1. NN和2NN的工作机制 思考:NameNode中的元数据是存储在哪里的? 首先,我们做个假设,如果存储在NameNode节点的磁盘中,因为经常需要进行随机访 问,还有响应客户请求,必然是效率过低。因此,元数据需要存放在内存中。但如果只存在 内存中,一旦断电,元数据丢失,整个集群就无法工作了。因此产生在磁盘中备份元数据的 Fslmage。 这样又会带来新的问题,当在内存中的元数据更新时,如

【Hadoop|HDFS篇】DataNode

1. DataNode的工作机制 1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。 2)DataNode启动后向NameNode注册,通过后,周期性(6h)的向NameNode上报所有块信息。 DN向NN汇报当前解读信息的时间间隔,默认6小时。 DN扫描自己节点块信息列表的时间,默认为

Flink读取kafka数据并以parquet格式写入HDFS

《2021年最新版大数据面试题全面开启更新》 《2021年最新版大数据面试题全面开启更新》 大数据业务场景中,经常有一种场景:外部数据发送到kafka中,flink作为中间件消费kafka数据并进行业务处理;处理完成之后的数据可能还需要写入到数据库或者文件系统中,比如写入hdfs中; 目前基于spark进行计算比较主流,需要读取hdfs上的数据,可以通过读取parquet:spark.read

MySQL Binlog同步HDFS的方案

这个问题我想只要是在做数据开发的,有一定数据实时性要求、需要做数据的增量同步的公司都会遇到。 19年的时候我曾经写过一点canal的文章。 现在你只要看这个文章就可以了。 这篇文章是一个读者推荐给我的,原地址:https://dwz.cn/XYdYpNiI,作者:混绅士 我对其中的一些内容做了修改。 关系型数据库和Hadoop生态的沟通越来越密集,时效要求也越来越高。本篇就来调研下实时抓取MyS

HDFS读写数据过程原理分析

大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! Hadoop HDFS读写数据过程原理分析 在学习hadoop hdfs的过程中,有很多人在编程实践这块不知道该其实现的原理是什么,为什么通过几十行小小的代码就可以实现对hdfs的数据的读写。 在下面的介绍中会详细的说明该其过程实现的原理(图片选自中国大学MOOC[大数据技术原理与应用]课