文档章节

Hadoop之HDFS基础

 小宝0419
发布于 2016/04/19 20:35
字数 1470
阅读 28
收藏 0

HDFS,即hadoop分布式文件系统,主要为了解决如下问题:

  1. 超大文件存储,一般为TB,或者PB

  2. 流式数据读取,一般为一次写入,多次读取

  3. 廉价商用硬件,可运行在一般的廉价PC上面

  4. 数据的高可用性,单机故障后,不影响数据整体的可用性

但同时,HDFS也存在一定的缺陷,或者说其无法解决的问题:

  1. 低延迟的访问,由于HDFS的设计之初是用于解决大吞吐量的数据访问,这是以一定的访问延迟为代价的。HDFS中心节点的存在,导致所有数据写入/访问都需要与中心节点交互,访问量比较大时,会增加相应的时延

  2. 大量的小文件访问,由于HDFS的namenode将文件系统的元数据信息存储在内存中,每个文件都需要固定的一些元数据信息,当存在大量的小文件时,namenode单机的内存就成为瓶颈

  3. 不支持多用户写入,也不支持随机写入


数据块(block):

  1. block是HDFS文件存储的基本单位,默认block为64M(主要为了最小化磁盘寻址开销)

  2. 每个文件以block为单位进行存储

  3. 与普通文件系统不同的是,如果一个文件的大小不足一个block,该文件实际并不占用block全部存储空间

Namenode:

  1.  namenode负责维护整个文件系统的命名空间,文件he文件夹的元数据,这些数据被存储在两个地方:fsimage和editlog

  2. namenode还保存文件包含哪些数据块以及与数据节点的对应关系,但这些信息并不保存在硬盘上, 而是启动时从数据节点收集

  3. 除了namenode外,有个从namenode,主要用于定期从主namenode上拿到fsimage和editlog信息,并合并成最新的fsimage,并发送给主namenode;同时在主namenode宕机后,与可接替工作

Datanode:

  1. 数据节点主要存储实际的数据,接收namenode的数据写入和读取请求


fsimage和editlog同步具体过程:

  1. namenode收到写入请求后,先写入本地editlog中

  2. 写完editlog后,再更改内存的数据

  3. 只有editlog同步到文件系统后,写操作才会返回成功

  4. fsimage是内存中的元数据信息定期checkpoing到磁盘的镜像

fsimage具体checkpoint的过程如下:

  1. 从namenode通知主namenode重新打开一个editlog,后续的更新写入新的editlog

  2. 从namenode从主namenode上get到fsimage和editlog,并将fsimage加载到内存中,并逐一执行editlog中的操作,生成新的fsimage

  3. 从namenode将新的fsimage发给主namenode,通知主namenode替换fsimage,同时通知主namenode用新的editlog替换原来的editlog

数据流

读取数据流:

  • 客户端(client)用FileSystem的open()函数打开文件 

  • DistributedFileSystem用RPC调用元数据节点,得到文件的数据块信息。 

  • 对于每一个数据块,元数据节点返回保存数据块的数据节点的地址。 

  • DistributedFileSystem返回FSDataInputStream给客户端,用来读取数据。 

  • 客户端调用stream的read()函数开始读取数据。 

  • DFSInputStream连接保存此文件第一个数据块的最近的数据节点。 

  • Data从数据节点读到客户端(client) 

  • 当此数据块读取完毕时,DFSInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点。 

  • 当客户端读取完毕数据的时候,调用FSDataInputStream的close函数。 

  • 在读取数据的过程中,如果客户端在与数据节点通信出现错误,则尝试连接包含此数据块的下一个数据节点。 

  • 失败的数据节点将被记录,以后不再连接。

