Hadoop之--HDFS

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;发送过程是以流式写入

流式写入过程,

    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发送消息,说我写完了,如图黄色粗实线。。。这样就完毕了。

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

①写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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Spark学习技巧

必读:再讲Spark与kafka 0.8.2.1+整合

Kafka在0.8和0.10版本引入了新的消费者API,所以spark Streaming与kafka的整合提供了两个包。 请根据你的集群选用正确的包。注意,...

3757
来自专栏Hadoop实操

在同时使用Hive+Sentry,因HMS死锁导致的高并发写入工作负载时,查询速度缓慢或者停滞

1145
来自专栏大数据

内存中的 MapReduce 和 Hadoop 生态系统:第 1 章

本文的部分内容摘自《使用 Apache Ignite 进行内存高性能计算 》一书。如果对此感兴趣,请查阅此书的其余部分以获取更多有用的信息。

2795
来自专栏架构师小秘圈

HDFS极简教程

HDFS(Hadoop Distributed File System )Hadoop分布式文件系统。是根据google发表的论文翻版的。论文为GFS(Goog...

3416
来自专栏加米谷大数据

技术干货 | Hadoop3.0稳定版安装攻略来啦!

第一次安装Apache Hadoop3.0.0是不是状况百出?没关系安装攻略来啦! ? Apache Hadoop 3.0.0在前一个主要发行版本(hadoop...

4489
来自专栏个人分享

Spark on yarn配置项说明与优化整理

1. #spark.yarn.applicationMaster.waitTries  5    

1302
来自专栏懒人开发

Zookeeper应用:hadoop的HA简单实现

hadoop的HDFS集群的分布式存储是靠NameNode节点(namenode负责响应客户端请求)来实现。NameNode对应整个hadoop来说,无非是很重...

4265
来自专栏Hadoop实操

如何使用StreamSets实时采集Kafka中嵌套JSON数据并写入Hive表

3444
来自专栏Hadoop实操

CDH内存调拨过度警告分析

Hadoop应用程序或者Yarn的作业随机的出现OutOfMemory(OOM),在Cloudera Manager界面显示如下警告:

98110
来自专栏Hadoop实操

如何使用StreamSets从MySQL增量更新数据到Hive

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproje...

3.1K13

扫码关注云+社区