Hadoop从入门到精通5:Hadoop原理之分布式文件系统HDFS

随着互联网的快速发展,互联网公司每天产生的用户数据呈现指数型增长,传统的单机存储方式面对海量数据显得手足无措。全世界最大的搜索引擎公司Google,率先提出了分布式文件系统的概念,GFS(Google File System),其基本思想是:将多个廉价的单机存储节点互联成为一个储存集群,并由一个中央节点来管理和维护。这个中央节点不仅可以管理数据节点的删除和增加,还可以处理用户的数据读写请求,理论上这种易扩展的储存集群的容量是无限大的。根据GFS(谷歌文件系统)的思想,Hadoop实现了自己的分布式文件系统HDFS(Hadoop Distributed File System),并以此来构建Hadoop生态系统的各种应用。本节我们就来介绍一下HDFS的基本思想和工作原理,主要包括两个方面的内容:(1)数据的存储;(2)数据的访问。

1.HDFS的工作原理

image

如图所示,HDFS主要有三个组成部分:NameNode(名称节点)、SecondaryNameNode(第二名称节点)和DataNode(数据节点)。

1.1 NameNode的作用

NameNode主要作用有三个:

(1)维护全部DataNode信息:如果有DataNode死掉了,则将它从DataNode列表中移除;如果增加了新的DataNode,则记录新的DataNode的信息,包括机架、hosts信息等。

(2)维护数据元信息fsimage和操作日志edits:数据元信息包括数据的名称、块数、存储位置、冗余度、权限等等;操作日志包括对数据的增删改查等等。

(3)处理用户请求:用户请求包括对数据的创建、修改、查询、设置权限等等。

1.2 SecondaryNameNode的作用

SecondaryNameNode默认是与NameNode位于同一节点上,但是对于某些情况,如NameNode节点压力过大,则会将SecondaryNameNode单独放到另一节点上。SecondaryNameNode的作用主要是定期合并由NameNode节点产生的数据元信息fsimage和操作日志edits。比如将前一天的数据元信息fsimage_old,加上当天的操作日志edits_new,就等于现在的数据元信息fsimage_new,即fsimage = fsimage_old + edits_new。这样做的目的是减少日志的存量,优化HDFS的读写速度。

1.3 DataNode的作用

(1)维持心跳:DataNode会定期(如每隔3秒)向NameNode报告自己的状态,包括剩余存储空间大小、是否由数据损坏等等。如果NameNode超过这个时间还收不到某个DataNode的心跳信息,就认为该DataNode死掉了,会将其从列表中删除。

(2)存储数据:DataNode是按照数据块来分割存储用户原数据的。Hadoop 1.x 默认的数据块大小是64MB,Hadoop 2.x 默认的数据块大小是128MB,当然也可以由用户自行指定数据块大小。

(3)自动冗余:Hadoop集群默认的冗余度为3,即一份用户数据,默认在HDFS上保存3个副本,当然冗余度可以根据情况自行设定。比如Hadoop的本地模式数据是存储在本地文件系统的,没有HDFS功能,也就没有DataNode的概念;Hadoop的伪分布模式虽然使用了HDFS功能,但是由于只有一个节点,所以需要将冗余度设置为1;Hadoop的全分布模式最少需要两个DataNode节点,因此这种情况下需要将冗余度设置为2;超过3个DataNode节点的,保持默认的冗余度为3即可。这里的自动冗余是指,用户在上传数据时,只需要上传至NameNode分配的其中一个DataName节点上,然后该DataNode会根据机架感知原理将数据水平复制到NameNode分配的另外两个DataNode节点上,以达到冗余度为3的目的。另外,NameNode会定期检查用户数据是否满足冗余度要求,当有DataNode死掉时,NameNode就会新分配一个可用的DataNode,然后从活着的DataNode将数据复制到这个新的DataNode上以达到冗余度要求。

2.机架感知原理介绍

image

机架感知是Hadoop存储冗余数据的一种策略。对于大规模的Hadoop集群来说,DataNode节点的个数往往有很多。这些节点需要分机柜(rock)存放,如上图所示。

第一步:用户上传一份数据到机柜rock1上的DataNode11节点上后就得到了数据的第一个副本;

第二步:会优先在另一个机柜rockM上寻找一个可用的DataNodeM2节点,进行水平复制得到数据的第二个副本;

