HOME> 战力提升> 用户指南

用户指南

战力提升 2026-01-04 15:16:55
目的 总览 先决条件 网页界面 Shell命令 DFSAdmin命令 次要名称节点 检查点节点 备份节点 导入检查点 平衡器 机架意识 安全模式 fsck 提取 恢复模...

目的

总览

先决条件

网页界面

Shell命令

DFSAdmin命令

次要名称节点

检查点节点

备份节点

导入检查点

平衡器

机架意识

安全模式

fsck

提取

恢复模式

升级和回滚

DataNode热插拔驱动器

文件权限和安全性

可扩展性

相关文件

目的

本文档是使用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支持类外壳命令直接与HDFS进行交互。

NameNode和Datanodes内置了Web服务器,可轻松检查群集的当前状态。

HDFS会定期实施新功能和改进。以下是HDFS中有用功能的子集:

文件权限和身份验证。

机架感知:在计划任务和分配存储时考虑节点的物理位置。

安全模式:一种维护的管理模式。

fsck:用于诊断文件系统运行状况,查找丢失的文件或块的实用程序。

fetchdt:一种实用程序,用于获取PrincipledToken并将其存储在本地系统上的文件中。

平衡器:当数据在数据节点之间分布不均时,用于平衡集群的工具。

升级和回滚:软件升级后,如果出现意外问题,可以在升级之前回滚到HDFS的状态。

次要NameNode:执行命名空间的定期检查点,并有助于将包含HDFS修改日志的文件的大小保持在NameNode的某些限制内。

Checkpoint节点:执行命名空间的定期检查点,并有助于最小化存储在NameNode上的日志的大小,该日志包含对HDFS的更改。替换先前由次要NameNode填充的角色,尽管尚未进行战斗加固。只要没有在系统中注册任何备份节点,NameNode即可同时允许多个Checkpoint节点。

备份节点:Checkpoint节点的扩展。除了检查点之外,它还从NameNode接收编辑流,并维护其自己的命名空间在内存中的副本,该副本始终与活动的NameNode命名空间状态保持同步。一次只能向NameNode注册一个备份节点。

先决条件

以下文档描述了如何安装和设置Hadoop集群:

首次用户的单节点设置。

大型分布式群集的群集设置。

本文档的其余部分假定用户能够使用至少一个DataNode设置和运行HDFS。为了本文档的目的,NameNode和DataNode都可以在同一台物理计算机上运行。

网页界面

NameNode和DataNode各自运行一个内部Web服务器,以显示有关群集当前状态的基本信息。使用默认配置,NameNode主页位于http:// namenode-name:9870 /。它列出了集群中的DataNodes和集群的基本统计信息。Web界面也可以用于浏览文件系统(使用NameNode主页上的“浏览文件系统”链接)。

Shell命令

Hadoop包含各种类似于Shell的命令,这些命令可直接与Hadoop支持的HDFS和其他文件系统进行交互。命令bin / hdfs dfs -help列出了Hadoop shell支持的命令。此外,命令bin / hdfs dfs -help命令名称显示命令的更多详细帮助。这些命令支持大多数常规文件系统操作,例如复制文件,更改文件权限等。它还支持一些HDFS特定操作,例如更改文件的复制。有关更多信息,请参见《文件系统外壳指南》。

DFSAdmin命令

该斌/ HDFS dfsadmin命令支持一些HDFS管理相关的操作。该斌/ dfsadmin -help HDFS命令列出当前支持的所有命令。例如:

-report:报告HDFS的基本统计信息。这些信息中的某些信息也可以在NameNode主页上找到。

-safemode:尽管通常不需要,但是管理员可以手动输入或退出Safemode。

-finalizeUpgrade:删除上一次升级过程中对集群所做的先前备份。

-refreshNodes:使用允许连接到名称节点的一组数据节点来更新名称节点。默认情况下,通过Namenodes定义的文件中重新读取数据节点的主机名dfs.hosts,dfs.hosts.exclude中定义的主机dfs.hosts是属于集群的数据节点。如果dfs.hosts中有条目,则只允许其中的主机向namenode注册。dfs.hosts.exclude中的条目是需要停用的数据节点。或者,如果dfs.namenode.hosts.provider.classname设置为org.apache.hadoop.hdfs.server.blockmanagement.CombinedHostFileManager,所有包含和排除主机均在dfs.hosts定义的JSON文件中指定。当数据节点中的所有副本都复制到其他数据节点时,数据节点将完成退役。退役的节点不会自动关闭,也不会选择用于写入新副本。

