设为首页 收藏本站
查看: 710|回复: 0

[经验分享] Hadoop分布式文件系统HDFS架构

[复制链接]
发表于 2018-10-28 14:59:39 | 显示全部楼层 |阅读模式
1、HDFS介绍
1.1、HDFS是什么?
  HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上。它所具有的高容错、高可靠性、高可扩展性、高获得性、高吞吐率等特征为海量数据提供了不怕故障的存储,为超大数据集(Large Data Set)的应用处理带来了很多便利;HDFS 源于 Google 在2003年10月份发表的GFS(Google File System) 论文编写出来的一套分布式文件系统。
1.2、HDFS架构
DSC0000.gif

  HDFS采用master/slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。
  1)、Namenode是一个中心服务器(master),负责管理文件系统的名字空间(namespace)、客户端对文件的读写请求和配置副本策略。
  2)、Datanode在集群中一般是一个节点一个((slave)),负责管理它所在节点上的存储。HDFS暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组Datanode上。
  3)、Client是一个客户端,通过命令可以访问HDFS;与Namenode交互时获取文件的位置信息;与Datanode交互时读取或写入数据;文件写入到HDFS时,Client 将文件切分成 一个一个的Block,然后存储到不同的Datanode上。
  Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。
1.2.1、HDFS写入流程
  1)、hadoop客户端和Namenode通信请求上传文件,Namenode检查目标文件是否已存在,父目录是否存在
  2)、Namenode返回信息给hadoop客户端是否可以上传
  3)、hadoop客户端会先对文件进行切分,比如一个blok块128m,(如:文件有300m就会被切分成3个块,一个128M、一个128M、一个44M)请求第一个 block该传输到哪些Datanode服务器上
  4)、namenode返回Datanode的服务器信息给hadoop客户端
  5)、hadoop客户端请求一台Datanode上传数据(本质上是一个RPC调用,建立pipeline),第一个Datanode收到请求会继续调用第二个Datanode,然后第二个调用第三个Datanode,将整个pipeline建立完成,逐级返回hadoop客户端
  6)、hadoop客户端开始往第一个Datanode上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位(一个packet为64kb),当然在写入的时候Datanode会进行数据校验,它并不是通过一个packet进行一次校验而是以checksum为单位进行校验(512byte),第一台Datanode收到一个packet就会传给第二台,第二台传给第三台;第一台每传一个packet会放入一个应答队列等待应答
  7)、当一个block传输完成之后,hadoop客户端再次请求Namenode上传第二个block的Datanode服务器,直至所有的block上传完成。
1.2.2、HDFS读取流程
  1)、hadoop客户端发送请求,调用DistributedFileSystem API的open方法发送请求到Namenode,获得存放在Datanode节点上文件的block位置映射信息;
  2)、Namenode把文件所有block的位置信息返回给hadoop客户端;
  3)、hadoop客户端拿到block的位置信息后调用FSDataInputStream API的read方法并行的读取block信息,block默认有3个副本,所以每一个block只需要从一个副本读取就可以;
  4)、hadoop客户端从Datanode上取回文件的所有block按照一定的顺序组成最终需要的文件;
1.3、HDFS的特点
1.3.1、HDFS的优点(适合做)
  1)、高容错性

  • 数据自动保存多个副本。它通过增加副本的形式,提高容错性。
  • 某一个副本丢失以后,它可以自动恢复,这是由 HDFS 内部机制实现的。
  2)、适合处理高吞吐量

  • 它是通过移动计算而不是移动数据;
  • 它会把数据位置暴露给计算框架;
  • 对计算的时延不敏感;
  3)、适合存储和管理大规模数据(PB级别)

  • 处理数据达到TB、甚至PB级别的数据。
  • 能够处理百万规模以上的文件数量,数量相当之大。
  • 能够处理10K节点的规模。
  4)、适合简单的一致性

  • 一次写入,多次读取。文件一旦写入不能修改,只能追加。
  • 它能保证数据的一致性。
  5)、适合处理非结构化数据

  • 可以处理多类型的数据(音频、视频、文本)
1.3.2、HDFS的缺点(不适合做)
  1)、低延时数据访问

  • 比如毫秒级的来存储数据,这是不行的,它做不到。
  • 它适合高吞吐率的场景,就是在某一时间内写入大量的数据。但是它在低延时的情况下是不行的,比如毫秒级以内读取数据,这样它是很难做到的。
  2)、小文件存储

  • 存储大量小文件(这里的小文件是指小于HDFS系统的Block大小的文件(1.0版本默认64M,2.0版本默认128M))的话,它会占用 NameNode大量的内存来存储文件、目录和块信息。这样是不可取的,因为NameNode的内存总是有限的。
  • 小文件存储的寻道时间会超过读取时间,它违反了HDFS的设计目标。
  3)、并发写入、文件随机修改

  • 一个文件只能有一个写,不允许多个线程同时写。
  • 仅支持数据 append(追加),不支持文件的随机修改。
1.4、HDFS数据存放和健壮性(安全)
1.4.1、HDFS副本

  • 副本1:相同客户端的节点上;
  • 副本2:不同机架中的节点上;
  • 副本3:和副本2同机架中的不同节点;
  • 其他副本:随机存放
  所有副本的策略存放都由Namenode负责,Namenode会周期性地接受集群中数据节点Datanode的心跳和块(block)报告,一个心跳的传送到Namenode表示这个数据节点是正常的。
1.4.2、HDFS数据的健壮性(安全)

  • 磁盘数据错误,心跳检测和重新复制
  • 集群均衡
  • 数据完整性
  • 元数据磁盘错误
  • 快照
2、HDFS 命令

  • 列出文件或文件夹:hadoop fs -ls /
  • 创建文件夹:hadoop fs -mkdir /user/wcdoc
  • 上传文件:hadoop fs -put /tmp/LICENSE.txt /user/wcdoc
  • 下载文件:hadoop fs -get /user/wcdoc/LICENSE.txt /tmp
  • 查看文件:hadoop fs -cat /user/wcdoc/LICENSE.txt
  • 删除文件(夹):hadoop fs -rm(r) /usr/wcdoc/LICENSE.txt
3、参考资料

  • [hadoop2.5.2文档]


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-627618-1-1.html 上篇帖子: Setting Up Hadoop NameNode High Availability-candon123 下篇帖子: Hadoop 12节点集群搭建配置清单
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表