1 HDFS基本原理及介绍
1.1 基本原理
HDFS仅负责存储数据,mapReduce负责读写数据
- 设计目标:大文件存储(TB、PB)、高容错(软件容错,数据多份拷贝)、高吞吐
- 不适合场景:存储大量小文件、随机读取、低延迟读取
1.1.1 HDFS基本概念
- 数据块(block)
大文件会被分割为多个block(默认128M存储,小于一个块的文件不会占据整个空间),一 个数据块在多个datanode上存储多份副本(默认3份),副本可以通过校验解决大量存储问 题
block是HDFS中数据读写的最小单位,大小可配置。如果BLOCK配置太小,寻址时间占比高; block配置太大,map数太小,作业变慢
块存储优势:
- 文件数据块可分布不同磁盘
- 元数据(meta data)与用户数据分开存储
- 提高数据容错能力和可用性
- 提高读取性能
数据块和副本在不同机柜传输,避免单点故障,需要考虑内部网络通信带宽。
- namenode(类似书籍目录)
记录文件系统的元数据,维护文件系统树及整个树内所有的文件和目录
- 管理文件系统的命名空间(元数据信息:所有目录和文件)
- 记录命名空间的改动和本身属性改动
- 保存数据块的节点信息。不持久保存。
- 协同clicent对文件的访问
- dataNode
- 存储管理数据块,供客户端或nameNode调度
- 定期向namenode发送存储块的列表
nameNode中保存文件和块之间的所属关系。dataNode中保存数据块和本地文件的对应关系。如果nameNode毁坏,dataNode无法恢复文件。
- 心跳机制
- dataNode周期性向nameNode发送心跳信号和状态报告
- namenode根据报告验证元数据
- 超时的dataNode标记为宕机,不再发送IO任务
1.1.2 HDFS High Availability(高可用性)
- 1.0:存在namenode单点问题,集群只有1个namenode,宕机后需要停止整个集群
- 2.0:主备namenode,分别active和standby,datanode同时发送给两个namenode数据(心跳、文件和数据块对应关系等),做到热切换,通过第3方(zookeeper)检查、监测、切换namenode
1.1.3 HDFS文件读写
- HDFS读文件
- client用filesystem的open()函数打开文件
- distributedFileSystem通过RPC调用元数据节点,得到文件数据块信息
- 对于每一个数据块,元数据节点返回保存数据块的数据节点地址
- distributedFileSystem返回FSDataInputStream给客户端,用来读取数据
- client调用stream的read()函数开始读取数据
- DFSInputStream连接保存此文件第一个数据块的最近数据节点
- 当此数据块读取完毕,DSFInputStream关闭数据连接
- HDFS写文件
- client调用creat()创建文件
- DistributedFileSystem用RPC调用元数据节点,在文件系统的命名空间创建一个新文件
- 元数据节点首先确定文件原来不存在,并且客户单有创建文件的权限,然后创建新文件
- distributedFileSystem返回DFSOutputStream,客户端用户写数据
- 客户端开始写文件,DFSOutputStream将数据分成块,写入data queue
- data streamer将数据块写入pipeline中的第一个数据节点。第一个数据节点将数据块发送给第二个数据节点,第二个数据节点将数据发送给第三个数据节点。
- DFSOutputStream为发出的数据块保存了ack queue,等待pipeline的数据节点告知数据已成功写入。
- 当客户端结束写入数据,则调用stream的close函数。此函数将所有的数据块写入pipeline中的数据节点,并等待ack queue返回成功。最后通知元数据节点写入完毕。
1.1.4 NameNode目录
- 配置文件、配置参数
- edits log:文件更新以顺序方式写入磁盘镜像,记录着文件系统曾经的更改,定期校验
current目录参数
- seen txid,与inprogress一致
- namespaceID
- clusterID
- cTIme
- storageType
- blockpoolID
- layoutVersion
1.1.5 dataNode目录
数据块、数据块.meta(记录该数据块的元数据信息,空间占比大约30%)
1.2 相关指令
从namenode获取的目录内容,显示在datanode上的文件、文件夹信息。下面显示根目录内容
[root@hadoop1 ~]# hdfs dfs -ls /
Found 7 items
drwxr-xr-x - hbase hbase 0 2015-09-15 14:39 /hyperbase1
drwxr-xr-x - hbase hbase 0 2015-09-15 14:25 /hyperbase1_hregionindex
drwxr-xr-x - hdfs hbase 0 2015-09-14 16:24 /inceptorsql1
drwxrwxrwx - hdfs hadoop 0 2015-09-14 16:20 /tmp
drwxr-xr-x - hdfs hbase 0 2015-09-15 15:33 /transwarp-health-check-dir
drwxrwxrwx - hdfs hadoop 0 2015-09-14 16:29 /user
drwxr-xr-x - hdfs hbase 0 2015-09-14 16:20 /yarn1
显示/user文件夹内容。hdfs的某个文件,对应hbase的region、mapReduce的输出结果等
[root@hadoop1 ~]# hdfs dfs -ls /user
Found 4 items
drwx------ - hive hive 0 2015-09-14 16:25 /user/hive
drwxr-xr-x - oozie hadoop 0 2015-09-14 16:29 /user/oozie
drwx------ - root root 0 2015-09-15 10:59 /user/root
drwx------ - yarn yarn 0 2015-09-14 16:24 /user/yarn
显示hdfs各节点拓扑(机柜、机架位置信息,为管理员手工配置,可以与真实物理拓扑无 关,用于hdfs的跨机柜、机架复制block使用)
[root@hadoop1 ~]# su hdfs
bash-4.1$ hdfs dfsadmin -printTopology
Rack: /default-rack
192.168.180.134:50010 (hadoop1)//第1个节点
192.168.180.135:50010 (hadoop2)//第2个节点
192.168.180.136:50010 (hadoop3)//第3个节点
192.168.180.137:50010 (hadoop4)//第4个节点
显示hdfs管理报告
bash-4.1$ hdfs dfsadmin -report
Configured Capacity: 1155606609920 (1.05 TB)//配置容量
Present Capacity: 1098917232640 (1023.45 GB)//实际容量
DFS Remaining: 1098537857024 (1023.09 GB)//剩余容量
DFS Used: 379375616 (361.80 MB)//已使用容量
DFS Used%: 0.03%//hdfs空间利用率
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0//丢失的block
-------------------------------------------------
Live datanodes (4)://存活4个datanode
Name: 192.168.180.137:50010 (hadoop4)
Hostname: hadoop4
Decommission Status : Normal
Configured Capacity: 288901652480 (269.06 GB)//配置容量
DFS Used: 55148544 (52.59 MB)//已使用容量
Non DFS Used: 10624794624 (9.90 GB)//非DFS容量
DFS Remaining: 278221709312 (259.11 GB)//剩余容量
DFS Used%: 0.02%//DFS使用率
DFS Remaining%: 96.30%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 10
Last contact: Tue Sep 15 15:43:07 CST 2015
Name: 192.168.180.135:50010 (hadoop2)
Hostname: hadoop2
Decommission Status : Normal
Configured Capacity: 288901652480 (269.06 GB)//配置容量
DFS Used: 102649856 (97.89 MB)//已使用容量
Non DFS Used: 10741223424 (10.00 GB)//非DFS容量
DFS Remaining: 278057779200 (258.96 GB)
DFS Used%: 0.04%
DFS Remaining%: 96.25%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 6
Last contact: Tue Sep 15 15:43:09 CST 2015
Name: 192.168.180.134:50010 (hadoop1)
Hostname: hadoop1
Decommission Status : Normal
Configured Capacity: 288901652480 (269.06 GB)
DFS Used: 125693952 (119.87 MB)
Non DFS Used: 24659619840 (22.97 GB)
DFS Remaining: 264116338688 (245.98 GB)
DFS Used%: 0.04%
DFS Remaining%: 91.42%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 10
Last contact: Tue Sep 15 15:43:09 CST 2015
Name: 192.168.180.136:50010 (hadoop3)
Hostname: hadoop3
Decommission Status : Normal
Configured Capacity: 288901652480 (269.06 GB)
DFS Used: 95883264 (91.44 MB)
Non DFS Used: 10663739392 (9.93 GB)
DFS Remaining: 278142029824 (259.04 GB)
DFS Used%: 0.03%
DFS Remaining%: 96.28%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 12
Last contact: Tue Sep 15 15:43:07 CST 2015