【HDFS】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 Web页面

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值