MRS Service之HDFS总结

举报
番茄炒蛋 发表于 2020/08/24 09:25:22 2020/08/24
【摘要】 本文对MRS服务中所涉及到的HDFS服务的基本概念、常用命令以及大体原理进行了简单概括总结,目的在于帮助大家对HDFS有个全面认识与了解。

概述  

    HDFS作为运行在通用硬件上的分布式文件系统,和现有的分布式文件系统既有很多的共同点,也存在很多的差异。本文从HDFS是什么开始介绍,包括了HDFS架构、HDFS的读写、各个组件的作用、具体操作以及优缺点。给出了HDFS在分布式存储上的具体方案,可以使读者快速、清晰的理解HDFS系统。

1、HDFS是什么?是干什么用的?

    HDFS(Hadoop Distributed File System)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。
    首先来看看Hadoop架构,HDFS为Hadoop其他组件提供存储支持。

直观对比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

可以看出HDFS和Linux文件系统很类似,都是有权限、文件所属用户、用户所在的组、文件名称等,但是也有不同:HDFS中的第2列表示副本数。

2、HDFS的架构是怎么样的?

HDFS架构如下:

  1. Client:客户端。

  2. NameNode:master,它是一个主管、管理者,存储元数据,存储元数据格式会在后面介绍。

  3. DataNode:slave,NameNode 下达命令,DataNode 执行操作并存储实际数据。

  4. SecondaryNameNode:和NameNode不是主备关系。当NameNode挂掉的时候,它并不能马上替换NameNode提供服务。主要作用会在后面介绍。

3、HDFS如何进行读写操作

写文件

  1. 客户端调用create方法,创建一个新的文件;NameNode会做各种校验,比如文件是否已经存在,客户端是否有权限等。
  2. 如果校验通过,客户端开始写数据到DN(DataNode),文件会按照block大小进行切块,默认128M(可配置),DataNode构成pipeline管道,client端向输出流对象中写数据,传输的时候是以比block更小的packet为单位进行传输,packet又可拆分为多个chunk,每个chunk都携带校验信息。
  3. 每个DataNode写完一个块后,才会返回确认信息,并不是每个packet写成功就返回一次确认。
  4. 写完数据,关闭文件。

     

读文件

  1. 客户端调用open方法,打开一个文件。
  2. 获取block的location,即block所在的DN,NN(NameNode)会根据拓扑结构返回距离客户端最近的DN。
  3. 客户端直接访问DN读取block数据并计算校验和,整个数据流不经过NN。
  4. 读取完一个block会读取下一个block。
  5. 所有block读取完成,关闭文件。

     

副本放置

以经典的3副本为例(黄色方框表示客户端,绿色表示要写的block),Hadoop早期版本采用左边的放置策略,后期版本采用右边的放置策略放置副本。
图左:
  • 副本1:同机架的不同节点。

  • 副本2:同机架的另一个节点。

  • 副本3:不同机架的另一个节点。

  • 如果还有其他副本:随机。

图右:
  • 副本1:同Client的节点。

  • 副本2:不同机架的节点。

  • 副本3:同第2副本相同机架的不同节点。

  • 如果还有其他副本:随机。

两种策略的故障域都为机架,新版相对于旧版本,当本客户端再次读取新写的数据时,直接从本地读取,这样延迟最小,读取速度最快。

6、HDFS各个组件的作用

先大致看下启动流程:

  1. 启动NameNode,读取FsImage元数据镜像文件,加载到内存中;读取EditLog日志文件,加载到内存中,使当前内存中元数据信息与上次关闭系统时保持一致。
  2. 启动DataNode,向NameNode注册,并向NameNode发送BlockReport。
  3. 退出安全模式后,Client可以对HDFS进行目录创建、文件上传等操作,改动的目录结构会记录在EditLog中,NameNode的内存中的目录结构也会改变。

     

NameNode

  1. 管理 HDFS 的命名空间。
  2. 管理数据块(Block)映射信息。
  3. 配置副本策略。
  4. 处理客户端读写请求。

Fsimage是一个二进制文件,格式如下:

    FsImage文件第1行为image head,里面包含image的版本、文件和目录的个数等;第2行为一个目录格式(如果是目录,就是这种格式),包含了目录的路径、副本数、权限等,目录的blocksize都为0;第3行为一个文件格式(如果是文件,则在FsImage存储的格式),文件和目录格式包含的字段差不多,多了block信息;通过加载此文件和EditLog日志文件来构建整个文件系统的目录结构。
    通过观察FsImage文件,里面并没有block和DN的对应关系,它是如何查到块所对应的DN的呢?
block和DN的对应关系并没有实际持久化,而是通过DN向NN(NameNode)汇报,此过程为BlockReport。通过blockReport构建BlocksMap的结构如下:

在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优缺点如下:

优点:

  1. 支持海量数据的存储。

  2. 检测和快速应对硬件故障。

  3. 流式数据访问。
  4. 简化的一致性模型。
  5. 高容错性。
  6. 商用硬件。

缺点:

  1. 不能做到低延迟数据访问。

  2. 不适合大量的小文件存储。

  3. 不支持修改文件(HDFS2.x开始支持给文件追加内容)。
  4. 不支持用户的并行写。

hadoop2.x新特性 引入了NameNode Federation,解决了横向内存扩展;引入了Namenode HA,解决了namenode单点故障。

原文出处:https://mp.weixin.qq.com/s/s-kOquVbIuJAMSQqkfmaAA

相关文章

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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。