HDFS Users Guide
综述
HDFS是Hadoop应用程序所使用的主要分布式存储。一个HDFS集群主要有管理文件系统元数据的NameNode和存储真正数据的DataNode组成,HDFS的架构指南详细的描述了HDFS。用户手册主要涉及用户和管理员与HDFS集群的相互作用。HDFS的架构图描述了NameNode,DataNode,Clinets之间的基础交互。Clinets连接到Namenode提供文件元数据和文件修改,并且直接与Datanode完成文件I/O操作。- Hadoop包括HDFS,非常适合使用普通硬件进行分布式存储和分布式处理,其具有高容错性,稳定性,并且非常容易扩展。Mapreduce以大型分布式应用程序设置的简单性和适用性而出名,其是Hadoop的一部分。
- HDFS默认配置的高可配置性适合多种环境安装。 大多数时候,只有非常大的集群才需要调整配置。
- Hadoop由java语言编写,并且被大多数平台支持。
- Hadoop支持类似shell的命令与HDFS进行交互
- NameNode和DataNode都集成在web服务器中,可以很容易的检测当前集群的状态。
- HDFS会定期的新增功能和改进. 以下是HDFS有用的一部分:
- 文件权限和身份认证。
- 机架感知:调度任务和分配存储时候考虑物理节点的位置。
- 安全模式:维护管理模式。
- fsck: 一个用来检测文件系统健康的工具,找到丢失的文件和区块。
- fetchdt: 一个用例获取 DelegationToken 的工具,并将其存在本地文件系统中。
- 重分配: 当数据在Datanode中被不平衡的分配时平衡分配到集群的工具。
- 升级和回滚:在意想不到的问题发生时可以回滚到升级之前的状态。
- Secondary NameNode:周期性的检查命名空间,有助于保持在Namenode上的修改的HDFS日志文件的大小在一定范围内。
- Checkpoint node:定期的检查命名空间以助于缩小在Namenode上的包含HDFS变动的日志文件的大小。
- Backup node: checkpoint的扩展. 除了checkpointing其还可以接受Namenode来的可编辑的数据流并且在内存中维护一份属于自己的namespace, 并且和激活的Namesapce的状态保持同步,只有Backup节点可以和namespace同时注册。
必备条件
以下文档描述了如何安装和配置Hadoop集群:
- Single Node Setup 第一次使用的用户.
- Cluster Setup 大规模分布式用户.
这篇文档其余部分假设读者可以至少在一个节点配置和运行HDFS.达到本文档的目的,NameNode和DataNode可以运行在同一台物理机器上。
Web接口
Shell 命令
Hadoop包含丰富的类似Shell的命令用来直接与HDFS及其他Hadoop支持的文件系统进行交互。命令 bin/hdfs dfs -help 列出了Hadoopshell支持的命令. 并且, 命令 bin/hdfs dfs -help command-name 显示命令的更多详细信息. 这些命令支持大多数的文件系统操作,像复制文件,改变权限,等等。它还支持一些HDFS的特有命令如文件的更改复制。更多的信息请参阅:.
DFSAdmin Command
The bin/hadoop dfsadmin 支持一些HDFS的相关管理操作。bin/hadoop dfsadmin -help 列出了目前所有支持的命令如下:
- -report: 报告HDFS的基础数据统计 ,其中的一些信息在Namenode的首页也可以现实。
- -safemode: 尽管不常用,但是管理员可以用来管理进入和离开的安全级别。
- -finalizeUpgrade:移除在最后一次升级中的集群备份。
- -refreshNodes: 更新Namenode允许Datanodes链接到Namenode. Namenode重新读取定义在dfs.hosts, dfs.hosts.exclude Datanode的主机名称.定义在 dfs.hosts中的主机是作为集群一部分的Datanodes. 如果有条目在 dfs.hosts中,只有其中列出的主机才允许注册Namenode。dfs.hosts.exclude中的条目 中定义需要退役的Datanodes.。 Datnodes完全退役是在它的所有副本都复制到其他datanodes时候。退役的节点不会自动关机并且不允许选择写入新副本.
- -printTopology :输出集群的拓扑.现实一个机架树和datanodes关联的以Namenode作为的trackes(这句话还是看原版吧)。
Secondary NameNode
Namenode存储文件系统的西修改作为日志添加在本地文件系统。 当一个Namenode启动, 它从镜像对去HDFS的状态, fsimage,然后从编辑日志文件编辑. 然后它向fsimage写入HDFS的新状态,并且对空的可编辑文件进行操作。Namenode只有 在启动时候合并fsimage和edits files,在一个繁忙的集群中日志文件会随着时间变得非常大。大的日志文件另一方面的影响是下次重启Namenode需要更长的时间。
Secondary Namenode 定期合并fsimage和日志文件并保持其大小在一定范围内。它经常运行于与primary NameNode不同的机器上,由于它的内存需要和primary Node具有相同的顺序。
在secondary namenode上的checkpoint进程启动由两个配置控制:
- dfs.namenode.checkpoint.period, 默认设在1小时, 指定两个相邻checkpoint的最大延迟。
- dfs.namenode.checkpoint.txns, 默认设置1000000 defines the number of uncheckpointed transactions on the NameNode which will force an urgent checkpoint, even if the checkpoint period has not been reached.
Secondary Namenode把最后的checkpoints存入字典和primary Namenode具有相同的组织形式。所以如果需要的话checkpointed image随时都可被primary Namenode读取。
更多用法请参考。
Checkpoint Node
Namenode用两个文件保存其配置: fsimage,namespace的最后一个checkpoint,记录从checkpoint开始的namespce的变化的日志。当一个i哦NameNode启动,它合并fsimage和edits日志用来提供一个文件系统元数据的最新视图。Namenode之后以HDFS的状态重写fsimage并且开始新的日志记录。
Checkpoint 定时的为namespace创建检查点。它从正在激活的NameNode下载fsimage和编辑日志,在本地合并他们,并且上传心的image到正在激活的Namenode。CheckPoint通常和Namenode运行在不同的主机上因为它的内存要求和Namenode具有相同的顺序。Checkpoint由配置文件中指定的bin/hdfs namenode -checkpoint开始。
Checkpoint (or Backup)节点的位置 和随同的Web借口通过配置 dfs.namenode.backup.address and dfs.namenode.backup.实现,http-address 配置变量。
Checkpoint 节点上的checkpoint启动由一下两个配置参数控制:
- dfs.namenode.checkpoint.period, set to 1 hour by default, specifies the maximum delay between two consecutive checkpoints
- 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.
Checkpoint节点采取和Namenode的字典相同的组织方式把最后的checkpoint存储进字典。这样checkpointed image就可以随时被Namenode所读取了。参考checkpoint的重要。
多数的checkpoint 节点要在集群配置文件中指定。
更多命令请参考.
Backup Node
T Backup 节点提供和Checkpoint节点一样的检测功能,同样维护一个与激活的NameNode同步的在内存中,时时更新的命名空间文件系统。 Backup节点提供和checkpoint节点一样的功能,同样维护一个内存中的,时时的与激活状态的Namenode状态一致的命名空间的文件副本。随着从Namenode接受一个可编辑的文件日志并持久化到硬盘,Backup节点同样适用于这些这些命名空间在内存中的拷贝,创建一个命名空间的备份。
Backup节点不需要为了创建checkpoint从激活的Namenode下载fsimage和edits,而Checkpont节点和Secondary NameNode需要是需要的,因为它已经有一个在内存中时时的命名空间的状态。Backup节点的进程更高效,因为它只需要把命名空间存储到本地的fsimage和重至edits。
Backup节点在内存中维护一个命名空间的副本,它的RAM要求和Namenode一致。
NameNode一次只支持一个Backup节点,Checkpoint节点不允许注册如果Backup节点在使用。使用多个Backup节点会在不久的将来进行支持。
Backup节点和Checkpont节点在同一个管理器,用 bin/hdfs namenode -backup启动。
Backup节点的位置和web借口通过dfs.namenode.backup.address和dfs.namenode.backup.http-address配置。
Backup节点提供了选项支持运行Namenode节点不持久化到硬盘,代理所有的命名空间持久化状态的请求到Backup节点。为了做到这样,启动Namenode和命令 -importCheckpoint 选项,随着指定没有持久化存储目录通过dfs.namenode.edits.dir f配置。
更全面的讨论Backup节点和Checkpont节点背后的机制,请参考 HADOOP-4539. 更多资料请参考。
Import Checkpoint
The latest checkpoint can be imported to the NameNode if all other copies of the image and the edits files are lost. In order to do that one should:
- Create an empty directory specified in the dfs.namenode.name.dir configuration variable;
- Specify the location of the checkpoint directory in the configuration variable dfs.namenode.checkpoint.dir;
- and start the NameNode with -importCheckpoint option.
The NameNode will upload the checkpoint from the dfs.namenode.checkpoint.dir directory and then save it to the NameNode directory(s) set in dfs.namenode.name.dir. The NameNode will fail if a legal image is contained indfs.namenode.name.dir. The NameNode verifies that the image in dfs.namenode.checkpoint.dir is consistent, but does not modify it in any way.