前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hadoop之--HDFS

Hadoop之--HDFS

作者头像
GavinZhou
发布2018-01-02 15:44:53
8590
发布2018-01-02 15:44:53
举报

what is Hadoop

The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models. It is designed to scale up from single servers to thousands of machines, each offering local computation and storage. Rather than rely on hardware to deliver high-availability, the library itself is designed to detect and handle failures at the application layer, so delivering a highly-available service on top of a cluster of computers, each of which may be prone to failures.

官网地址: HERE 官网DOC:HERE

HDFS

(1) 主要的设计理念

<1> 存储超大文件 这里的“超大文件”是指几百MB、GB甚至TB级别的文件。

<2> 最高效的访问模式是 一次写入、多次读取(流式数据访问) HDFS存储的数据集作为hadoop的分析对象。在数据集生成后,长时间在此数据集上进行各种分析。每次分析都将设计该数据集的大部分数据甚至全部数据,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要。 <3> 运行在普通廉价的服务器上 HDFS设计理念之一就是让它能运行在普通的硬件之上,即便硬件出现故障,也可以通过容错策略来保证数据的高可用。

(2) 适用与不适用场合

<1> 适合进行读和存储操作,不适合写操作 <2> 适合进行大文件量的存储,不适合进行大量小文件的存储

(3) 基本概念

Block:大文件会被分割成多个小文件(block)进行存储,block大小默认为64MB,每一个block会在多个datanode上存储多份副本,默认是3份

DataNode:负责存储block (one per node in the cluster, which manage storage attached to the nodes that they run on)

NameNode:负责管理文件目录、文件和block的对应关系以及block和datanode的对应关系 (a master server that manages the file system namespace and regulates access to files by clients)

Secondary NameNode: 对namespace的周期性检查和检查datanode上HDFS log文件的大小 (secondary NameNode merges the fsimage and the edits log files periodically and keeps edits log size within a limit)

(4) Architecture

架构图
架构图

使用master/slave架构,通常含有一个NameNode和多个DataNode。需要存储的文件被且切分成多个block,block在namenode上存储,NameNode在文件系统上执行像:打开、关闭、重命名文件和目录之类的操作,同时也管理着block和datanode的对应关系。DataNode 负责响应文件系统的读/写请求,同时负责block的创建、删除、在NameNode间复制问题

(5)工作原理

<1>写操作

下面具体解释下工作原理:

有一个文件FileA,100M大小。Client将FileA写入到HDFS上。 HDFS按默认配置,Block size默认为64MB,副本数默认是3 HDFS分布在三个机架上Rack1,Rack2,Rack3。

a. Client将FileA按64M分块。分成两块,block1和Block2,大小分别是64MB和36MB

b. Client向nameNode发送写数据请求,如图蓝色虚线①——>

c. NameNode节点,记录block信息。并返回可用的DataNode,如粉色虚线②———>

Block1: host2, host1, host3 Block2: host7, host8, host4

原理: NameNode具有RackAware机架感知功能 若client为DataNode节点,那存储block时,规则为:副本1,同client的节点上;副本2,不同机架节点上;副本3,同第二个副本机架的另一个节点上;其他副本随机挑选。 若client不为DataNode节点,那存储block时,规则为:副本1,随机选择一个节点上;副本2,不同副本1,机架上;副本3,同副本2相同的另一个节点上;其他副本随机挑选。

d. client向DataNode发送block1;发送过程是以流式写入

代码语言:javascript
复制
流式写入过程,

    1>将64M的block1按64k的package划分;

    2>然后将第一个package发送给host2;

    3>host2接收完后,将第一个package发送给host1,同时client向host2发送第二个package;

    4>host1接收完第一个package后,发送给host3,同时接收host2发来的第二个package。

    5>以此类推,如图红线实线所示,直到将block1发送完毕。

    6>host2,host1,host3向NameNode,host2向Client发送通知,说“消息发送完了”。如图粉红颜色实线所示。

    7>client收到host2发来的消息后,向namenode发送消息,说我写完了。这样就真完成了。如图黄色粗实线

    8>发送完block1后,再向host7,host8,host4发送block2,如图蓝色实线所示。

    9>发送完block2后,host7,host8,host4向NameNode,host7向Client发送通知,如图浅绿色实线所示。

    10>client向NameNode发送消息,说我写完了,如图黄色粗实线。。。这样就完毕了。

分析,通过写过程,我们可以了解到:

代码语言:javascript
复制
①写1T文件,我们需要3T的存储,3T的网络流量。

②在执行读或写的过程中,NameNode和DataNode通过HeartBeat进行保存通信,确定DataNode活着。如果发现DataNode死掉了,就将死掉的DataNode上的数据,放到其他节点去。读取时,要读其他节点去。

③挂掉一个节点,没关系,还有其他节点可以备份;甚至,挂掉某一个机架,也没关系;其他机架上,也有备份。

<2>读操作

读操作就简单一些了,如图所示,client要从datanode上,读取FileA。而FileA由block1和block2组成。 那么,读操作流程为:

a. client向namenode发送读请求

b. namenode查看Metadata信息,返回fileA的block的位置

block1: host2,host1,host3 block2: host7,host8,host4

c. block的位置是有先后顺序的,先读block1,再读block2。而且block1去host2上读取;然后block2,去host7上读取

上面例子中,client位于机架外,那么如果client位于机架内某个DataNode上,例如,client是host6。那么读取的时候,遵循的规律是:

优选读取本机架上的数据

总结

HDFS从根本上来说还是个文件系统,跟我们平时windows下的NTFS和Linux下的EXT4文件系统类似,但是功能简单了很多,不支持软连接等。HDFS是个分布式文件系统,具有高容错性且可以运行在硬件配置不高的机器上,适合大数据量的应用。主要操作就是两个,读或者写。 无论是读还是写,client都需要向NameNode发送请求,之后由NameNode“指挥”DataNode进行读或者写的操作,文件在HDFS中需要进行分块(Block),采用备份(DataNode执行)的策略在DataNode中存储以实现高可用性。

Ref: (1)博客1 (2)官方DOC

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-03-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • what is Hadoop
  • HDFS
  • 总结
相关产品与服务
云 HDFS
云 HDFS(Cloud HDFS,CHDFS)为您提供标准 HDFS 访问协议,您无需更改现有代码,即可使用高可用、高可靠、多维度安全、分层命名空间的分布式文件系统。 只需几分钟,您就可以在云端创建和挂载 CHDFS,来实现您大数据存储需求。随着业务需求的变化,您可以实时扩展或缩减存储资源,CHDFS 存储空间无上限,满足您海量大数据存储与分析业务需求。此外,通过 CHDFS,您可以实现计算与存储分离,极大发挥计算资源灵活性,同时实现存储数据永久保存,降低您大数据分析资源成本。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档