欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

大数据知识点全讲解之HDFS

程序员文章站 2024-03-22 13:39:04
...

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

查看配额信息:

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

HDFS读取过程

大数据知识点全讲解之HDFS

大数据知识点全讲解之HDFS

HDFS的API操作

HDFS-HA高可用