[HDFS Manual] CH2 HDFS Users Guide
2 HDFS Users Guide
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会自动加一个后缀.<LAYOUT-VERSION>.UPGRADE_RENAMED, e.g. .snapshot.-51.UPGRADE_RENAMED。
推荐在升级之前先运行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.
[HDFS Manual] CH2 HDFS Users Guide的更多相关文章
- [HDFS Manual] CH3 HDFS Commands Guide
HDFS Commands Guide HDFS Commands Guide 3.1概述 3.2 用户命令 3.2.1 classpath 3.2.2 dfs 3.2.3 envvars 3.2.4 ...
- [HDFS Manual] CH6 HDFS Federation
HDFS Federation HDFS Federation 1 Background 2.多个namenode/namespace 2.1 关键好处 3 联合配置 3.1 配置 3.2 格式化na ...
- [HDFS Manual] CH1 HDFS体系结构
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- [HDFS Manual] CH4 HDFS High Availability Using the Quorum Journal Manager
HDFS High Availability Using the Quorum Journal Manager HDFS High Availability Using the Quorum Jour ...
- [HDFS Manual] CH8 HDFS Snapshots
HDFS Snapshots HDFS Snapshots 1. 概述 1.1 Snapshottable目录 1.2 快照路径 2. 带快照的更新 3. 快照操作 3.1 管理操作 3.2 用户操作 ...
- [HBase Manual] CH2 Getting Started
Getting Started Getting Started 1. Introduction 2.Quick Start-Strandalone HBase 2.1 JDK版本选择 2.2 Get ...
- 【hadoop】python通过hdfs模块读hdfs数据
hdfs官网:http://hdfscli.readthedocs.io/en/latest/api.html 一个非常好的博客:http://blog.csdn.net/gamer_gyt/arti ...
- HDFS之四:HDFS原理解析(总体架构,读写操作流程)
前言 HDFS 是一个能够面向大规模数据使用的,可进行扩展的文件存储与传递系统.是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和 存储空间.让实际上是通过网络来访问文件 ...
- Hadoop之hadoop fs和hdfs dfs、hdfs fs三者区别
适用范围 案例 备注 小记 hadoop fs 使用范围最广,对象:可任何对象 hadoop dfs 只HDFS文件系统相关 hdfs fs 只HDFS文件系统相关(包括与 ...
随机推荐
- 利用Webpack+React(antd)+ES6+python(flask)实现代码转换
之前的几篇博客是将flask 结合 antd本地化,但是这样使得antd无法按需加载(也不支持ES6的语法),而且在写的过程中还需要把每个组件都用antd对象,这样的做法虽然是实现了antd的本地化, ...
- Linux ubantu中安装虚拟/使用环境virtualenv以及python flask框架
今天学习了python flask框架的安装过程以及使用案例,感觉网上讲的东西都没有从我们这种初学者的角度去考虑(哈哈),最后还是奉上心得: 1.安装virtualenv $ sudo apt-get ...
- ORM(二)
一.ORM简介 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.简单的说,ORM是通过使 ...
- LOJ.6073.[2017山东一轮集训Day5]距离(可持久化线段树 树链剖分)
题目链接 就是恶心人的,简单写写了...(似乎就是[HNOI2015]开店?) 拆式子,记\(dis_i\)为\(i\)到根节点的路径权值和,\(Ans=\sum dis_{p_i}+\sum dis ...
- GCC卡常
#pragma GCC optimize("Ofast,no-stack-protector") #pragma GCC optimize("-funsafe-loop- ...
- vue跨域解决方法
针对不在同一服务器,很可能出现跨域问题,解决方法 注意:修改了配置文件,需要重启才能生效
- 面试知识点——Java
目录 Java容器 hashmap实现原理 java多线程 jvm内存模型 java 垃圾回收机制 对象存活状态检查 垃圾收集算法 垃圾收集器 内存分配与回收策略 java nio Java容器 ha ...
- URAL Palindromic Contest
A. Non-palidromic cutting 考虑无解的情形:只能是形如$aaaaa$.$aaabaaa$.$abababa$这三种情况. 有解时,对于最小划分,答案必定是$1$或者$2$,判断 ...
- BZOJ2828 : 火柴游戏
设$f[i][j][k]$表示考虑了前$i$个数字,增加了$j$根火柴,删掉了$k$根火柴是否可能,用bitset加速DP. 然后设$g[i][j]$表示增加了$i$根火柴,删掉了$j$根火柴的最小代 ...
- html概述和html基本结构:
html概述: HTML是Hyper Text Mark-up Language(超文本标记语言)的首字母简写,超文本是指超链接,标记指的是标签,是一种用来制作网页的语言,这种语言由一个个的标签组成, ...