2 HDFS Users Guide
2 HDFS Users Guide
2.1目的
2.2.概述
2.3.先决条件
2.4. Web Interface
2.5. Shell Command
2.5.1 DFSAdmin 命令
2.6 Secondary Namenode
2.7 Checkpoint Node
2.8 Backup node
2.9 Import Checkpoint
2.10 均衡器
2.11 Rack Awareness
2.12 Safemode
2.13 fsck
2.14 fetchdt
2.15 Recovery Mode
2.16 更新和回滚
2.17 Datanode热切换磁盘
2.18 文件权限和安全性
2.19 可扩展性
2.20 相关阅读
2.1目的
略
2.2.概述
HDFS是Hadoop应用使用的主要的分布式存储。HDFS集群使用namenode管理文件系统元数据,datanode保存实际数据。HDFS体系结构中有详细的描述。用户手册主要解决HDFS和用户的交互和HDFS集群的管理。HDFS体系结构中描述了namenode,datanode和client的相互之间的交互。Client从namenode获取元数据,修改元数据,在datanode中操作实际的数据。
以下是hdfs主要的特性:
· Hadoop包含hdfs,hdfs是非常适用于商用的硬件上面,进行分布式存储和分布式处理的。Hdfs有很好的容错性,可扩展性,扩大也很简单。Mapreduce也是极简的适用于庞大的分布式系统。
· HDFS是高可配置的,默认配置适用于大多数安装。只有在极大的集群下需要调整配置。
· Hadoop使用java开发,适用于绝大多数平台。
· Hadoop支持类似shell的命令行,与hdfs直接交互。
· Namenode和datanode有web服务,可以很简单的查看和检查当前集群状态。
· HDFS有用的特性:
o 文件权限和人认证
o Rack awareness:在调度任务和分配存储是,考虑node的物理位置
o Safemode:一个管理模式用来进行对hdfs维护。
o Fsck:一个用来诊断文件系统是否良好的工具,发现丢失的文件和块。
o Fetchdt:用来获取DelegationToken 并且保存到本地。
o Balancer:当datanode数据分布不均匀,使用这个工具来均衡。
o Upgrade和rollback:软件更新后,因为一些无法预计的问题,可以回滚HDFS的更新
o Secondary Namenode:定期的执行checkpoint,保证hdfs事务日志大小。
o Checkpoint node:在命名空间上执行checkpoint,并且最小化namenode的修改日志大小。
o Backup node:checkpoint node 的扩展。除了checkpoint之外会接受到一串修改,并且维护在内存中。和namenode 保持同步。一个namenode只能有一个backup node。
2.3.先决条件
略
2.4. Web Interface
Namenode和datanode每个都运行了一个内部的web server,为了显示cluster集群的基本信息。使用默认配置,namenode 的前段网站是http://hosts:9870。列出了cluster中的datanode和cluster的基本信息。Web interface可以用来浏览文件系统(使用 browse the file system)。
2.5. Shell Command
Hadoop 包含各种类似shell的命令,直接与HDFS和其他的文件系统进行交互。可以使用hdfs dfs –help查看支持的命令。hdfs dfs -help command-name可以查看命令的详细内容。命令支持很多和正常文件系统一样的操作,比如复制文件,修改文件权限等等。也支持HDFS的一些操作比如复制的文件个数。具体可以查看: File System Shell Guide.
2.5.1 DFSAdmin 命令
hdfs dfsadmin用来支持HDFS管理操作。hdfs dfsadmin –help列出所有支持的命令,比如:
· -report 报告HDFS的基本信息。一些信息都可以在namenode 的端页面上可以查看
· -safemode 可以让用户手动进入和退出safemode
· -finalizeupgrade 清理最后一次cluster升级的备份。
· -refreshnodes 更新namenode可以连接的datanode。默认namenode读取dfs.hosts,dfs.host.exclude定义的文件中读取。Dfs.hosts包含了只允许注册到namenode。Dfs.host.exclude是不允许的datanode。另外如果dfs.namenode.hosts.provider.classname设置为org.apache.hadoop.hdfs.server.blockmanagement.CombinedHostFileManager,所有包含和不包含的host都以json格式在dfs.hosts中。Datanode中的所有副本都放到了其他datanode,那么datanode会被停用。停用的node会自动被关闭。
· -printTopology 打印cluster的拓扑,显示了namenode 可以查看到的一个b树。
2.6 Secondary Namenode
Namenode的修改以日志方式被保存,append的方式被加入到本地的文件系统文件中。当namenode启动,会从fsimage读取hdfs的状态,然后应用editlog。然后把新的fsimage写回到磁盘并且清空editlog。因为namenode只会在startup状态才会合并,editlog文件在繁忙的cluster中会变的很大。这样会是namenode启动话很长时间。
Secondary namenode定期合并fsimage和editlog,并且限制editlog大小。通常运行在另外一个设备上,因为需要的内存和primary namenode一样。
Secondary namenode上执行的checkpoint有个2参数控制:
· Dfs.namenode.checkpoint.period 默认为1个小时,指定2个checkpoint的时间间隔。
· Dfs.namenode.checkpoint.txns 默认为100万,没100万事务进行一次checkpoint。
Secondary namenode在目录中保存了最后一次checkpoint,目录结构和primary namenode一样。Checkpoint的image会准备等待primary namenode 来读取。
Secondary namenode 相关命令 secondarynamenode
2.7 Checkpoint Node
Namenode使用2种文件来保存元数据,fsimage,最后一次checkpoint的元数据,editlog,从最后一次checkpoint到现在的元数据修改日志。当namenode启动,会使用fsimage和editlog合并,提供最新的文件系统状态。Namenode然后使用新的hdfs状态覆盖fsimage,并启动新的editlog。
Checkpoint node定期的创建命名空间的检查点。会从活动的namenode下载fsimage和editlog,在本地合并,并且把新的image重新上传到namenode。Checkpoint通常运行在不同的服务器上,因为内存的需求和namenode一样。Checkpoint node根据配置文件使用hdfs namenode –checkpoint启动。
Checkpoint node 或者backup node可以通过配置dfs.namenode.backup.address 和dfs.namenode.backup.http-address设置。
checkpoint有个2参数控制:
· Dfs.namenode.checkpoint.period 默认为1个小时,指定2个checkpoint的时间间隔。
· Dfs.namenode.checkpoint.txns 默认为100万,没100万事务进行一次checkpoint。
Checkpoint node在目录中保存了最后一次checkpoint,目录结构和namenode一样。Checkpoint的image会准备等待namenode 来读取。
2.8 Backup node
Backup node提供和checkpoint node一样的功能,也维护了一份内存的,最新的文件系统命名空间,这个是和活动namenode 保持同步状态的。接收namenode的修改的流,然后放到本地磁盘上,backup node也只应用这些修改到自己在内存的命名空间中,因此创建了一个namespace的备份。
Backup node不需要去下载fsimage和editlog,来创建checkpoint,因为已经在内存中有了最新的状态。Backup node checkpoint更加高效,只需要把命名空间保存到本地fsimage并且重置edit 。
Namenode只支持一个backup node。如果使用了backup node就无法使用checkpoint node。使用多个backup node在以后会支持。
Backup node和checkpoint node启动方式一样。使用hdfs namenode –backup启动。
本地的backup node或者checkpoint node的web interface通过dfs.namenode.backup.address和dfs.namenode.backup.http-address参数配置。
使用backup node提供了选项,可以让namenode在没有持续化存储下运行,委托了所有的持续化到backup node。Namenode以-importcheckpoint启动,只配置 dfs.namenode.edits.dir。
对于完整的讨论checkpoint node 和backup node 可以看 HADOOP-4539命令的使用可以看:namenode.
2.9 Import Checkpoint
最后一次checkpoint可以导入到namenode上如果所有其他的image和editlog没有丢失:
· 创建一个空的目录,dfs.namenode.name.dir指向这个目录
· 指向checkpoint数据所在目录,dfs.namenode.checkpoint.dir
· 使用-importcheckpoint启动namenode
Namenode会从checkpoint目录读取数据,然后存放到namenode目录中。如果dfs.namenode.name.dir有文件那么就会报错。Namenode会检查dfs.namenode.checkpoint.dir的一致性,但是不会修改它。
2.10 均衡器
HDFS数据并不是统一的在datanode中。一个原因就是cluster加入了一个新的datanode。当放置新的block,namenode会在选择datanode,考虑很多:
· 在写入的node上保留一份
· 跨机架需要一份
· 相同机架的不通服务器上面需要一份
· HDFS数据统一的分配到datanode中
因为很多考虑因素,因此数据不能统一的分配到所有datanode。Hdfs提供了一个工具来管理分析block的位置,并且重新平衡datanode。一个简单的均衡器管理在HADOOP-1652命令使用查看 balancer.
2.11 Rack Awareness
HDFS集群可以识别rack的拓扑。为了最优化数据容量和使用这个配置很重要。可以查看文档:rack awareness
2.12 Safemode
当启动namenode的时候从去加载fsimage和editlog文件。然后等待datanode 报告他们的block信息。如果副本不够就开始复制副本,这个时候namenode都在safemode下。Safemode下hdfs集群是只读的。如果datanode报告绝大多数block可用,那么就会推出safemode。如果需要,HDFS可以手动进入hdfs dfsadmin –safemode。Namenode的前端网站可以看出safemode是否打开。
2.13 fsck
HDFS支持fsck命令检查各种不一致性。Fsck被设计用来报告各种文件问题。比如,块丢失。不想传统的fsck工具,这个命令并不会修复发现的错误。Namenode会自动修复绝大多数的错误。Fsck不是hadoop的shell命令,使用hdfs fsck启动。具体可以查看:fsck.
2.14 fetchdt
HDFS支持fetchdt命令来获取Delegation Token并保存在本地系统中。这个token在后面用于访问服务器。工具使用RPC或者HTTPS获取token,hdfs fetchdt 是不是hadoop shell命令。可以使用hdfs fetchdt DTfile。如果获取了token之后运行hdfs命令就不需要Kerberos tickets。通过参数HADOOP_TOKEN_FILE_LOCATION指向token文件。Fetchdt命令具体使用: fetchdt
2.15 Recovery Mode
通常如果配置了多个元数据存储位置。如果一个存储位置损坏,可以从另外一个位置上读取。
但是如果只有一个存储位置,那么怎么办?这里有个namenode启动的特别模式recovery mode,可以恢复绝大多数数据。
通过namenode –recover进入recovery mode。
进入recovery mode,namenode会交互式提示你如何进行恢复。
如果不想要提示,可以加-force参数。会强制恢复模式总是选择第一个选项。通常都是合理的。
因为恢复模式会导致数据丢失,最要先备份editlog和fsimage。
2.16 更新和回滚
Hadoop在集群上的升级,和其他软件升级一样,都有可能会出现新的bug或者不兼容的修改影响现有的应用程序。HDFS允许管理员回退到之前的hadoop版本,并且回退cluster状态。HDFS升级可以看 Hadoop Upgrade 。在升级前,管理员需要删除已经有的backup使用hadoop dfsadmin –finalizeUpgrade命令。升级过程:
· 在升级前,确认是否有backup node
· 关闭集群,并且安装新的hadoop
· 使用-upgrade命令,start-dfs.sh –upgrade
· 很多情况下,cluster工作是没问题的,一旦新的hdfs被认为没问题,完成升级。
· 如果需要回退到老的版本:
o 关闭集群并且安装之前的hadoop
o 运行rollback命令hdfs namenode –rollback
o –rollback启动cluster start-dfs.sh –rollback
当更新到新的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]如果出现冲突那么会自动重命名比如,.snapshot 变为.my-snapshot 并且.reserved 变为 .my-reserved。-upgrade -renameReserved .snapshot=.my-snapshot,.reserved=.my-reserved.
如果-renameReserved后面没有kv对,namenode会自动加一个后缀.
推荐在升级之前先运行hdfs dfsadmin –saveNamespace。如果edit log指向的文件被自动重命名那么就会有数据一致性问题。
2.17 Datanode热切换磁盘
Datanode支持热切换。用户可以增加或者替换HDFS数据卷,但是不需要关闭datanode。热切换过程:
· 如果有新的存储目录,用户可以格式化,并且mount
· 用户更新修改datanode配置dfs.datanote.data.dir
· 运行dfsadmin -reconfig datanode HOST:PORT start重新配置。然后可以通过命令dfsadmin -reconfig datanode HOST:PORT status查看重新配置的运行状态。
· 一旦重新配置任务完成,用户可以安全的umount老的数据卷。
2.18 文件权限和安全性
文件权限设计和其他的linux平台的文件系统类似。现在只用于限制简单的文件权限。启动namenode 的用户是HDFS的超级用户。未来的版本HDFS会支持网络验证协议,类似Kerberos并且加密数据传输。
2.19 可扩展性
Hadoop当前一个集群可能有上千个node。HDFS每个cluster有一个namenode。当前namenode 的内存使用时主要的可扩展性限制。对于非常庞大的集群来说,增加平均文件的大小,可以增加cluster 的大小,但是又不会消耗太多内存。默认配置不使用于非常大的集群。
2.20 相关阅读
- Hadoop Site: The home page for the Apache Hadoop site.
- Hadoop Wiki: The home page (FrontPage) for the Hadoop Wiki. Unlike the released documentation, which is part of Hadoop source tree, Hadoop Wiki is regularly edited by Hadoop Community.
- FAQ: The FAQ Wiki page.
- Hadoop JavaDoc API.
- Hadoop User Mailing List: user[at]hadoop.apache.org.
- Explore hdfs-default.xml. It includes brief description of most of the configuration variables available.
- HDFS Commands Guide: HDFS commands usage.