写入数据流:

  • 客户端调用create()来创建文件 

  • DistributedFileSystem用RPC调用元数据节点,在文件系统的命名空间中创建一个新的文件。 

  • 元数据节点首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建新文件。 

  • DistributedFileSystem返回DFSOutputStream,客户端用于写数据。 

  • 客户端开始写入数据,DFSOutputStream将数据分成块,写入data queue。 

  • Data queue由Data Streamer读取,并通知元数据节点分配数据节点,用来存储数据块(每块默认复制3块)。分配的数据节点放在一个pipeline里。 

  • Data Streamer将数据块写入pipeline中的第一个数据节点。第一个数据节点将数据块发送给第二个数据节点。第二个数据节点将数据发送给第三个数据节点。 

  • DFSOutputStream为发出去的数据块保存了ack queue,等待pipeline中的数据节点告知数据已经写入成功。 

  • 如果数据节点在写入的过程中失败: 

    • 关闭pipeline,将ack queue中的数据块放入data queue的开始。 

    • 当前的数据块在已经写入的数据节点中被元数据节点赋予新的标示,则错误节点重启后能够察觉其数据块是过时的,会被删除。 

    • 失败的数据节点从pipeline中移除,另外的数据块则写入pipeline中的另外两个数据节点。 

    • 元数据节点则被通知此数据块是复制块数不足,将来会再创建第三份备份。 

  • 当客户端结束写入数据,则调用stream的close函数。此操作将所有的数据块写入pipeline中的数据节点,并等待ack queue返回成功。最后通知元数据节点写入完毕。


© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 5
码字总数 1578
作品 0
昌平
Hadoop大数据开发框架学习

一.Hadoop框架介绍 hadoop是Apache发布的开源分布式基础架构 他的两个核心是 HDFS HDFS是Hadoop的文件管理系统,负责了海量数据的存储,是做大数据的基础 MapReduce MapReduce则是为了海量数...

jokerhzf
08/31
0
0
大数据实验室(大数据基础培训)——Hadoop的安装、配置及基础使用

为某企业做的培训,完整文档见:http://gudaoxuri.github.io/bd-lab/ 6. Hadoop 此主题介绍Hadoop的安装、配置及基础使用。 Hadoop介绍 https://www.ibm.com/developerworks/cn/data/library...

孤岛旭日
2016/05/06
35
0
Hadoop 3.0版本测试,终将计算与存储解耦!

  【IT168 评论】传统的Hadoop架构是建立在相信通过大规模分布式数据处理获得良好性能的唯一途径是将计算带入数据。在本世纪初,这确实是事实。当时,典型的企业数据中心的网络基础架构不能...

it168网站
05/07
0
0
Apache Hadoop 2.3.0 发布

Apache Hadoop 2.3.0 发布。Hadoop 是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。 2014-0...

fei
2014/02/25
9.5K
17
Hadoop简要介绍

本文大部分内容都是从官网Hadoop上来的。其中有一篇介绍HDFS的pdf文档,里面对Hadoop介绍的比较全面了。我的这一个系列的Hadoop学习笔记也是从这里一步一步进行下来的,同时又参考了网上的很...

晨曦之光
2012/03/09
168
0

没有更多内容

加载失败,请刷新页面

加载更多

20181018 上课截图

![](https://oscimg.oschina.net/oscnet/49f66c08ab8c59a21a3b98889d961672f30.jpg) ![](https://oscimg.oschina.net/oscnet/a61bc2d618b403650dbd4bf68a671fabecb.jpg)......

小丑鱼00
15分钟前
0
0
WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
今天
2
0
OSChina 周五乱弹 —— 想不想把92年的萝莉退货

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @罗马的王:分享松澤由美的单曲《地球ぎ》 很久没看圣斗士星矢了 《地球ぎ》- 松澤由美 手机党少年们想听歌,请使劲儿戳(这里) @开源中国首...

小小编辑
今天
14
2
springBoot条件配置

本篇介绍下,如何通过springboot的条件配置,控制Bean的创建 介绍下开发环境 JDK版本1.8 springboot版本是1.5.2 开发工具为 intellij idea(2018.2) 开发环境为 15款MacBook Pro 前言 很多时候,...

贺小五
今天
1
0
javascript source map 的使用

之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大...

粒子数反转
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部