HDFS简要说明
HDFS简介
HDFS缩写
HDFS(Hadoop Distributed Filesystem)Hadoop分布式文件系统
HDFS文件及块
文件由多个数据块组成,Hadoop 1.X默认数据块大小64M,Hadoop 2.X默认数据块大小128M,这样设计的原因:
- 大文件一个节点存不下来,势必分成块
- 网络传输宕掉,只需重传部分块即可
- 简化管理,块和元数据可以分开存储
HDFS副本放置策略
默认3个副本,第一个副本在本地节点,第二个副本本地机架另一个节点,第三个副本在不同机架上的节点
HDFS 体系结构
HDFS 1.0
HDFS 1.0缺陷
- NameNode单点问题
- NameNode横向扩展及性能问题
HDFS 架构概述
Master/Slave架构模型,由NameNode(名称节点),SecondaryNameNode(第二名称节点),DataNode(数据节点)组成。
架构图如下:
HDFS 命名空间管理
HDFS的命名空间包含目录、文件和块。
HDFS NameNode
- 主要功能,负责HDFS命名空间管理,存储文件目录的metadata元数据信息,包括文件目录、文件和block块的对应关系、block块和DataNode节点的对应关系
- 核心数据结构,FsImage和EditLog,EditLog事务日志,记录每一个对文件系统元数据的改变;FsImage文件,存储整个命名空间的信息,包括文件块的映射表等。
- 检查点过程,NameNode启动时,读取FsImage和EditLog并将EditLog中所有事务应用到FsImage,并将新的FsImage刷新到本地磁盘,然后截去旧的EditLog。
HDFS SecondaryNameNode
NameNode的冷备份,用来保存NameNode中HDFS元数据信息,减小EditLog文件大小,缩短NameNode重启时间。
减小EditLog文件的流程如下:
- SN与NN定期通信,请求NN停止写EditLog文件,改写Edit.new文件
- SN通过HTTP GET方式从NN上获取FsImage和EditLog文件,并下载到本地相应目录
- FsImage和EditLog合并,SN将FsImage载入内存,然后一条一条执行EditLog文件中的各项操作,时内存中的FsImage保持最新
- SN通过HTTP POST将FsImage发送到NN
- NN使用新的FsImage替换旧的FsImage,同时将Edit.new替换为EditLog
HDFS DataNode
存储Client端发送的block数据块,执行数据块的读写操作
HDFS 2.0
HDFS HA
这里指的是NameNode的HA,由NameNode、Zookeeper、JournalNode组成
- Zookeeper实现故障转移
- JournalNode实现Active NN和Standby NN共享EditLog
HDFS JournalNodes
- 作用,使Active NN和Standby NN能够共享EditLog
- 实现,暴露一个RPC接口,允许NN读写数据,Active NN写入EditLog,Standby NN监听,读取数据加载到自己的内存,从而保证内存状态基本和Active NN一致
- 写入成功,多数JN回复写入成功,就认为写入成功
HDFS Zookeeper
支持故障转移,任务包括NameNode失败检测和NameNode选举
HDFS Federation
HDFS联邦
- 使用多个独立的NameNode/Namespace命名空间
- DataNode在所有的NameNode进行注册
- DataNode发送心跳信息、块报告到所有的NameNode
- DataNode执行所有NameNode发送来的命令
HDFS 常用shell命令
HDFS 目录和文件处理命令
[root@hadoop3 ~]# hadoop fs
Usage: hadoop fs [generic options]
[-appendToFile <localsrc> ... <dst>]
[-cat [-ignoreCrc] <src> ...]
[-checksum <src> ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>]
[-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] [-h] [-v] [-x] <path> ...]
[-cp [-f] [-p | -p[topax]] <src> ... <dst>]
[-createSnapshot <snapshotDir> [<snapshotName>]]
[-deleteSnapshot <snapshotDir> <snapshotName>]
[-df [-h] [<path> ...]]
[-du [-s] [-h] [-x] <path> ...]
[-expunge]
[-find <path> ... <expression> ...]
[-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-getfacl [-R] <path>]
[-getfattr [-R] {-n name | -d} [-e en] <path>]
[-getmerge [-nl] <src> <localdst>]
[-help [cmd ...]]
[-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [<path> ...]]
[-mkdir [-p] <path> ...]
[-moveFromLocal <localsrc> ... <dst>]
[-moveToLocal <src> <localdst>]
[-mv <src> ... <dst>]
[-put [-f] [-p] [-l] <localsrc> ... <dst>]
[-renameSnapshot <snapshotDir> <oldName> <newName>]
[-rm [-f] [-r|-R] [-skipTrash] <src> ...]
[-rmdir [--ignore-fail-on-non-empty] <dir> ...]
[-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
[-setfattr {-n name [-v value] | -x name} <path>]
[-setrep [-R] [-w] <rep> <path> ...]
[-stat [format] <path> ...]
[-tail [-f] <file>]
[-test -[defsz] <path>]
[-text [-ignoreCrc] <src> ...]
[-touchz <path> ...]
[-usage [cmd ...]]
Generic options supported are
-conf <configuration file> specify an application configuration file
-D <property=value> use value for given property
-fs <local|namenode:port> specify a namenode
-jt <local|resourcemanager:port> specify a ResourceManager
-files <comma separated list of files> specify comma separated files to be copied to the map reduce cluster
-libjars <comma separated list of jars> specify comma separated jar files to include in the classpath.
-archives <comma separated list of archives> specify comma separated archives to be unarchived on the compute machines.
The general command line syntax is
bin/hadoop command [genericOptions] [commandOptions]
注意事项:hadoop fs是通用的文件系统命令,hdfs dfs只针对hdfs系统,hadoop dfs官网已经不推荐使用了
#列出HDFS上的某个目录
hadoop fs -ls /user/hive/warehouse
#查看指定目录下的文件内容
hadoop fs -cat /dirName/fileName
#修改文件的权限
hadoop fs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI ...]
#修改文件所属
hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
#修改文件组
hadoop fs -chgrp [-R] GROUP URI [URI ...]
#拷贝本地文件到HDFS
hadoop fs -copyFromLocal <localsrc> URI
#拷贝HDFS文件到本地
hadoop fs -copyToLocal [-ignorecrc] [-crc] URI <localdst>
#创建目录
hadoop fs -mkdir /test
注:因为命令还有很多,就不一一列举了,大家也不用全部记住,通用的操作方法如下,首先使用hadoop fs 查看都有哪些命令,然后使用hadoop fs -help [command]查看具体命令的帮助信息,只要英语不是很差都能看懂
HDFS Web管理界面
默认端口是50070,具体的内容查看页面自己学习,应该都能看懂:
HDFS dfsadmin管理维护命令
用来显示HDFS运行状态和管理HDFS
#查看dfsadmin的所有命令
hdfs dfsadmin
Usage: hdfs dfsadmin
Note: Administrative commands can only be run as the HDFS superuser.
[-report [-live] [-dead] [-decommissioning]]
[-safemode <enter | leave | get | wait>]
[-saveNamespace]
[-rollEdits]
[-restoreFailedStorage true|false|check]
[-refreshNodes]
[-setQuota <quota> <dirname>...<dirname>]
[-clrQuota <dirname>...<dirname>]
[-setSpaceQuota <quota> <dirname>...<dirname>]
[-clrSpaceQuota <dirname>...<dirname>]
......
#查看具体某一个命令
hdfs dfsadmin -help [command]
#示例
hdfs dfsadmin -report
HDFS namenode命令
[root@hadoop2 ~]# hdfs namenode -help
Usage: hdfs namenode [-backup] |
[-checkpoint] |
[-format [-clusterid cid ] [-force] [-nonInteractive] ] |
[-upgrade [-clusterid cid] [-renameReserved<k-v pairs>] ] |
[-upgradeOnly [-clusterid cid] [-renameReserved<k-v pairs>] ] |
[-rollback] |
[-rollingUpgrade <rollback|downgrade|started> ] |
[-finalize] |
[-importCheckpoint] |
[-initializeSharedEdits] |
[-bootstrapStandby] |
[-recover [ -force] ] |
[-metadataVersion ] ]
HDFS参数配置和规划
- NameNode堆栈大小至少要在1GB以上
- 128GB内存的NameNode机器,建议设置为16G