Hadoop 入门系列:HDFS 简介

Hadoop 分布式文件系统,一个高度容错性的文件系统,适合部署在廉价的机器上

HDFS 能提供高吞吐量的数据访问,适合那些有着超大数据集的应用程序

设计特点

  • 支持超大数据文件,非常适合几百MB/GB甚至TB级别的大文件的存储

  • 文件分块存储,HDFS 会将一个完整的大文件平均分块存储到不同计算器上,读取文件时可以同时从多个主机取不同区块的文件,多主机读取比单主机读取效率要高得多

  • 流式数据访问,程序能够以流式访问数据集,适合大规模数据的批量处理。注重吞吐量而不是访问速度。

  • 简化的一致性模型,一次写入多次读写,跟传统文件不同,不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化也只能在文件末添加内容。有利于提高吞吐量

  • 处理硬件故障,大规模集群中,硬件故障是常见的问题。HDFS 认为所有计算机都可能会出问题,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其它某几个主机上,如果其中一台主机失效,可以迅速找另一块副本取文件

不适用 HDFS 的场景

  • 低延迟的数据访问,如交互式应用。可以考虑 HBase

  • 大量的小文件,NameNode 的内存大小决定了 HDFS 可以保存的文件数量,大量的小文件占用 NameNode 的空间,影响性能

  • 多用户写入、修改文件,HDFS 文件只有一个写入者,且不支持修改。

HDFS 采用 Master-Slave 的结构

HDFS

主要有 NameNode、SecondaryNameNode(冷备份)、DataNode 和 Client 这几个角色

热备份:b是a的热备份,如果a坏掉。那么b马上运行代替a的工作

冷备份:b是a的冷备份,如果a坏掉。那么b不能马上代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失

关键元素

  • Block:HDFS 将一个文件进行分块存储,默认是64M

使用 Block 的好处:

1. 可以保存比存储节点单一磁盘大的文件

2. 方便容错处理,有利于数据复制。数据块一般会在不同的机器上保留副本(一般为3个)。

  • NameNode:主节点上运行的主要进程,保存和整个文件系统的目录信息、文件信息及分块信息。这些信息以两种形式存储在本地文件系统:FSImage 和 EditLog。

FSImage 保存某一时刻的 HDFS 目录树、元信息和 Block 索引等信息。

EditLog 保存 FSImage 生成后的后续改动信息。

通过NameNode,Client 可以找到 Block 所在的 DataNode 信息。NameNode 中与 DataNode 相关的信息不保存在本地文件系统,每次启动 NameNode 会动态的重建这些信息。

  • SecondaryNameNode:根据配制的时间间隔,定期合并 NameNode 中的 FSImage 和 EditLog,生成新的 FSImage 并保存,类似 Checkpoint 机制。可以减少 NameNode 故障而丢失数据的风险,但是不支持故障自动恢复。

Hadoop 2.x 开始支持 Activity-Standy 模式如果主 NameNode 失效,启动备用主机运行 NameNode

Hadoop 1.x 所有的元信息存储在单一的 NameNode 节点上,NameNode 的存储空间成为集群的存储瓶颈,Hadoop 2.x 可以配置多个 Namenode(federation cluster)。

  • DataNode:分布在集群中的每个从节点的进程,用于读写 Block 块文件。

作为从节点会不断的像 NameNode 发送心跳信息告知当前状态,并接受来自 NameNode 的指令,创建、移动或删除 Block 块。

  • Client:与 HDFS 交互的客户端包括:命令行接口、JavaAPI、Thrift接口等

提供了一套类似 Linux 文件命令行类似的命令行工具,如:hadoop fs -mkdir /dir

文件上传 HDFS 的时候,Client 将文件切分成一个一个的 Block,然后进行存储。

与 NameNode 交互,获取文件的位置信息。

与 DataNode 交互,读取或者写入数据。

简化工作原理

HDFS配置:分布在三个机架上,分别部署DataNode

Rack1(DN-master,DN-host2,DN-host6)

Rack2(DN-host1,DN-host3,DN-host7)

Rack3(DN-host5,DN-host4,DN-host8)

写操作

有一个文件FileA,100M大小。Client将FileA写入到HDFS上

1. Client将FileA按64M分块。分成两块,block1和Block2

2. Client向NameNode发送写数据,请求NameNode节点,记录block信息,并返回可用的DataNode。

Block1: host2,host1,host3

Block2: host7,host8,host4

client向DataNode发送block1;发送过程是以流式写入

3. 流式写入过程:

  • 将64M的block1按64k的package划分,然后将第一个package发送给host2

  • host2接收完后,将第一个package发送给host1,同时client向host2发送第二个package

以此类推,直到将block1发送完毕

  • host2,host1,host3向NameNode,host2向Client发送通知,说“消息发送完了”

  • client收到host2发来的消息后,向namenode发送消息,说我写完了。这样就真完成了

  • 发送完block1后,再向host7,host8,host4发送block2,重复之前的动作

如果要写1T文件,我们需要3T的存储,3T的网络流量。

在执行读或写的过程中,NameNode和DataNode通过HeartBeat进行保存通信,确定DataNode活着。如果发现DataNode死掉了,就将死掉的DataNode上的数据,放到其他节点去。读取时,要读其他节点去。

挂掉一个节点,没关系,还有其他节点可以备份;甚至,挂掉某一个机架,也没关系;其他机架上,也有备份

读操作

Client要从Datanode上,读取FileA。而FileA由block1和block2组成

1. Client向Namenode发送读请求

2. Namenode查看Metadata信息,返回fileA的block的位置

block1:host2,host1,host3

block2:host7,host8,host4

3. block的位置是有先后顺序的,先读block1,再读block2。而且block1去host2上读取;然后block2,去host7上读取

如果client位于机架内某个DataNode上,例如,client是host6。那么读取的时候,遵循的规律是:优先读取本机架上的数据

推荐书籍

《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351