-printTopology:打印集群的拓扑。显示一个由名称节点查看的连接到轨道的机架树和数据节点树。

有关命令用法,请参见dfsadmin。

次要名称节点

NameNode将对日志文件的修改存储为对文件系统的修改,作为附加到本机文件系统文件的日志进行编辑。NameNode启动时,它将从映像文件fsimage中读取HDFS状态,然后从编辑日志文件中应用编辑。然后,它将新的HDFS状态写入fsimage,并使用空的edits文件开始正常操作。由于NameNode仅在启动期间合并fsimage并编辑文件,因此随着时间的推移,繁忙的群集上的编辑日志文件可能会变得很大。较大的编辑文件的另一个副作用是,NameNode的下一次重新启动花费的时间更长。

辅助NameNode定期合并fsimage和edits日志文件,并将edits日志大小保持在限制范围内。它通常在与主要NameNode不同的机器上运行,因为其内存需求与主要NameNode的顺序相同。

辅助NameNode上检查点进程的开始由两个配置参数控制。

dfs.namenode.checkpoint.period,默认设置为1小时,指定两个连续检查点之间的最大延迟,并且

dfs.namenode.checkpoint.txns(默认设置为100万)定义了NameNode上的非检查点事务数,即使尚未达到检查点期限,该事务也会强制执行紧急检查点。

次要NameNode将最新的检查点存储在目录中,该目录的结构与主要NameNode的目录相同。因此,如有必要,主NameNode始终可以准备好检查点图像。

有关命令用法,请参见secondarynamenode。

检查点节点

NameNode使用以下两个文件来保留其名称空间:fsimage,它是名称空间的最新检查点,并进行编辑;自检查点以来,名称空间更改的日志(日志)。当NameNode启动时,它将合并fsimage并编辑日志以提供文件系统元数据的最新视图。然后,NameNode用新的HDFS状态覆盖fsimage并开始新的编辑日志。

Checkpoint节点定期创建名称空间的检查点。它从活动的NameNode下载fsimage并进行编辑,将其本地合并,然后将新图像上传回活动的NameNode。Checkpoint节点通常在与NameNode不同的机器上运行,因为其内存需求与NameNode的顺序相同。Checkpoint节点由配置文件中指定的节点上的bin / hdfs namenode -checkpoint启动。

通过dfs.namenode.backup.address和dfs.namenode.backup.http-address配置变量配置Checkpoint(或Backup)节点及其随附的Web界面的位置。

Checkpoint节点上的checkpoint进程的启动由两个配置参数控制。

dfs.namenode.checkpoint.period,默认设置为1小时,指定两个连续检查点之间的最大延迟

dfs.namenode.checkpoint.txns(默认设置为100万)定义了NameNode上的非检查点事务数,即使尚未达到检查点期限,该事务也会强制执行紧急检查点。

Checkpoint节点将最新的检查点存储在与NameNode目录相同的目录中。如果需要的话,这可以使NameNode可以随时使用检查点图像。请参阅导入检查点。

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

有关命令用法,请参见namenode。

备份节点

备份节点提供与检查点节点相同的检查点功能,并维护始终与活动NameNode状态保持同步的文件系统名称空间的内存中最新副本。除了从NameNode接受文件系统编辑的日志流并将其持久保存到磁盘之外,Backup节点还将这些编辑应用到其在内存中的命名空间的副本中,从而创建了命名空间的备份。

备份节点不需要从活动的NameNode下载fsimage并编辑文件即可创建检查点,就像Checkpoint节点或Secondary NameNode所要求的那样,因为它已经具有名称空间状态的最新状态。在记忆中。备份节点检查点过程效率更高,因为它仅需要将名称空间保存到本地fsimage文件中并重置编辑。

由于备份节点在内存中维护名称空间的副本,因此其RAM要求与NameNode相同。

NameNode一次支持一个备份节点。如果使用备份节点,则不能注册任何Checkpoint节点。将来将支持同时使用多个备份节点。

