最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
开启左侧

[HDFS] 一页纸精华 | HDFS

[复制链接]
发表于 2016-1-30 10:04:35 | 显示全部楼层 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
作者: 牛家浩
要入门大数据,最好的办法就是理清hadoop的生态系统。中兴大数据公众号将推出“一页纸精华”栏目,将用最精炼的语言,陆续为你介绍Hadoop生态系统的各个组件。本期为你介绍分布式文件系统HDFS。
Apache Hadoop2.0生态系统如下图所示:


Hadoop2.0生态系统图
Hadoop核心项目包括:
HDFS:Hadoop分布式文件系统(Hadoop Distributed File System ):分布式文件系统,提供了高吞吐量的访问应用程序数据。
Hadoop YARN:Hadoop集群资源管理框架(Yet Another Resource Negotiator),用于作业调度和集群资源管理。
Hadoop MapReduce:基于YARN的大数据集的并行处理系统。
Hadoop Common:支持其他Hadoop模块的通用功能,包括序列化、Java RPC和持久化数据结构等。
Hadoop其他子项目包括:
Ambari:是一个部署、管理和监视Apache Hadoop集群的开源框架,它提供一个直观的操作工具和一个健壮的Hadoop API,可以隐藏复杂的Hadoop操作,使集群操作大大简化。
HBase:可扩展的分布式列式数据库,支持大表的结构化存储。
Hive:分布式数据仓库系统,提供基于类SQL的查询语言。
Mahout:可扩展的机器学习和数据挖掘领域经典算法的实现。
Pig:一个高级数据流语言和执行环境,用来检索海量数据集。
Spark:一个快速和通用的计算引擎。Spark提供了一个简单而富有表现力的编程模型,支持多种应用,包括ETL,机器学习,数据流处理,和图形计算。
Sqoop:关系型数据库与和Hadoop系统之间进行数据传输工具。
Tez:是从MapReduce计算框架演化而来的通用DAG计算框架,可作为MapReduceR/Pig/Hive等系统的底层数据处理引擎,它天生融入Hadoop 2.0中的资源管理平台YARN。
ZooKeeper:提供Hadoop集群高性能的分布式的协调服务。
HDFS简介
Hadoop分布式文件系统(Hadoop Distributed File System)HDFS被设计成适合运行在通用硬件上高度容错性的分布式文件系统, HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的,HDFS是Apache Hadoop Core项目的一部分。
HDFS设计目标概括为:
流式的访问数据:HDFS建立在这样一个思想上:一次写入、多次读取模式是最高效的。这意味着一个数据集一旦由数据源生成,就会被复制分发到不同的存储节点中,然后响应各种各样的数据分析任务请求。在多数情况下,分析任务都会涉及数据集中的大部分数据,也就是说,对HDFS来说,请求读取整个数据集要比读取一条记录更加高效。
处理超大文件:这里的超大文件通常是指百MB、设置数百TB大小的文件。目前在实际应用中,HDFS已经能用来存储管理PB级的数据了。所以,HDFS被调整成支持大文件。它应该提供很高的聚合数据带宽,一个集群中支持成百上千个节点,支持上亿级别的文件。
简单一致性模型:大部分的HDFS程序对文件操作需要的是一次写多次读取的操作模式。一个文件一旦创建、写入、关闭之后就不需要修改了。这个假定简单化了数据一致的问题和并使高吞吐量的数据访问变得可能。
移动计算比移动数据更经济:在靠近计算数据所存储的位置来进行计算是最理想的状态,尤其是在数据集特别巨大的时候。这样消除了网络的拥堵,提高了系统的整体吞吐量。一个假定就是迁移计算到离数据更近的位置比将数据移动到程序运行更近的位置要更好。HDFS提供了接口,来让程序将自己移动到离数据存储更近的位置。
异构软硬件平台间的可移植性:HDFS被设计成可以简便地实现平台间的迁移,这将推动需要大数据集的应用更广泛地采用HDFS作为平台。
运行于廉价的商用机器集群上:Hadoop设计对硬件需求比较低,只须运行在低廉的商用硬件集群上,而无需昂贵的高可用性机器上。廉价的商用机也就意味着大型集群中出现节点故障情况的概率非常高。这就要求设计HDFS时要充分考虑数据的可靠性,安全性及高可用性。
HDFS体系架构
HDFS是一个主/从(Mater/Slave)体系结构,从最终用户的角度来看,它就像传统的文件系统一样,可以通过目录路径对文件执行CRUD(Create、Read、Update和Delete)操作。但由于分布式存储的性质,HDFS集群拥有一个NameNode和一些DataNode。NameNode管理文件系统的元数据,DataNode存储实际的数据。客户端通过同NameNode和DataNodes的交互访问文件系统。客户端联系NameNode以获取文件的元数据,而真正的文件I/O操作是直接和DataNode进行交互的。HDFS架构如下图所示:


