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 Streaming管理Kafka偏移量前言从ZK获取offset

为了让Spark Streaming消费kafka的数据不丢数据,可以创建Kafka Direct DStream,由Spark Streaming自己管理of...

1083
来自专栏LuckQI

惊心动魄的Hadoop-6小时350T数据恢复

994
来自专栏个人分享

Spark on Yarn年度知识整理

Spark是整个BDAS的核心组件,是一个大数据分布式编程框架,不仅实现了MapReduce的算子map 函数和reduce函数及计算模型,还提供更为丰富的算子...

932
来自专栏架构师小秘圈

HDFS极简教程

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

3246
来自专栏码洞

轻量级框架Spark快速入门

尝试过Python/Ruby/Nodejs/Golang语言开发的人往往难以适应Java Web框架,相对于这些语言提供的web框架来说,Java的Web框架显...

782
来自专栏Java学习网

常见的 Java 错误及避免方法之第三集(每集10个错误后续持续发布)

这是在代码尝试访问不在值内的数组索引时发生的运行时错误消息。以下代码将触发此异常:

401
来自专栏about云

spark零基础学习线路指导【包括spark2】

问题导读 1.你认为spark该如何入门? 2.你认为spark入门编程需要哪些步骤? 3.本文介绍了spark哪些编程知识?

813
来自专栏java一日一条

HDFS知识点总结

HDFS是什么:HDFS即Hadoop分布式文件系统(Hadoop Distributed Filesystem),以流式数据访问模式来存储超大文件,运行于商用...

652
来自专栏about云

spark零基础学习线路指导

问题导读 1.你认为spark该如何入门? 2.你认为spark入门编程需要哪些步骤? 3.本文介绍了spark哪些编程知识? ? spark...

3325
来自专栏鸿的学习笔记

hadoop系统概览(四)

HDFS的设计使得客户端不会通过NameNode读取和写入文件数据。 相反,客户端向NameNode请求它应该使用类型ClientProtocol通过RPC连接...

712

扫码关注云+社区