翻译: http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html
版本:2.9.0
- Purpose
- Overview
- Prerequisites
- Web Interface
- Shell Commands
- Secondary NameNode
- Checkpoint Node
- Backup Node
- Import Checkpoint
- Balancer
- Rack Awareness
- Safemode
- fsck
- fetchdt
- Recovery Mode
- Upgrade and Rollback
- DataNode Hot Swap Drive
- File Permissions and Security
- Scalability
- Related Documentation
目的
本文档是使用Hadoop分布式文件系统(HDFS)的用户的起点,既可以作为Hadoop集群的一部分,也可以作为独立的通用分布式文件系统。虽然HDFS被设计可以在许多环境中“正常工作”,但HDFS的知识可以极大地帮助您在特定群集上进行配置改进和诊断。
概观
HDFS是Hadoop应用程序使用的主要分布式存储。HDFS集群主要由管理文件系统元数据的NameNode和存储实际数据的DataNode组成。HDFS体系结构指南详细介绍了HDFS。本用户指南主要处理用户和管理员与HDFS群集的交互。HDFS体系结构图描述了NameNode,DataNode和客户端之间的基本交互。客户端联系NameNode获取文件或文件修改的元数据,然后直接与DataNode进行实际的文件I / O。
以下是许多用户可能感兴趣的一些显着特性。
Hadoop,包含HDFS,非常适合使用商用硬件进行分布式存储和分布式处理。它具有容错性,可扩展性,并且非常易于扩展。MapReduce以其简单和适用于大量分布式应用程序而闻名,是Hadoop不可分割的一部分。
HDFS具有高度可配置性,其默认配置非常适合许多安装。大多数情况下,配置只针对非常大的群集需要进行调整。
Hadoop使用Java编写,在所有主要平台上受支持。
Hadoop支持类似shell的命令来直接与HDFS交互。
NameNode和Datanodes内置了Web服务器,可以轻松检查群集的当前状态。
-
HDFS中定期实施新功能和改进。以下是HDFS中有用功能的一个子集:
- 文件权限和认证。
- 机架感知:在调度任务和分配存储时考虑节点的物理位置。
- Safemode:用于维护的管理模式。
- fsck:用于诊断文件系统健康状况的实用程序,用于查找丢失的文件或块。
- fetchdt:用于获取DelegationToken并将其存储在本地系统文件中的实用程序。
- 平衡器:当数据不均匀分布在DataNode中时平衡集群的工具。
- 升级和回滚:软件升级后,如果出现意外问题,可以回滚到升级之前的状态。
- Secondary NameNode:执行名称空间的定期检查点,并有助于将包含HDFS修改日志的文件的大小保持在NameNode的特定限制内。
- 检查点节点:执行名称空间的定期检查点,最大限度地减少存储在NameNode中的日志大小。替换之前由Secondary NameNode的角色,但尚未加强战斗力。NameNode同时允许多个Checkpoint节点,只要没有备份节点向系统注册即可。
- 备份节点:对检查点节点的扩展。除了检查点之外,它还接收来自NameNode的编辑流并维护在内存中的名称空间副本,该副本始终与活动的NameNode命名空间状态同步。一次只能向NameNode注册一个备份节点。
先决条件
以下文档介绍了如何安装和设置Hadoop集群:
本文档的其余部分假定用户能够设置并运行至少一个DataNode的HDFS。就本文档而言,NameNode和DataNode都可以在同一台物理机器上运行。
Web接口
NameNode和DataNode各自运行一个内部Web服务器,以显示有关集群当前状态的基本信息。使用默认配置,NameNode首页位于 http://namenode-name:50070/。它列出了群集中的DataNode和群集的基本统计信息。Web界面也可用于浏览文件系统(使用NameNode首页上的“Browse the file system”链接)。
Shell命令
Hadoop包含各种类似shell的命令,可直接与Hadoop支持的HDFS和其他文件系统进行交互。命令 bin/hdfs dfs -help 列出了Hadoop shell支持的命令。此外,命令 bin/hdfs dfs -help command-name 显示更详细的命令帮助。这些命令支持大多数正常的文件系统操作,如复制文件,更改文件权限等。它还支持一些HDFS特定操作,如更改文件复制。有关更多信息,请参阅文件系统Shell指南。
DFSAdmin命令
bin/hdfs dfsadmin 命令支持一些HDFS管理相关的操作。bin/hdfs dfsadmin -help 命令列出当前支持的所有命令。例如:
-report :报告HDFS的基本统计数据。NameNode首页上也提供了这些信息中的一部分。
-safemode :虽然通常不需要,管理员可以手动输入或离开安全模式。
-finalizeUpgrade :删除上次升级期间所做的群集的先前备份。
-refreshNodes :使用允许连接到namenode的一组datanodes更新namenode。默认情况下,Namenodes会重新读取由dfs.hosts, dfs.hosts.exclude 定义的文件中的数据。dfs.hosts定义的主机是指属于集群部分的节点, 只有在其中的主机才允许注册给namenode。 dfs.hosts.exclude 中的条目 是需要停用的datanode。或者,如果<dfs.namenode.hosts.provider.classname设置为 org.apache.hadoop.hdfs.server.blockmanagement.CombinedHostFileManager,所有包含和排除主机都在由 dfs.hosts 文件定义的JSON中指定 。当所有副本都复制到其他数据节点时,Datanodes完成停用。退役的节点不会自动关闭,也不会写入新副本。
-printTopology :打印群集的拓扑。显示机架和datanode树。
有关命令用法,请参阅dfsadmin。
Secondary NameNode
The NameNode stores modifications to the file system as a log appended to a native file system file, edits. When a NameNode starts up, it reads HDFS state from an image file, fsimage, and then applies edits from the edits log file. It then writes new HDFS state to the fsimage and starts normal operation with an empty edits file. Since NameNode merges fsimage and edits files only during start up, the edits log file could get very large over time on a busy cluster. Another side effect of a larger edits file is that next restart of NameNode takes longer.
The secondary NameNode merges the fsimage and the edits log files periodically and keeps edits log size within a limit. It is usually run on a different machine than the primary NameNode since its memory requirements are on the same order as the primary NameNode.
The start of the checkpoint process on the secondary NameNode is controlled by two configuration parameters.
dfs.namenode.checkpoint.period, set to 1 hour by default, specifies the maximum delay between two consecutive checkpoints, and
dfs.namenode.checkpoint.txns, set to 1 million by default, defines the number of uncheckpointed transactions on the NameNode which will force an urgent checkpoint, even if the checkpoint period has not been reached.
The secondary NameNode stores the latest checkpoint in a directory which is structured the same way as the primary NameNode’s directory. So that the check pointed image is always ready to be read by the primary NameNode if necessary.
有关命令用法,请参阅secondarynamenode。
检查点节点
NameNode使用两个文件来保存它的名称空间:fsimage,它是命名空间和编辑的最新检查点; edits log ,是自检查点以来名称空间更改的日志(日志)。当NameNode启动时,它会合并fsimage和edits日志以提供文件系统元数据的最新视图。NameNode然后用新的HDFS状态覆盖fsimage并开始一个新的编辑日志。
检查点节点定期创建名称空间的检查点。它从活动的NameNode下载fsimage和编辑log,在本地合并它们,并将新fsimage上传回活动的NameNode。Checkpoint节点通常运行在与NameNode不同的机器上,因为它的内存需求与NameNode的相同。检查点节点由配置文件中指定的节点上的 bin/hdfs namenode -checkpoint 启动。
Checkpoint(或Backup)节点及其相应的Web界面的位置通过dfs.namenode.backup.address 和 dfs.namenode.backup.http-address 配置变量进行配置。
检查点节点上的检查点进程的启动由两个配置参数控制。
dfs.namenode.checkpoint.period 默认设置为1小时,指定两个连续检查点之间的最大延迟
dfs.namenode.checkpoint.txns 默认设置为1百万,它定义了NameNode上未经检查点的事务的数量,这将强制紧急检查点,即使尚未达到检查点周期。
Checkpoint节点将最新的检查点存储在与NameNode的目录结构相同的目录中。这允许检查点映像在必要时始终可供NameNode读取。请参阅导入检查点。
可以在群集配置文件中指定多个检查点节点。
有关命令用法,请参阅namenode。
备份节点
备份节点提供与检查点节点相同的检查点功能,其在内存中维护着与活动NameNode状态相同的文件副本。除了接受来自NameNode的文件系统编辑的日志流并将其保存到磁盘之外,备份节点还将这些编辑应用到它自己的内存中的名称空间副本中,从而创建名称空间的备份。
备份节点不需要从活动的NameNode下载fsimage和编辑文件以创建检查点,因为检查点节点或Secondary NameNode会需要该检查点,因为它的内存中已经具有最新的命名空间状态。备份节点检查点进程效率更高,因为它只需将名称空间保存到本地fsimage文件并重置编辑log。
由于备份节点在内存中维护名称空间的副本,因此其RAM要求与NameNode相同。
NameNode一次支持一个备份节点。如果正在使用“备份”节点,则不会使用任何检查点节点。将来会支持同时使用多个备份节点。
备份节点的配置方式与检查点节点相同。它以 bin/hdfs namenode -backup 命令启动。
备份(或检查点)节点及其附带的Web界面的位置通过dfs.namenode.backup.address和dfs.namenode.backup.http-address配置变量进行配置。
“备份”节点的运用,可使NameNode不使用持久性存储的选项,并将所有责任用于将名称空间的状态保留到备份节点。为此,请使用 -importCheckpoint 选项启动NameNode ,并不需要为NameNode配置指定dfs.namenode.edits.dir持久存储目录。
有关创建备份节点和检查点节点的动机的完整讨论,请参阅HADOOP-4539。有关命令用法,请参阅namenode。
导入检查点
如果所有的image和编辑log文件都丢失,则可以将最新的检查点导入到NameNode。为了做到这一点,应该:
创建一个dfs.namenode.name.dir 配置变量中指定的空目录;
指定检查点目录 dfs.namenode.checkpoint.dir ;
并使用 -importCheckpoint 选项启动NameNode 。
NameNode将从 dfs.namenode.checkpoint.dir 目录中上传检查点,然后将其保存到 dfs.namenode.name.dir中。如果在 dfs.namenode.name.dir中包含合法image,则NameNode将失败。NameNode验证 dfs.namenode.checkpoint.dir 中的image是否一致,但不以任何方式修改它。
有关命令用法,请参阅namenode。
平衡器
HDFS数据可能并不总是统一放置在DataNode中。一个常见的原因是将新的DataNode添加到现有群集。在放置新块(文件的数据存储为一系列块)时,NameNode会在选择DataNode接收这些块之前考虑各种参数。其中一些考虑因素是:
正在写入块的节点上保留块的一个副本。
需要在机架间传播不同的副本,以便群集可以在整个机架丢失的情况下生存下来。
其中一个副本通常与写入文件的节点放在同一个机架上,以便减少跨机架网络I / O。
将HDFS数据统一分布在集群中的DataNodes中。
由于多种竞争考虑因素,数据可能不会平均放置在DataNodes中。HDFS为管理员提供了一个工具,用于分析整个数据节点上的数据块位置和重平衡数据。HADOOP-1652提供简要的平衡器管理员指南。
有关命令用法,请参阅balancer。
机架意识
HDFS群集可以识别放置每个节点的机架的拓扑。配置此拓扑以优化数据容量和使用率非常重要。有关更多详细信息,请检查通用文档中的机架感知。
安全模式
在启动期间,NameNode从fsimage和编辑日志文件中加载文件系统状态。然后等待DataNodes报告其块,以便它不会过早地开始复制块,尽管群集中已经存在足够的副本。在此期间,NameNode保持安全模式。NameNode的安全模式本质上是HDFS群集的只读模式,它不允许对文件系统或块进行任何修改。通常,NameNode会在DataNodes报告大多数文件系统块可用后自动离开Safemode。如果需要,可以使用bin/hdfs dfsadmin -safemode 命令显式地将HDFS置于安全<tt>模式</tt>。NameNode首页显示Safemode是打开还是关闭。JavaDoc for可以更详细地描述和配置<tt>setSafeMode()</tt>。
fsck
HDFS支持fsck命令来检查各种不一致情况。它用于报告各种文件的问题,例如,缺少文件块或未复制块。与原生文件系统的传统fsck实用程序不同,此命令不会更正它检测到的错误。通常NameNode会自动纠正大部分可恢复的故障。默认情况下,fsck会忽略打开的文件,但会提供一个选项来在检测所有的文件。HDFS fsck命令不是Hadoop shell命令。它可以作为 bin/hdfs fsck 运行。有关命令用法,请参阅fsck。fsck可以在整个文件系统或文件的子集上运行。
fetchdt
HDFS支持fetchdt命令来获取授权令牌并将其存储在本地系统的文件中。此令牌可用来从非安全客户端访问服务器(例如NameNode)。程序使用RPC或HTTPS(通过Kerberos)获取令牌,因此要求Kerberos凭证在运行前存在(运行kinit以获取凭证)。HDFS fetchdt命令不是Hadoop shell命令。它可以作为bin/hdfs fetchdt DTfile 运行 。获得令牌之后,可以将令牌存放在<tt>HADOOP_TOKEN_FILE_LOCATION</tt>环境变量指向位置。有关命令用法,请参阅fetchdt命令。
恢复模式
通常,您将配置多个元数据存储位置。然后,如果一个存储位置损坏,则可以从其他存储位置之一读取元数据。
但是,如果可用的唯一存储位置已损坏,该怎么办?在这种情况下,有一种称为恢复模式的特殊NameNode启动模式,可以让您恢复大部分数据。
您可以像恢复模式那样启动NameNode:namenode -recover
在恢复模式下,NameNode将在命令行中交互式地提示您可以采取哪些行动来恢复数据。
如果您不想提示,可以提供<tt>-force</tt>选项。该选项将强制恢复模式始终选择第一个选项。通常情况下,这将是最合理的选择。
由于恢复模式可能会导致数据丢失,因此在使用之前,应始终备份您的编辑日志和fsimage。
升级和回滚
当Hadoop在现有集群上升级时,与任何软件升级一样,可能会出现新的错误或不兼容的更改,这些更改会影响现有应用程序,并且以前未发现。在任何非平凡的HDFS安装中,不能丢失任何数据,更不要说从头开始重新启动HDFS。HDFS允许管理员返回到早期版本的Hadoop,并将群集回滚到升级前的状态。在Hadoop Upgrade Wiki页面中更详细地介绍了HDFS升级。HDFS一次只能有一个这样的备份。在升级之前,管理员需要使用bin/hadoop dfsadmin -finalizeUpgrade 命令删除现有备份。以下简要介绍典型的升级过程:
在升级Hadoop软件之前,请确定是否存在现有备份。
停止集群并分发新版本的Hadoop。
使用<tt>-upgrade</tt>选项运行新版本(bin/start-dfs.sh -upgrade).。
大多数时候,群集工作得很好。一旦新的HDFS被认为运行良好(可能在运行几天后),最终确定升级。请注意,在群集完成之前,删除升级之前存在的文件不会释放DataNode上的实际磁盘空间。
-
如果需要回到旧版本,
- 停止集群并分发早期版本的Hadoop。
- 在namenode上运行rollback命令(<tt>bin / hdfs namenode -rollback</tt>)。
- 使用回滚选项启动集群。(<tt>sbin / start-dfs.sh -rollback</tt>)。
升级到HDFS的新版本时,有必要重新命名或删除在新版本HDFS中保留的任何路径。如果NameNode在升级过程中遇到保留路径,它将打印如下所示的错误:
/.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.
指定-upgrade -renameReserved [optional key-value pairs] 使NameNode自动重命名启动期间找到的任何保留路径。例如,要将名为<tt>.snapshot的</tt>所有路径重命名为<tt>.my-snapshot</tt>并将<tt>.reserved</tt>重命名为<tt>.my-reserved</tt>,用户将指定 -upgrade -renameReserved .snapshot=.my-snapshot,.reserved=.my-reserved.
如果没有使用 -renameReserved ,则NameNode将后缀为 .<LAYOUT-VERSION>.UPGRADE_RENAMED ,例如.snapshot.-51.UPGRADE_RENAMED.
这个重命名过程有一些注意事项。如果可能的话,建议在升级之前首先使用 hdfs dfsadmin -saveNamespace。这是因为如果编辑日志操作引用自动重命名文件的目标,则可能会导致数据不一致。
DataNode热插拔驱动器
Datanode支持热插拔驱动器。用户可以在不关闭DataNode的情况下添加或替换HDFS数据卷。以下简要介绍典型的热插拔驱动程序:
如果有新的存储目录,用户应格式化它们并适当地挂载它们。
用户更新DataNode配置 dfs.datanode.data.dir 以反映将被主动使用的数据卷目录。
用户运行dfsadmin -reconfig datanode HOST:PORT start 启动重新配置过程。用户可以使用 dfsadmin -reconfig datanode HOST:PORT status 查询重新配置任务的运行状态。
重新配置任务完成后,用户可以安全umount 已删除的数据卷目录并物理删除磁盘。
文件权限和安全性
文件权限的设计与其他熟悉的平台(如Linux)上的文件权限类似。目前,安全性仅限于简单的文件权限。启动NameNode的用户被视为HDFS的超级用户。未来的HDFS版本将支持Kerberos等网络认证协议,用于用户认证和数据传输加密。详细信息在“权限指南”中讨论。
可扩展性
Hadoop目前可运行在具有数千个节点的群集上。该PoweredBy Wiki页面列出了一些在大型集群部署的Hadoop的组织。HDFS每个集群都有一个NameNode。目前,NameNode上的可用内存总量是主要的可伸缩性限制。在非常大的群集上,增加HDFS中存储的文件的平均大小有助于增加群集大小,而不会增加NameNode上的内存要求。默认配置可能不适合非常大的群集。该FAQ Wiki页面列出了用于大型Hadoop集群的配置改进。
相关文档
本用户指南是使用HDFS的一个很好的起点。在用户指南不断改进的同时,还有大量有关Hadoop和HDFS的文档。以下列表是进一步探索的起点:
- Hadoop站点:Apache Hadoop站点的主页。
- Hadoop Wiki:Hadoop Wiki的主页(FrontPage)。与作为Hadoop源代码树一部分的发布文档不同,Hadoop Wiki定期由Hadoop社区编辑。
- FAQ:FAQ Wiki页面。
- Hadoop JavaDoc API。
- Hadoop用户邮件列表:user [at] hadoop.apache.org。
- 探索hdfs-default.xml。它包括对大多数可用配置变量的简要描述。
- HDFS命令指南:HDFS命令的用法。