HDFS UserGuide (HDFS用户手册)

http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html
Purpose
本文档可作为使用HDFS的初期阅读资料,无论HDFS是作为Hadoop集群的一部分或者是一个独立运行的分布式文件系统。HDFS被设计用于很多环境中,对HDFS工作的知识有助于针对特定集群的诊断和改进。
Overview
HDFS是Hadoop应用使用的一种主要的分布式存储。一个HDFS集群主要由一个管理文件系统元数据的NameNode和y一组存储实际数据的DataNode组成。HDFS Architecture Guide中对此进行了详细描述。本文档主要介绍用户和管理员如何与HDFS集群进行交互,而HDFS架构图则描述了NameNode、DataNodes和客户端之间的基本交互。客户端请求NameNode以获得稳健元数据或者修改文件信息,而与DataNodes进行实际的I/O。
以下是HDFS的突出特点中,很多用户比较感兴趣的部分:
(1)Hadoop,包括HDFS非常适合利用常用硬件进行分布式数据存储和数据处理。它具有容错、可扩展和易于扩大规模等优点。MapReduce,由于其简单,并且适用于一大批分布式应用,因而成为Hadoop内置的一部分。
(2)HDFS默认的配置适用于大部分的情况,一般而言,只有在集群非常大时才需要调整配置。
(3)Hadoop是用Java编写的,被大多数平台所支持。
(4)Hadoop支持类shell命令,比便于用户或者应用与HDFS直接交互。
(5)NameNode和DataNodes内置web服务器,可以方便查看集群的当前状态。
(6)HDFS良好的新特性和持续的改进,下面是其中一些新的特性:
文件权限和身份验证;
机架敏感:在调度任务和分配存储时,考虑到节点的物理位置;
安全模式:用于维护的管理员模式;
fsck:一种实用的文件系统诊断工具,用于查找丢失的文件或块;
fetchdt:一种实用工具,用于获取 DelegationToken并保存到本地系统;
Rebalancer:当数据分布不均衡时,用于数据均衡的工具;
升级和回滚:在软件升级后,如果出现问题,可以回到HDFS升级前的状态;
Secondary NameNode:周期性进行checkpoint,保持NameNode EditLog规模在一定范围内;
Checkpoint node:周期性checkpoint,使EditLog最小化,代替之前Secondary NameNode,但还未实际应用。NameNode可以拥有多个Checkpoint节点,同时没有Backup nodes;
Backup node:是对Checkpoint节点的一个扩展。除了checkpoint外,接收来自NameNode的编辑流,保持一个namespace副本在本地内存中,保持与namenode的同步。NameNode只能有一个Backup node。

Prerequisite
以下文档描述如何安装和设置一个Hadoop集群:
Single Node Setup for first-time users.
Cluster Setup for large, distributed clusters.
本文档的剩余部分假定用户已经安装和运行了至少包含一个DataNode的HDFS。基于本文档的目的,NameNode和DataNode可以运行在同一台物理机器上。

Web Interface
NameNode和DataNode各自运行了一个内部的Web服务器,主要用于显示集群当前状态等基本信息。在默认配置下,NameNode的前台页面是http://namenode-name:50070/。该页面列出了集群中的全部数据节点和集群的基本统计信息。Web页面也可以用来浏览文件系统。

Shell Commands
Hadoop包含多个类shell名利集,可用于直接与HDFS和其他Hadoop支持的文件系统进行交互。bin/hdfs dfs -help命令列出了Hadoop shell支持的命令。bin/hdfs dfs -help command-name显示一个命令的详细帮助信息。这些命令支持大部分常用的文件系统操作,如拷贝文件、改变文件权限等。也支持一部分HDFS特有的操作,如修改文件副本因子等。

