HDFS用户指南

HDFS用户指南

目的

本文档是使用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和Datanode内置了Web服务器,可以轻松检查群集的当前状态。

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

    <ul><li>
    	<p><span style="color:#000000;"><span style="color:#000000;">文件权限和身份验证。</span></span></p>
    	</li>
    	<li>
    	<p><span style="color:#000000;"><span style="color:#000000;">机架感知:在调度任务和分配存储时考虑节点的物理位置。</span></span></p>
    	</li>
    	<li>
    	<p><span style="color:#000000;"><span style="color:#000000;">安全模式:维护的管理模式。</span></span></p>
    	</li>
    	<li>
    	<p><span style="color:#000000;"><span style="color:#000000;">fsck:用于诊断文件系统运行状况,查找丢失文件或块的实用程序。</span></span></p>
    	</li>
    	<li>
    	<p><span style="color:#000000;"><span style="color:#000000;">fetchdt:用于获取DelegationToken并将其存储在本地系统上的文件中的实用程序。</span></span></p>
    	</li>
    	<li>
    	<p><span style="color:#000000;"><span style="color:#000000;">平衡器:当数据在DataNode之间分布不均匀时,用于平衡群集的工具。</span></span></p>
    	</li>
    	<li>
    	<p><span style="color:#000000;"><span style="color:#000000;">升级和回滚:软件升级后,如果出现意外问题,可以在升级前回滚到HDFS状态。</span></span></p>
    	</li>
    	<li>
    	<p><span style="color:#000000;"><span style="color:#000000;">Secondary NameNode:执行命名空间的定期检查点,并帮助将包含HDFS修改日志的文件大小保持在NameNode的特定限制内。</span></span></p>
    	</li>
    	<li>
    	<p><span style="color:#000000;"><span style="color:#000000;">检查点节点:执行命名空间的定期检查点,并有助于最小化存储在包含HDFS更改的NameNode的日志大小。替换以前由Secondary NameNode填充的角色,但尚未进行战斗强化。只要没有向系统注册备份节点,NameNode就可以同时允许多个Checkpoint节点。</span></span></p>
    	</li>
    	<li>
    	<p><span style="color:#000000;"><span style="color:#000000;">备份节点:Checkpoint节点的扩展。除了检查点之外,它还从NameNode接收编辑流并维护其自己的命名空间的内存中副本,该副本始终与活动的NameNode名称空间状态同步。一次只能向NameNode注册一个备份节点。</span></span></p>
    	</li>
    </ul></li>
    

先决条件

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

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

Web界面

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

Shell命令

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

DFSAdmin命令

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

  • -report:报告HDFS的基本统计信息。其中一些信息也可在NameNode首页上找到。

  • -safemode:虽然通常不需要,但管理员可以手动输入或离开Safemode。

  • -finalizeUpgrade:删除上次升级期间创建的集群的先前备份。

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

  • -printTopology:打印集群的拓扑。显示由NameNode查看的附加到轨道的机架和数据节点树。

有关命令用法,请参阅dfsadmin

Secondary NameNode

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

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

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

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

  • dfs.namenode.checkpoint.txns,默认设置为1百万,定义NameNode上未经检查的事务的数量,这将强制紧急检查点,即使尚未达到检查点周期。

辅助NameNode将最新检查点存储在一个目录中,该目录的结构与主NameNode的目录相同。因此,如果需要,检查指向图像始终可以由主NameNode读取。

有关命令用法,请参阅secondarynamenode

检查点节点

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

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

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

Checkpoint节点上检查点进程的开始由两个配置参数控制。

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

  • dfs.namenode.checkpoint.txns,默认设置为1百万,定义NameNode上未经检查的事务的数量,这将强制紧急检查点,即使尚未达到检查点周期。

Checkpoint节点将最新的检查点存储在与NameNode的目录结构相同的目录中。这允许检查点图像始终可供NameNode读取(如有必要)。请参阅导入检查点。

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

有关命令用法,请参阅namenode

备份节点

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

