“本文档作为使用Hadoop分布式文件系统(HDFS)的起点,该系统既可以作为hadoop集群的一部分,也可以作为一个独立的通用分布式文件系统使用。”
以下内容均翻译自官方文档。
11
—
机架感知
HDFS集群可以识别放置每个节点的机架的拓扑结构。为了优化数据容量和使用,配置这个拓扑非常重要。
12
—
安全模式
在启动过程中,NameNode从fsimage和edits日志文件加载文件系统状态。然后等待DataNodes报告它们的块,这样即使集群中已经存在足够的副本,它也不会过早地开始复制这些块。在这段时间内,NameNode处于Safemode。
NameNode的Safemode本质上是HDFS集群的只读模式,它不允许对文件系统或块进行任何修改。
通常NameNode会在DataNodes报告大多数文件系统块都可用后自动退出Safemode。如果需要,可以使用bin/hdfs dfsadmin -safemode命令将HDFS显式设置为Safemode。
通过NameNode首页可以查看Safemode是打开还是关闭。关于setSafeMode()的更详细的描述和配置是通过JavaDoc维护的。
13
—
Fsck命令
HDFS支持fsck命令来检查各种不一致。它是为报告各种文件的问题而设计的,例如,文件丢失块或未充分复制块。
与用于本地文件系统的传统fsck实用程序不同,此命令不会纠正它检测到的错误。通常NameNode会自动纠正大多数可恢复的故障。
默认情况下,fsck忽略打开的文件,但也提供了一个选择所有文件的选项。
HDFS fsck命令不是Hadoop shell命令。它可以作为bin/hdfs fsck运行。有关命令的用法,请参见fsck。fsck可以在整个文件系统上运行,也可以在文件的一个子集上运行。
14
—
Fetchdt命令
HDFS支持通过fetchdt命令来获取Delegation Token并将其存储到本地系统的文件中。稍后可以使用此令牌从非安全客户端访问安全服务器(例如NameNode)。实用程序使用RPC或HTTPS(通过Kerberos)来获取令牌,因此需要在运行之前提供Kerberos tickets(运行kinit以获得tickets)。
HDFS fetchdt命令不是Hadoop shell命令。它可以作为bin/hdfs fetchdt DTfile运行。获得令牌之后,可以在没有Kerberos票据的情况下运行HDFS命令,方法是将HADOOP_TOKEN_FILE_LOCATION环境变量指向delegation token文件。
15
—
恢复模式
通常,您需要配置多个元数据存储位置。如果一个存储位置损坏,您还可以从其他存储位置读取元数据。但是,如果可用的存储位置都损坏了,该怎么办呢?在这种情况下,有一个特殊的NameNode启动模式,称为恢复模式,它允许您恢复大部分数据。
你可以在恢复模式下启动NameNode,就像这样:NameNode - recovery
当处于恢复模式时,NameNode将在命令行交互式地提示您可以采取哪些可能的操作来恢复您的数据。
如果不希望收到提示,可以提供-force选项。此选项将强制恢复模式始终选择第一个选项。一般来说这将是最合理的选择。因为恢复模式可能会导致数据丢失,所以在使用编辑日志和fsimage之前,应该始终备份它们。
16
—
升级和回滚
当Hadoop在现有集群上升级时,与任何软件升级一样,可能存在影响现有应用程序的新bug或不兼容更改,而这些更改之前没有被发现。
在任何重要的HDFS安装中,都不能丢失任何数据,更不用说从头重新启动HDFS了。HDFS允许管理员返回到早期版本的Hadoop,并将集群回滚到升级之前的状态。HDFS升级在Hadoop升级Wiki页面中有更详细的描述。
HDFS同时只能有一个备份。在升级之前,管理员需要使用bin/hadoop dfsadmin -finalizeUpgrade命令删除现有的备份。
下面简单介绍一下典型的升级过程:
在升级Hadoop软件之前,确定是否存在现有的备份;
停止集群并发布新版Hadoop;
运行带有-upgrade选项的新版本(sbin/start-dfs.sh -upgrade);
大多数时候,集群工作得很好。一旦新的HDFS被认为工作良好(可能在运行几天之后),就完成了升级。注意,在集群最终完成之前,删除在升级之前存在的文件不会释放DataNodes上的实际磁盘空间。
如果有必要回到旧版本,
停止集群并分发早期版本的Hadoop;
在namenode上运行rollback命令(bin/hdfs namenode -rollback);
使用rollback选项启动集群。(sbin/start-dfs.sh -rollback)。
当升级到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自动重命名在启动期间发现的所有保留路径.
例如,将所有命名为.snapshot的路径重命名为.my-snapshot和.reserved to。
用户会指定
-upgrade -renameReserved .snapshot=.my-snapshot,
.reserved=.my-reserved。如果没有使用-renameReserved指定键值对,NameNode将在保留路径后面加上
.<LAYOUT-VERSION>.UPGRADE_RENAMED,
例如, .snapshot.-51.UPGRADE_RENAMED。这个重命名过程有一些注意事项。如果可能的话,建议在升级之前先使用hdfs dfsadmin -saveNamespace命令。这是因为如果编辑日志操作指向自动重命名文件的目标,可能会导致数据不一致。
17
—
数据节点热换盘驱动程序
Datanode支持热交换驱动器。用户可以添加或替换HDFS数据卷,而无需关闭DataNode。下面简单介绍一下典型的热换盘驱动程序:
如果有新的存储目录,用户应该格式化它们并适当地挂载它们;
用户更新DataNode配置dfs.datanode.data.dir来表明将被使用的数据卷目录;
用户运行dfsadmin -reconfig datanode HOST:PORT start以启动重新配置过程。用户可以使用dfsadmin -reconfig datanode HOST:PORT status来查询重配置任务的运行状态;
一旦重新配置任务完成,用户就可以安全地对删除的数据卷目录进行umount,并物理地删除磁盘。
18
—
文件权限和安全
文件权限被设计成类似于其他熟悉平台(如Linux)上的文件权限。目前,安全性仅限于简单的文件权限。启动NameNode的用户被视为HDFS的超级用户。HDFS的未来版本将支持Kerberos等网络身份验证协议,用于用户身份验证和数据传输的加密。细节在权限指南中讨论。
19
—
可扩展性
Hadoop目前运行在具有数千个节点的集群上。PoweredBy Wiki页面列出了一些在大型集群上部署Hadoop的组织。HDFS每个集群有一个NameNode。目前NameNode上可用的内存总量是主要的可伸缩性限制。在非常大的集群上,增加存储在HDFS中的文件的平均大小有助于在不增加NameNode上的内存需求的情况下增加集群大小。默认配置可能不适用于非常大的集群。FAQ Wiki页面列出了针对大型Hadoop集群的配置改进建议。
20
—
相关文档
(参见官方文档)