第三步:再回到机柜rock1上寻找另一个DataNode13节点,进行水平复制得到数据的第三个副本。

这样做的目的是:

(1)如果水平复制过程中目标DataNode挂了,则重新寻找一个DataNode继续执行当前水平复制;

(2)如果水平复制过程中目标机柜挂了(即该机柜上的所有DataNode节点均不能访问了),则以当前DataNode作为第一个副本,重新执行第二步和第三步;

(3)将第一步和第三步的两个DataNode节点放到同一个机柜上,是为了当其中一个挂了时,能够快速的从“本地”获取数据,因为第二步的DataNode可能在不同的机房或者城市。

3.倒排索引

Google的爬虫每天把全世界的网页爬回来存储在GFS上之后,怎样根据用户输入的检索关键词快速找到对应的网页呢?这就要用到一种索引技术——倒排索引,英文名为Inverted Index。也许叫它“逆向索引”更好理解一些:传统的检索方式一般都是根据文件名查找内容,这就是一般的索引;而倒排索引却反过来,是根据内容查找文件名。下面就来详细讨论一下这两种索引的工作原理。

3.1索引

假设现在有一张员工表tblEMP,我们需要查询其中的部门号detpno=1的所有员工的信息。如果没有建立索引,则需要遍历tblEMP中的每一条记录,找出其中1号部门的员工,这在数据量较小的时候还是可行的,但是在数据量较大时暴力查找就变得难以忍受了。因此我们可以在deptno列上建一个索引myindex,由于索引是排好序的,因此可以采用二分查找来加快查找速度。

image

3.1.1建立索引和删除索引

在MySQL数据库中建立索引的命令是:create index myindex on tblEMP(deptno);

在MySQL数据库中删除索引的命令是:drop index myindex on tblEMP;

其他数据库参考相应的命令语法。

3.1.2验证建立索引后的性能

通过使用执行计划可以查看SQL语句的执行性能:explain select * from tblEMP where deptno = 1;

以MySQL为例演示建立索引和不建立索引的性能差异:

image

(*)不建立索引

image

可以看到,在不建立索引时,查找部门号为1的员工需要遍历的行数rows=7;

(*)建立索引

image

在建立索引之后,查找部门号为1的员工需要遍历的行数rows=2;大大加快了查询效率。

3.2倒排索引

不同于上面的索引,倒排索引是根据内容查找文件。下图简要说明了倒排索引的基本原理。

image

这里假设有三篇文章(为了方便说明,假设每篇文章只有一句话)。第一步,先通过分词得到一张原始表,index列代表word所在的文章号;第二步,通过去重、合并同一个词出现的所有文章号;第三步,将word作按照字典排序,即可得到最终的倒排索引表。

检索一个词时,只需要采用二分法或者其他更高效的算法找到该词,即可找出该词出现的文章号;检索一个句子时,只需要先将这个句子分成多个词,然后分别找出每个词对应的文章号,最后进行交集运算即可找到这个句子出现的文章号。

注:以上例子只是最简单的一个倒排索引的说明,真正的搜索引擎使用的倒排索引要复杂的多。一个好的搜索引擎一定要在“分词”过程中处理的非常完美,如Google的多语言分词,百度的中文分词,都是很优秀的分词系统。

至此,Hadoop的分布式文件系统HDFS的工作原理已经介绍完毕。祝你玩的愉快!

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

推荐阅读更多精彩内容

  • 1.HDFS简介 正如其名,HDFS(Hadoop Distribution File System)是一个分布式...
    Michaelhbjian阅读 2,491评论 0 2
  • 本文大部分内容转自初步掌握HDFS的架构及原理,并参考了网易云课堂《大数据技术原理与应用》课程Chapter 3的...
    松鼠的读书笔记阅读 826评论 0 8
  • 江柏文:解单技巧 解单,就是你在锁单后要选择适当的时机把这个锁给解掉,即把两个单分别平掉,如果永远不平仓,虽然账户...
    江柏文阅读 114评论 0 0
  • 时间还是会留下疤痕的。 从心口挖出的两个洞,百口千疮。 早不似少年, 留下疤, 早些年别人碰还会疼, 现在倒学会了...
    路悠C阅读 126评论 0 1
  • 题记:现实如同一张巨大的网,我们所有人被困其中,只为挣破牢笼得到自由。 每一个人在成长的不同阶段,生活使...
    枯春阅读 418评论 0 1