没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
第2章 Hadoop HDFS 原理
构建大型网站时,随着数据的增多,数据库访问效率的下降,影响了网站的使用,为了
解决该问题人员使用分库分表手段,通过把数据库中的数据进行垂直分割和水平分割,提高
访问效率。而针对文件系统也存在同样的问题,当存储的文件大小超过单个机器的存储空间
时,就必须把文件数据通过网路分布在不同物理主机上,此时为了提供与单机系统同样的文
件系统服务,就需要扩网络的分布式文件系统。分布式文件系统是基于网络的,网络编程的
复杂性同样出现在分布式文件系统中,从而使分布式文件系统要比单机文件系统复杂的多,
比如分布式文件系统的一个挑战就是当一个节点失效时,不会造成文件数据的丢失。
分布式文件系统有很多,既包括谷歌的 GFS、微软的 DFS、腾讯的 TFS、阿里的 TFS 等
各大互联网公司自己使用的分布式文件系统,也包括 Hadoop HDFS 在内开源的分布式文件
系统。
HDFS 是 Hadoop 的旗舰文件系统,因为其所提供的对通用文件系统的抽象,因此它可
以很容易的跟本地文件系统、亚马逊 S3 在内的其他的存储系统集成。同时 HDFS 是被设计
用来运行在廉价硬件集群之上、存储非常大的文件并提供流式数据访问模式的文件系统。
其中:
“非常大的文件”:成千上万 M、G 和 T 字节大小的文件
“流式数据访问”:HDFS 的设计主要基于“一次写入,多次读取”的想法。典型情况下,
一个数据集合从源拷贝到文件系统中,后继会不断的对数据进行不同的分析。因此,读整个
数据集合的时间比读取第一条记录的延迟要重要的多。
“廉价硬件”:Hadoop 不需要昂贵的、高可用的硬件。因此集群中出现硬件故障的概率
很高,HDFS 被设计能够在硬件故障的情况下,不被用户感觉到明显的中断。
但是 HDFS 不适合如下几种应用场景:
(1) 实时性要求高:比如数据访问必须在毫秒级完成,因为 HDFS 侧重的是数据的
高吞吐,而这是以高延迟为代价的。
(2) 大量的小文件:因为 NameNode 在内存中保存文件系统元数据。一个文件系统
能支持的文件的数量是由 NameNode 节点的内存决定的。每个文件、目录及块
都要占用内存。
(3) 多次写、随机写:HDFS 不支持多次写,更不支持针对文件的随机读写。
一、HDFS 块
在磁盘文件系统中,磁盘的块是读写磁盘的基本单位。文件系统的块对应多个磁盘块。
文件系统的块一般是几个 k,而磁盘的块儿一般是 512 字节。这些对文件系统用户来说是透
明的。但 df 和 dk 可以在块层面对文件系统进行维护。
在 HDFS 中,块大小缺省为 64M,并且一个文件被分成多个各自独立的块来存储。当一
个文件比 64M 小时,不会占用该块所对应的所有物理存储。
为什么 HDFS 采用这么大的块?答案在于减少块定位的相对消耗。读磁盘的时间等于定
位时间+传输时间,所以如果通过增加块的大小使传输时间远大于定位时间,这样传输一个
由多个块构成的大文件的时间,将取决于块传输速度。
假设定位时间是 10ms,传输速率为 100MB/s,使定位时间为传输时间的 1%,那么块大
小应该是 100MB。所以一般取 64M。
当然该值也不是越大越好,因为 MR 一次处理一个块,如果分块过大,使块数远小于节
点数,将不能充分利用分布计算的效率。
HDFS 提供块级别的抽象有如下好处。首先,HDFS 其可存储超过任何一个节点磁盘大小
的文件,因为一个文件可分成多个块,每个块可分布在不同的节点上。第二,可简化存储子
系统。因此块是固定大小,所以可以很容易的计算一个磁盘可包含多少块,同时可以把文件
元数据与块分离存储。第三,固定分块易于拷贝,从而能很好的提供容错和高可用性。为以
防块损坏、磁盘或主机故障,每个块会在多个不同的机器上有多个备份(一般是 3),当一
个块不可用时,将从其他的位置读取该块的拷贝,这是对客户透明的,同时该块被复制到不
同的位置以保证备份数不变。
二、HDFS 系统架构
HDFS 系统架构如下图所示:
Backup Master
Master
机架2
Slave3
机架1
Slave2
Slave1
NameNode
8020
50070
DataNode
5002050075
Secondary
NameNode
50090
client
DataNode
5002050075
DataNode
5002050075
Slave4
DataNode
5002050075
IF
6
IF
1
HTTP
HTTP
HTTP
IF
4
50010 50010
IF
3
50010
IF5
50010
IF2
HDFS 是主从结构的集群,在其中包括如下两种类型的节点:主节点(master)和从节
点(slave)。其中主节点只有一个,从节点一般有多个。主节点运行的的守候进程为名字节点
(NameNode),从节点运行的守候进程为数据节点(DataNode)。为了实现高可用性,一般
增加一个主节点的备份节点(Backup Master),其中运行的守候进程为从名字节点(Secondary
NameNode)。
其中:
名字节点:负责管理文件系统的命名空间。名字节点维护一颗文件系统树及该树中所有
文件和目录的元数据。这些信息包含在本地磁盘的两个文件中:命名空间映像文件和修改日
志文件。名字节点同时还具有保存这文件块的数据节点信息,但该信息并不需要持久化存储,
因为它是在系统启动的时候从数据节点获取后构建的。
数据节点:HDFS 的工作节点,是 HDFS 的主要处理者,它们根据要求存储和获取块,并
且周期性的向名字节点上报自己所保存的块列表及发送心跳。
客户端:负责与名字节点和数据节点直接通信并作为用户访问文件系统的代理。该客户
提供类 POSIX 的文件系统接口,因此用户代码并不需要知道名字节点和数据节点就可以完成
文件系统的操作。
从名字节点(Secondary NameNode):并非作为真正的名字节点。其主要作用是周期性
的合并命名空间映像文件和修改日志,以防止日志文件过大。从名字节点通常运行在一台独
立的主机上,因为它需要跟名字节点同样大小的内存和 CPU 计算能力。它保存了合并后的
命名空间映像的备份供名字节点故障时使用。但 从名字节点的命名空间映像状态滞后于名字
节点,所以当名字节点故障时,必然会丢失一些数据。一般情况下是把名字节点保存在 NFS
中(或其他位置)的元数据文件拷贝到从名字上节点上,然后再把从名字节点提升为名字节
点。
各守候进程提供的服务及端口如下表所示:
守候进程
端口
协议
使用方
NameNode
8020
RPC
Client、DataNode 和
剩余11页未读,继续阅读
资源评论
zhangbaolin
- 粉丝: 100
- 资源: 33
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功