备份节点的配置方式与检查点节点相同。它以bin / hdfs namenode -backup开头。

备份(或检查点)节点及其随附的Web界面的位置是通过dfs.namenode.backup.address和dfs.namenode.backup.http-address配置变量配置的。

使用Backup节点提供了在没有持久性存储的情况下运行NameNode的选项,将将名称空间状态持久化的所有责任委托给了Backup节点。为此,请使用-importCheckpoint选项启动NameNode ,并为NameNode配置不指定类型为dfs.namenode.edits.dir的持久性存储目录。

有关创建备份节点和检查点节点背后动机的完整讨论,请参见HADOOP-4539。有关命令用法,请参见namenode。

导入检查点

如果图像的所有其他副本和编辑文件都丢失,则可以将最新的检查点导入到NameNode中。为了做到这一点,应该:

创建一个在dfs.namenode.name.dir配置变量中指定的空目录;

在配置变量dfs.namenode.checkpoint.dir中指定检查点目录的位置;

并使用-importCheckpoint选项启动NameNode 。

NameNode将从dfs.namenode.checkpoint.dir目录上载检查点,然后将其保存到dfs.namenode.name.dir中设置的NameNode目录中。如果dfs.namenode.name.dir中包含合法映像,则NameNode将失败。NameNode验证dfs.namenode.checkpoint.dir中的映像是否一致,但不会以任何方式对其进行修改。

有关命令用法,请参见namenode。

平衡器

HDFS数据不一定总是在整个DataNode上均匀地放置。一个常见的原因是向现有群集中添加了新的DataNode。在放置新块(文件数据存储为一系列块)时,NameNode在选择DataNode接收这些块之前会考虑各种参数。一些注意事项是:

将块的副本之一与写入块的节点保留在同一节点上的策略。

需要在机架上散布块的不同副本,以便群集可以在整个机架丢失时幸免。

复制副本之一通常与写入文件的节点放在同一机架上,这样可以减少跨机架网络的I / O。

将HDFS数据均匀地分布在集群中的DataNode上。

出于多种竞争考虑,数据可能无法在整个DataNode上统一放置。HDFS为管理员提供了一个工具,可以分析整个DataNode上的块放置和重新平衡数据。HADOOP-1652上提供了平衡器的简短管理员指南。

有关命令用法,请参见balancer。

机架意识

HDFS集群可以识别放置每个节点的机架的拓扑。配置此拓扑以优化数据容量和使用率很重要。有关更多详细信息,请检查通用文档中的机架识别。

安全模式

在启动过程中,NameNode从fsimage和edits日志文件加载文件系统状态。然后,它等待DataNodes报告其块,以便尽管群集中已经存在足够的副本,它也不会过早开始复制这些块。在此期间,NameNode保持在安全模式。NameNode的安全模式本质上是HDFS群集的只读模式,该模式不允许对文件系统或块进行任何修改。通常,在DataNode报告大多数文件系统块可用之后,NameNode会自动离开安全模式。如果需要,可以使用bin / hdfs dfsadmin -safemode命令将HDFS显式地置于安全模式。NameNode主页显示安全模式是打开还是关闭。作为JavaDoc,维护了更详细的描述和配置,用于setSafeMode()。

fsck

HDFS支持fsck命令来检查各种不一致情况。它设计用于报告各种文件的问题,例如,文件缺少的块或复制不足的块。与用于本地文件系统的传统fsck实用程序不同,此命令不会更正其检测到的错误。通常,NameNode会自动更正大多数可恢复的故障。默认情况下,fsck会忽略打开的文件,但提供了在报告过程中选择所有文件的选项。HDFS fsck命令不是Hadoop Shell命令。它可以作为bin / hdfs fsck运行。有关命令用法,请参见fsck。fsck可以在整个文件系统或一部分文件上运行。

提取

HDFS支持fetchdt命令来获取委托令牌并将其存储在本地系统上的文件中。以后可以使用此令牌从非安全客户端访问安全服务器(例如NameNode)。实用程序使用RPC或HTTPS(通过Kerberos)来获取令牌,因此需要在运行之前提供kerberos票证(运行kinit来获取票证)。HDFS fetchdt命令不是Hadoop Shell命令。它可以作为bin / hdfs fetchdt DTfile运行。获得令牌后,可以通过将HADOOP_TOKEN_FILE_LOCATION环境变量指向委托令牌文件来运行HDFS命令而无需Kerberos票证。有关命令用法,请参见fetchdt命令。

