文档章节

Hadoop之HDFS基础

 小宝0419
发布于 2016/04/19 20:35
字数 1470
阅读 26
收藏 0
点赞 1
评论 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
博文 4
码字总数 1578
作品 0
昌平
大数据实验室(大数据基础培训)——Hadoop的安装、配置及基础使用

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

孤岛旭日 ⋅ 2016/05/06 ⋅ 0

Hadoop 3.0版本测试,终将计算与存储解耦!

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

it168网站 ⋅ 05/07 ⋅ 0

Apache Hadoop 2.3.0 发布

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

fei ⋅ 2014/02/25 ⋅ 17

超人学院大数据高薪就业班第七期精彩课程抢先看

超人学院大数据高薪就业班第七期火爆招生中,新的一期,内容部不断增加,还有更多优惠呦,精彩内容抢先看: 1、Linux课程:如果你没有使用过Linux,别担心,本内容让你轻松入门,讲解Linux基...

超人学院 ⋅ 2015/04/30 ⋅ 0

Hadoop简要介绍

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

晨曦之光 ⋅ 2012/03/09 ⋅ 0

Hadoop基础之HA(高可用)

1.Hadoop2.0产生背景 早期的hadoop版本,NN(namenode)是HDFS集群的单点故障点,每一个集群只有一个NN,如果这个机器或进程不可用,整个集群就无法 使用。为了解决这个问题,出现了一堆针对HDF...

landy8530 ⋅ 2017/11/25 ⋅ 0

分布式系统基础架构--Hadoop

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

匿名 ⋅ 2008/09/14 ⋅ 27

hdfs源码详解系列(第一节)

hdfs基础架构介绍 hdfs简介 hdfs是hadoop distributed filesystem的缩写,设计思想最早源于GFS(google分布式文件系统),顾名思义就是hadoop分布式文件系统,简单通俗的将就是将一个大文件切...

dingyanming ⋅ 03/15 ⋅ 0

Hadoop并非完美:8个代替 HDFS 的绝佳方案

HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,坦白说HDFS是一个不错的分布式文件系统,它有很多的优点,但也存在有一些缺点,包括:...

南方阿林 ⋅ 2012/12/14 ⋅ 0

Hadoop并非完美:8个代替 HDFS 的绝佳方案

HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,坦白说HDFS是一个不错的分布式文件系统,它有很多的优点,但也存在有一些缺点,包括:...

宗仁 ⋅ 2012/07/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

存储,对比私有云和公有云的不同

导读 说起公共存储,很难不与后网络公司时代的选择性外包联系起来,但尽管如此,它还是具备着简单和固有的可用性。公共存储的名字听起来也缺乏专有性,很像是把东西直接堆放在那里而不会得到...

问题终结者 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部