HDFS架构图
HDFS体系结构中有两类节点,一类是NameNode,又叫”元数据节点”;另一类是DataNode,又叫”数据节点”。这两类节点分别承担Master和Worker具体任务的执行节点。
NameNode是一个中心服务器,负责管理文件系统的命名空间(namespace)以及客户端对文件的访问。NameNode其将所有的文件和文件夹的元数据保存在一个文件系统树中。这些信息也会在硬盘上保存成以下文件:命名空间镜像(namespace image)及修改日志(edit log)其还保存了一个文件包括哪些数据块,分布在哪些数据节点上。然而这些信息并不存储在硬盘上,而是在启动的时候由数据节点上报到NameNode。
NameNode可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等。NameNode会将文件系统的元数据存储在内存中,这些信息主要包括了文件信息、每一个文件对应的文件块的信息和每一个文件块在DataNode的信息等。
DataNode是文件系统中真正存储数据的地方,Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。客户端(client)或者元数据信息(NameNode)可以向数据节点请求写入或者读出数据块。DataNode周期性的向NameNode节点汇报其存储的数据块信息。DataNode是文件存储的基本单元,它将Block存储在本地文件系统中,保存了Block的元数据,同时周期性地将所有存在的Block信息发送给NameNode。
Client是HDFS文件系统的客户端,应用程序通过该模块与Namenode、Datanode交互,进行实际的文件读写。
HDFS数据块复制机制
HDFS设计成能可靠地在集群中大量机器之间存储大量的文件,它以块序列的形式存储文件。文件中除了最后一个块,其他块都有相同的大小。默认128M一个数据块,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间。为了容错,文件的所有数据块都会有副本,每个文件的数据块大小和副本系数都是可配置的。块的大小和复制数是以文件为单位进行配置的,应用可以在文件创建时或者之后修改复制因子。HDFS中的文件是一次写的,并且任何时候都只有一个写操作。
Namenode负责处理所有的块复制相关的决策。它周期性地接受集群中数据节点的心跳和块报告。一个心跳的到达表示这个数据节点是正常的。一个块报告包括该数据节点上所有块的列表。
HDFS数据块复制机制如下图所示:


HDFS数据块复制图
副本位置:块副本存放位置的选择严重影响HDFS的可靠性和性能。副本存放位置的优化是HDFS区分于其他分布式文件系统的特征,这需要精心的调节和大量的经验。机架敏感的副本存放策略是为了提高数据的可靠性,可用性和网络带宽的利用率。目前副本存放策略的实现是这个方向上比较原始的方式。短期的实现目标是要把这个策略放在生产环境下验证,了解更多它的行为,为以后测试研究更精致的策略打好基础。
HDFS运行在跨越大量机架的集群之上。两个不同机架上的节点是通过交换机实现通信的,在大多数情况下,相同机架上机器间的网络带宽优于在不同机架上的机器。
在开始的时候,每一个数据节点自检它所属的机架id,然后在向名字节点注册的时候告知它的机架id。HDFS提供接口以便很容易地挂载检测机架标示的模块。一个简单但不是最优的方式就是将副本放置在不同的机架上,这就防止了机架故障时数据的丢失,并且在读数据的时候可以充分利用不同机架的带宽。这个方式均匀地将复制分散在集群中,这就简单地实现了组建故障时的负载均衡。然而这种方式增加了写的成本,因为写的时候需要跨越多个机架传输文件块。
默认的HDFS block放置策略在最小化写开销和最大化数据可靠性、可用性以及总体读取带宽之间进行了一些折中。一般情况下复制因子为3,HDFS的副本放置策略是将第一个副本放在本地节点,将第二个副本放到本地机架上的另外一个节点而将第三个副本放到不同机架上的节点。这种方式减少了机架间的写流量,从而提高了写的性能。机架故障的几率远小于节点故障。这种方式并不影响数据可靠性和可用性的限制,并且它确实减少了读操作的网络聚合带宽,因为文件块仅存在两个不同的机架,而不是三个。文件的副本不是均匀地分布在机架当中,1/3在同一个节点上,1/3副本在同一个机架上,另外1/3均匀地分布在其他机架上。这种方式提高了写的性能,并且不影响数据的可靠性和读性能。
副本的选择:为了尽量减小全局的带宽消耗读延迟,HDFS尝试返回给一个读操作离它最近的副本。假如在读节点的同一个机架上就有这个副本,就直接读这个,如果HDFS集群是跨越多个数据中心,那么本地数据中心的副本优先于远程的副本。
via:中兴大数据

楼主热帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-4-18 11:37

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表