恢复模式

通常,您将配置多个元数据存储位置。然后,如果一个存储位置损坏,则可以从其他存储位置之一读取元数据。

但是,如果仅有的可用存储位置已损坏,该怎么办?在这种情况下,有一种特殊的NameNode启动模式,称为“恢复模式”,可以使您恢复大多数数据。

您可以像这样在恢复模式下启动NameNode:namenode -recover

在恢复模式下,NameNode将在命令行以交互方式提示您有关可以采取哪些措施来恢复数据。

如果您不想被提示,可以给-force选项。此选项将强制恢复模式始终选择第一选项。通常,这将是最合理的选择。

由于恢复模式可能会导致数据丢失,因此在使用编辑日志和fsimage之前,应始终对其进行备份。

升级和回滚

当在现有集群上升级Hadoop以及进行任何软件升级时,可能存在影响现有应用程序的新错误或不兼容的更改,这些错误或不兼容的更改不会在早期发现。在任何不重要的HDFS安装中,都不可以丢失任何数据,更不用说从头开始重新启动HDFS了。HDFS允许管理员返回到Hadoop的早期版本,并将群集回滚到升级之前的状态。HDFS升级在“ Hadoop升级维基”页面中有更详细的描述。HDFS一次可以有一个这样的备份。升级之前,管理员需要使用bin / hadoop dfsadmin -finalizeUpgrade命令删除现有备份。下面简要介绍典型的升级过程:

升级Hadoop软件之前,请完成是否存在现有备份。

停止集群并分发新版本的Hadoop。

使用-upgrade选项运行新版本(sbin / start-dfs.sh -upgrade)。

大多数情况下,群集工作正常。一旦新的HDFS被认为运行良好(可能在运行几天后),请完成升级。请注意,在集群完成之前,删除升级之前存在的文件不会释放DataNodes上的实际磁盘空间。

如果需要返回到旧版本,

停止集群并分发早期版本的Hadoop。

在namenode(bin / hdfs namenode -rollback)上运行rollback命令。

使用回滚选项启动集群。(sbin / start-dfs.sh -rollback)。

升级到新版本的HDFS时,需要重命名或删除新版本的HDFS中保留的所有路径。如果NameNode在升级过程中遇到保留的路径,它将显示如下错误:

在此版本的HDFS中,/.reserved是保留路径,.snapshot是保留路径组件。请回滚并删除或重命名此路径,或者使用-renameReserved [键-值对]选项进行升级,以在升级过程中自动重命名这些路径。

指定-upgrade -renameReserved [可选键-值对]会使NameNode自动重命名启动期间找到的所有保留路径。例如,要将所有名为.snapshot的路径重命名为.my-snapshot并将.reserved重命名为.my-reserved,用户可以指定-upgrade -renameReserved .snapshot = .my-snapshot,.reserved = .my-reserved。

如果未使用-renameReserved指定键值对,则NameNode将使用。 .UPGRADE_RENAMED后缀保留的路径,例如.snapshot.-51.UPGRADE_RENAMED。

重命名过程有一些警告。如果可能,建议在升级之前先使用hdfs dfsadmin -saveNamespace。这是因为,如果编辑日志操作引用自动重命名文件的目的地,则可能导致数据不一致。

DataNode热插拔驱动器

Datanode支持热插拔驱动器。用户可以添加或替换HDFS数据卷,而无需关闭DataNode。以下简要介绍了典型的热插拔驱动器过程:

如果有新的存储目录,则用户应格式化它们并适当地装入它们。

用户更新DataNode配置dfs.datanode.data.dir以反映将被积极使用的数据卷目录。

用户运行dfsadmin -reconfig datanode HOST:PORT start开始重新配置过程。用户可以使用dfsadmin -reconfig datanode HOST:PORT状态来查询重新配置任务的运行状态。

重新配置任务完成后,用户可以安全地卸载已删除的数据卷目录并以物理方式删除磁盘。

文件权限和安全性

文件权限被设计为类似于其他熟悉的平台(如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命令用法。