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 条评论
登录 后参与评论

相关文章

来自专栏JackeyGao的博客

Golang bongo 简单示例

922
来自专栏Albert陈凯

3.3 Spark存储与I/O

3.3 Spark存储与I/O 前面已经讲过,RDD是按照partition分区划分的,所以RDD可以看作由一些分布在不同节点上的分区组成。由于partiti...

2727
来自专栏北京马哥教育

请不要用SECONDS_BEHIND_MASTER来衡量MYSQL主备的延迟时间

MySQL 本身通过 show slave status 提供了 Seconds_Behind_Master ,用于衡量主备之间的复制延迟,但是今天碰到了一个场...

2986
来自专栏企鹅号快讯

大数据入门基础系列之浅谈Hive和HBase的区别

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 在前面的博文里,我已经介绍了 Hive和HBase分别是什么? Apache Hive是一个构建...

1886
来自专栏大数据学习笔记

Flink学习笔记:2、Flink介绍

2、Flink介绍 Some of you might have been already using Apache Spark in your day-to-...

3315
来自专栏MasiMaro 的技术博文

windows 驱动开发入门——驱动中的数据结构

最近在学习驱动编程方面的内容,在这将自己的一些心得分享出来,供大家参考,与大家共同进步,本人学习驱动主要是通过两本书——《独钓寒江 windows安全编程》 和...

532
来自专栏铭毅天下

干货 | Elasticsearch 集群健康值红色终极解决方案

题记 Elasticsearch当清理缓存( echo 3 > /proc/sys/vm/drop_caches )的时候,出现 如下集群健康值:red,红...

4778
来自专栏智能计算时代

「大数据系列」:Apache Hive 分布式数据仓库项目介绍

Apache Hive™数据仓库软件有助于读取,编写和管理驻留在分布式存储中的大型数据集并使用SQL语法进行查询

862
来自专栏JavaQ

深入理解Spring系列之五:BeanDefinition装载

接上篇《深入理解Spring系列之四:BeanDefinition装载前奏曲》,进入AbstractXmlApplicationContext类的loadBea...

2766
来自专栏Hadoop数据仓库

HAWQ与Hive查询性能对比测试

一、实验目的         本实验通过模拟一个典型的应用场景和实际数据量,测试并对比HAWQ内部表、外部表与Hive的查询性能。 二、硬件环境 1. 四台VM...

2096

扫码关注云+社区