备份节点不需要从活动NameNode下载fsimage和编辑文件,以便创建检查点,这与Checkpoint节点或Secondary NameNode一样,因为它已经具有命名空间状态的最新状态在记忆中。备份节点检查点进程更高效,因为它只需要将命名空间保存到本地fsimage文件中并重置编辑。

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

NameNode一次支持一个备份节点。如果正在使用备份节点,则无法注册检查点节点。将来将支持同时使用多个备份节点。

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

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

使用备份节点提供了运行NameNode而没有持久存储的选项,将保留命名空间状态的所有责任委派给备份节点。为此,请使用-importCheckpoint选项启动NameNode ,并为NameNode配置指定类型为edits 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

Balancer

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

  • 将块中的一个副本保留在与写入块的节点相同的节点上的策略。

  • 需要在机架上传播块的不同副本,以便群集可以在整个机架丢失时存活。

  • 其中一个副本通常与写入文件的节点放在同一个机架上,以便减少跨机架网络I / O.

  • 在群集中的DataNode上统一传播HDFS数据。

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

有关命令用法,请参阅balancer

机架感知

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

安全模式

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

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运行。获得令牌后,您可以通过将HADOOP_TOKEN_FILE_LOCATION环境变量指向委托令牌文件来运行HDFS命令而无需Kerberos票证。有关命令用法,请参阅fetchdt命令。

恢复模式

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

但是,如果可用的唯一存储位置已损坏,您可以做些什么?在这种情况下,有一个名为恢复模式的特殊NameNode启动模式,可以让您恢复大部分数据。

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

在恢复模式下,NameNode将在命令行上以交互方式提示您可以采取的恢复数据的可能操作过程。

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

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

升级和回滚

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

  • 在升级Hadoop软件之前,请确定是否存在现有备份。

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

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

  • 大多数时候,集群工作得很好。一旦认为新的HDFS运行良好(可能在运行几天后),最终完成升级。请注意,在群集完成之前,删除升级之前存在的文件不会释放DataNode上的实际磁盘空间。

  • 如果需要返回旧版本,

    <ul><li>
    	<p><span style="color:#000000;"><span style="color:#000000;">停止集群并分发早期版本的Hadoop。</span></span></p>
    	</li>
    	<li>
    	<p><span style="color:#000000;"><span style="color:#000000;">在namenode上运行rollback命令(bin/hdfs namenode -rollback)。</span></span></p>
    	</li>
    	<li>
    	<p><span style="color:#000000;"><span style="color:#000000;">使用rollback选项启动集群。(sbin/start-dfs.sh -rollback)。</span></span></p>
    	</li>
    </ul></li>
    

升级到新版本的HDFS时,必须重命名或删除新版HDFS中保留的任何路径。如果NameNode在升级期间遇到保留路径,则会输出如下错误:

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

指定-upgrade -renameReserved [可选键值对]会使NameNode自动重命名在启动期间找到的任何保留路径。例如,重命名命名所有路径.snapshot到。我的快照和.reserved到。我的保留,用户将指定-upgrade -renameReserved .snapshot =。我的快照,.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状态来查询重新配置任务的运行状态。

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

文件权限和安全性

文件权限的设计类似于Linux等其他熟悉平台上的文件权限。目前,安全性仅限于简单文件权限。启动NameNode的用户被视为HDFS的超级用户。未来版本的HDFS将支持Kerberos等网络身份验证协议,用于用户身份验证和数据传输加密。“权限指南”中讨论了详细信息。

可扩展性

Hadoop目前在具有数千个节点的集群上运行。该PoweredBy Wiki页面列出了一些在大型集群部署的Hadoop的组织。HDFS为每个群集都有一个NameNode。目前,NameNode上可用的总内存是主要的可扩展性限制。在非常大的群集上,增加存储在HDFS中的文件的平均大小有助于增加群集大小,而不会增加NameNode的内存要求。默认配置可能不适合非常大的集群。该FAQ Wiki页面列出了用于大型Hadoop集群的配置改进。

相关文档

本用户指南是使用HDFS的良好起点。虽然用户指南不断改进,但有大量关于Hadoop和HDFS的文档。以下列表是进一步探索的起点:

HDFS用户指南

猜你喜欢

转载自blog.csdn.net/weixin_42868638/article/details/89351125
今日推荐