DFSAdmin Command
bin/hadoop dfsadmin命令支持HDFS管理员相关操作。bin/hadoop dfsadmin -help命令列出了目前支持的全部命令。如:
-report:报告HDFS的基本统计信息,其中部分信息在NameNode前台页面中是可见的。
-safemode:不常用,利用该命令,管理员可手动进入或离开安全模式。
-finalizeUpgrade:删除在上次升级时集群所做的备份。
-refreshNodes:更新允许连接到NameNode的DataNode集合。NameNodes重新读取dfs.hosts和dfs.hosts.exclude中定义的DataNode主机名。dfs.hosts中定义的datanodes是集群的组成部分,只有dfs.hosts中存在的主机才允许向NameNode注册。dfs.hosts.exclude中的主机则是不再使用的。这些不再使用的DataNodes中的所有副本都被拷贝到其他DataNodes后完全废弃。被废弃的节点不会自动关闭,只是不再被选择写入新的副本。
-printTopology:打印集群的topology,显示集群树和机器中的节点。

Secondary NameNode
NameNode在edits文件中保存对HDFS文件系统的所有修改,edits文件存储在本地文件系统中。当NameNode启动时,首先从fsimage文件中读取HDFS状态,然后执行edits文件中的修改。然后将新的HDFS状态保存为一个新的fsimage并清空edits文件。由于NameNode只在启动时合并fsimage和edits,因此edits可能会变得非常大。这样做还会造成下次HDFS启动时会非常缓慢。
Secondary NameNode定期合并fsimage和edits,使得edits保持在一定大小范围内。通常Secondary NameNode运行在一台与主NameNode不同的机器上,所需要的内存与主NameNode一致。
Secondary NameNode中checkpoint是由如下两个配置参数管理:
dfs.namenode.checkpoint.period,默认该参数是1小时,表示两个连续的checkpoint之间最大的间隔;
dfs.namenode.checkpoint.txns,默认是1百万,当未保存的事务数量超过1百万时,会强制checkpoint,不管有没有到达period。
Secondary NameNode在与主NameNode相同的目录下保存着最新的checkpoint,这样在需要时,checkpoint的image文件可以随时被主NameNode读取。


Checkpoint Node
NameNode利用两个文件对命名空间持久化,fsimage文件保存最新的checkpoint,edits保存自最近checkpoint开始的对命名空间编辑的日志。当一个NameNode启动时,合并fsimage和edits,提供一个最新的文件系统元数据,然后覆盖原有的fsimage文件并清空edits。
Checkpoint Node周期性创建命名空间的checkpoint。从active NameNode下载fsimage和edits,在本地合并为新的fsimage,然后将其上传到active NameNode。Checkpoint节点一般也运行在与active NameNode不同的机器上,其所需要的内存空间与active NameNode相同。Checkpoint节点在配置文件中指定的节点上,通过bin/hdfs namenode -checkpoint实现。
Checkpoint节点的位置和Web接口通过dfs.namenode.backup.address和dfs.namenode.backup.http-address配置。
checkpoint处理由以下两个参数控制:
dfs.namenode.checkpoint.period,默认1小时,指定两次连续checkpoint的最大间隔;
dfs.namenode.checkpoint.txns,默认1百万,当未保存的事务数量超过1百万时,会强制checkpoint,即时未达到period。
Checkpoint节点保存最新的checkpoint在于主NameNode相同的目录下,NameNode可以在需要时尽快得到checkpoint image。
多个checkpoint节点可以在集群配置文件中设置。

Backup Node
bin/hdfs namenode -backup
dfs.namenode.backup.address
dfs.namenode.backup.http-address
dfs.namenode.edits.dir

Import Checkpoint
dfs.namenode.name.dir
dfs.namenode.checkpoint.dir
-importCheckpoint

Rebalancer

Rack Awareness
net.topology.script.file.name

Safemode
bin/hadoop dfsadmin -safemode

fsck
bin/hadoop fsck

fetchdt
bin/hadoop fetchdt DTfile

Recovery Mode
namenode -recover (-force)

Upgrade and Rollback
dfsadmin -upgradeProgress
bin/start-dfs.sh -upgrade
bin/start-dfs.sh -rollback

File Permissions and Security

Scalability

Related Documentation

HDFS UserGuide (HDFS用户手册)

上一篇:Welcome Back to C++ (Modern C++)


下一篇:弗洛伊德变种算法计算最短路径