MRS Service之HDFS总结
概述
HDFS作为运行在通用硬件上的分布式文件系统,和现有的分布式文件系统既有很多的共同点,也存在很多的差异。本文从HDFS是什么开始介绍,包括了HDFS架构、HDFS的读写、各个组件的作用、具体操作以及优缺点。给出了HDFS在分布式存储上的具体方案,可以使读者快速、清晰的理解HDFS系统。
1、HDFS是什么?是干什么用的?
直观对比Linux文件系统和HDFS文件系统(执行ls命令)。
Linux:
#ls -l
-rw-r--r-- 1 root root 20 Jul 29 14:31 ms-server-download-zzzc_88888.idx
-rw-r--r-- 1 root root 8 Jul 29 14:31 ms-server-download-zzzc_88888.dat
HDFS:
#hadoop fs -ls /tmp/
-rw-r--r-- 2 xitong supergroup 181335139 2019-07-17 23:00 /tmp/java.tar.gz
-rw-r--r-- 2 xitong supergroup 181335139 2019-07-17 23:00 /tmp/jdk.tar.gz
2、HDFS的架构是怎么样的?
HDFS架构如下:
Client:客户端。
NameNode:master,它是一个主管、管理者,存储元数据,存储元数据格式会在后面介绍。
DataNode:slave,NameNode 下达命令,DataNode 执行操作并存储实际数据。
SecondaryNameNode:和NameNode不是主备关系。当NameNode挂掉的时候,它并不能马上替换NameNode提供服务。主要作用会在后面介绍。
3、HDFS如何进行读写操作
写文件
-
客户端调用create方法,创建一个新的文件;NameNode会做各种校验,比如文件是否已经存在,客户端是否有权限等。 -
如果校验通过,客户端开始写数据到DN(DataNode),文件会按照block大小进行切块,默认128M(可配置),DataNode构成pipeline管道,client端向输出流对象中写数据,传输的时候是以比block更小的packet为单位进行传输,packet又可拆分为多个chunk,每个chunk都携带校验信息。 -
每个DataNode写完一个块后,才会返回确认信息,并不是每个packet写成功就返回一次确认。 -
写完数据,关闭文件。
读文件
-
客户端调用open方法,打开一个文件。 -
获取block的location,即block所在的DN,NN(NameNode)会根据拓扑结构返回距离客户端最近的DN。 -
客户端直接访问DN读取block数据并计算校验和,整个数据流不经过NN。 -
读取完一个block会读取下一个block。 -
所有block读取完成,关闭文件。
副本放置
副本1:同机架的不同节点。
副本2:同机架的另一个节点。
副本3:不同机架的另一个节点。
如果还有其他副本:随机。
副本1:同Client的节点。
副本2:不同机架的节点。
副本3:同第2副本相同机架的不同节点。
如果还有其他副本:随机。
6、HDFS各个组件的作用
先大致看下启动流程:
-
启动NameNode,读取FsImage元数据镜像文件,加载到内存中;读取EditLog日志文件,加载到内存中,使当前内存中元数据信息与上次关闭系统时保持一致。 -
启动DataNode,向NameNode注册,并向NameNode发送BlockReport。 -
退出安全模式后,Client可以对HDFS进行目录创建、文件上传等操作,改动的目录结构会记录在EditLog中,NameNode的内存中的目录结构也会改变。
NameNode
-
管理 HDFS 的命名空间。 -
管理数据块(Block)映射信息。 -
配置副本策略。 处理客户端读写请求。
Fsimage是一个二进制文件,格式如下:
在blockInfo中保存了block所在的DN信息。
SecondaryNameNode
和NameNode并非主备关系,而是辅助NN进行合并FsImage和EditLog并起到备份作用。
7、HDFS文件操作命令
ls:显示文件目录信息
示例:hadoop fs -ls /hdfs-path/
moveFromLocal:从本地剪切到hdfs
示例:hadoop fs -moveFromLocal /local-path/test.txt /hdfs-path/
moveToLocal:从HDFS剪切到本地
示例:hadoop fs -moveToLocal /hdfs-path/test.txt /local-path/
cp: 从hdfs的一个路径拷贝到hdfs的另一个路径
示例:hadoop fs -cp /hdfs-path1/test.txt /hadoop-path2/test.txt
mv: 在hdfs目录中移动文件
示例:hadoop fs -mv /hdfs-path1/test.txt /hdfs-path2/test.txt
get: 从hdfs下载文件到本地
示例:hadoop fs -get /hdfs-path/test.txt
put: 从本地上传文件到hdfs
示例:hadoop fs -put /local-path/test.txt /hdfs-path/
rm: 删除文件或者文件夹
示例:hadoop fs -rm -r /hdfs-path/test.txt
setrep:设置指定路径下文件副本数
示例:hadoop fs -setrep 6 /hdfs-path/test.txt
8、HDFS优缺点
最后根据以上内容总结HDFS优缺点如下:
优点:
支持海量数据的存储。
检测和快速应对硬件故障。
-
流式数据访问。 -
简化的一致性模型。 -
高容错性。 -
商用硬件。
缺点:
不能做到低延迟数据访问。
不适合大量的小文件存储。
-
不支持修改文件(HDFS2.x开始支持给文件追加内容)。 不支持用户的并行写。
相关文章
http://hadoop.apache.org/docs/r1.2.1/hdfs_design.html
https://www.jianshu.com/p/85b71d550c43
https://www.jianshu.com/p/f1e785fffd4d
https://blog.csdn.net/weixin_38750084/article/details/82963235
https://blog.csdn.net/macyang/article/details/7958862
- 点赞
- 收藏
- 关注作者
评论(0)