大数据知识点全讲解之HDFS
大数据知识点全讲解之HDFS
HDFS介绍
HDFS,Hadoop Distributed File System 是Apache Hadoop项目的一个子项目,Hadoop非常适于存储大型数据(比如TB或PB),其就是使用HDFS作为存储系统。HDFS使用多台计算机存储文件,并且提供统一的访问接口,像是访问一个普通文件系统一样使用分布式文件系统
HDFS应用场景
适合的场景:
- 存储非常大的文件:这里非常大是指几百M、G或者TB级别,需要高吞吐量,对延时没有要求
- 采用流式的数据访问方式:即一次写入,多次读取
- 节约成本
- 需要高容错性
- 要求有扩展能力
不适合的场景:
- 低延时的数据访问
- 大量小文件
- 多次读写
HDFS架构
HDFS由四部分组成:HDFS client、NameNode、DataNode、Secondary NameNode
Client
- 文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行存储
- 与NameNode交互,获取文件的位置信息
- 与DataNode交互,读取或者写入数据
- Client提供一些命令来管理和访问HDFS,比如启动或者关闭HDFS
NameNode
NameNode就是master,它是一个主管
- 管理HDFS的名称空间
- 管理数据块(block)映射信息
- 配置副本策略
- 处理客户端读写请求
DataNode
DataNode就是slave,NameNode下达命令,DataNode执行实际的操作
- 存储实际的数据块
- 执行数据块的读写操作
Secondary NameNode
它并非是NameNode的热备。当NameNode挂掉的时候,它并不能马上替代Namenode并提供服务
- 辅助NameNode,分担其工作量
- 定期合并fsimage的fsedits,并推送给NameNode
- 在紧急情况下,可以辅助恢复NameNode
Namenode的作用
- NameNode在内存中保存着整个文件系统的名称、空间和文件数据块的地址映射
- 整个HDFS可存储的文件数受限于NameNode的内存大小
1.NameNode元数据信息
文件名,文件目录结构,文件属性(生成时间,副本数,权限)每个文件的块列表,以及列表中的块与块所在的DataNode之间的地址映射关系。在内存中加载文件,系统中每个文件和每个数据块的引用关系(文件、block、datanode之间的映射信息)数据会定期保存到本地磁盘
2.NameNode文件操作
NameNode负责文件元数据的操作,DataNode负责处理文件内容的读写请求,数据流不经过NameNode,只会询问它跟哪个DataNode联系
3.NameNode副本
文件数据块到底存放到哪些DataNode上,是由NameNode决定的,NN根据全局情况作出放置副本的决定
4.NameNode心跳机制
全权管理数据块的复制,周期性的接受心跳和块的状态信息报告(包含该DataNode上所有数据块的列表)若接受到心跳信息,NameNode认为DataNode工作正常;如果在10分钟后还接受不到DN的心跳,那么NameNode认为DataNode已经宕机,这时候NN准备要把DN上的数据块进行重新赋值。块的状态报告包含了一个DN上所有数据块的列表,blocks report每小时发送一次
DataNode的作用
提供真实文件数据的存储服务
1.DataNode以数据块的形式存储HDFS文件
2.DataNode响应HDFS客户端读写请求
3.DataNode周期性向NameNode汇报心跳信息
4.DataNode周期性向NameNode汇报数据块信息
5.DataNode周期性向NameNode汇报缓存数据块信息
HDFS的副本机制
所有文件都是以block块的方式存放在HDFS文件系统当中,作用如下:
1.一个文件有可能大于集群中任意一个磁盘,引入块机制,可以很好的解决这个问题
2.使用块作为文件存储的逻辑单位可以简化存储子系统
3.块非常适合用于数据备份进而提供数据容错能力
在Hadoop2系列中,block块大小默认是128M,block块的大小可以通过hdfs-site.xml
当中的配置文件进行指定
<property>
<name>dfs.block.size</name>
<value>以字节为单位</value>
</property>
HDFS的命令行使用
ls
hdfs dfs -ls URI #类似于Linux的ls命令,显示文件列表
hdfs dfs -ls / #示例
lsr
hdfs dfs -lsr URI
#在整个目录下递归执行ls
mkdir
hdfs dfs [-p] -mkdir <paths>
#以<paths>中的URI作为参数,创建目录,使用-p参数可以递归创建目录
put
hdfs dfs -put <localsrc> ... <dst>
#将单个的源文件src或者多个源文件srcs从本地文件系统拷贝到目标文件系统中(<dst>对应的路径),也可以从标准输入中读取输入,写入目标文件系统中
get
hdfs dfs -get [-ignorecrc] [-crc] <src> <localhost>
rm
hdfs dfs -rm [-r] URI
#删除参数指定的文件,参数可以有多个,此命令只删除文件和非空目录
cp
hdfs dfs -cp URI <dest>
#-f 选项将覆盖目标,如果它已经存在
#-p 选项将保留文件属性(深度拷贝)
chown
hdfs dfs -chmod [-R] URI
#改变文件的所属用户和用户组;-R则对整个目录有效递归执行
HDFS的高级命令
查看配额信息:
hdfs dfs -count -q -h /...
文件数量限额:
hdfs dfsadmin -setQuota 2 文件名
#给该文件夹下面设置最多上传两个文件,发现只能上传一个文件
文件空间大小限额:
在设置空间配额时,设置的空间至少是block_size * 3
的大小
hdfs dfsadmin -setSpaceQuota 4k /...
#限额大小为4KB
清除空间大小限额:
hdfs dfsadmin -clrSpaceQuota ...
安全模式:
hdfs dfsadmin -safemode get #查看安全模式状态
hdfs dfsadmin -safemode enter #进入
hdfs dfsadmin -safemode leave #退出
HDFS写入过程
HDFS读取过程
HDFS的API操作
HDFS-HA高可用
上一篇: HDFS编程实践
下一篇: 如何恢复win7调整分区后盘符丢失的资料