首页 理论教育Hadoop在分布式数据库技术中的应用

Hadoop在分布式数据库技术中的应用

【摘要】:Hadoop[1]是Lambda架构中聚焦于批处理层的软件系统。Hadoop是一个开源软件框架,使用Java语言开发,针对超大数据集的分布存储和处理,运行在常规硬件构建的计算集群上。Hadoop起源于Apache Nutch,是一个开源的网络搜索引擎,它本身也是Lucene项目的一部分。Hadoop这个名字不是一个缩写,它是一个虚构的名字。Hadoop中的计算节点分为两类:NameNode和DataNode。YARN是yet another resource negotiator的缩写,是Hadoop第二版的主要特征。

Hadoop[1]是Lambda架构中聚焦于批处理层的软件系统。Hadoop是一个开源软件框架,使用Java语言开发,针对超大数据集的分布存储和处理,运行在常规硬件构建的计算集群上。

Hadoop框架最核心的设计是Hadoop Map Reduce和HDFS(Hadoop distributed file system),它们的灵感来自GFS(Google file system,Google文件系统)。

Hadoop是Apache Lucene[2]创始人Doug Cutting创建的,Lucene是一个广泛使用的文本搜索系统库。Hadoop起源于Apache Nutch,是一个开源的网络索引擎,它本身也是Lucene项目的一部分。Hadoop这个名字不是一个缩写,它是一个虚构的名字。

Nutch项目始于2002年,自此,一个可以运行的网页爬取工具和搜索引擎系统很快“浮出水面”。但后来,开发者认为这一架构的可扩展度不够,不能解决数十亿网页的搜索问题。2003年发表的一篇论文为此提供了帮助,文中描述的是Google公司的产品架构,该架构称为Google文件系统。GFS或类似的架构可以解决开发者在网页爬取和索引过程中产生的超大文件的存储问题。特别是GFS能够节省系统管理(如管理存储节点)所耗费的大量时间。2004年,开发者开始着手实现一个开源的实现,即Nutch的分布式文件系统(NDFS),后来就诞生了HDFS。

HDFS是一个面向数据存储和处理的分布式文件系统。HDFS设计为存储海量数据(超过100 TB)、可以并行、流式方式存取海量数据。HDFS数据会存储在跨集群的多个节点上,一个大文件存放在集群的多个节点上。这里的文件会分成块(blocks),每个块的默认大小为64(128)MB[3]

Map Reduce是一个分布式数据处理框架,在多计算机构建的集群的节点机上并行处理海量数据。Map Reduce把输入数据处理成键/值(key/value)对。Map Reduce处理过程分为两个阶段:map阶段和reduce阶段。map阶段使用一个或多个mappers处理输入数据,reduce阶段使用零个或多个reducers处理map阶段的数据输出。

Hadoop中的计算节点分为两类:NameNode(名字节点)和DataNode(数据节点)。

1.NameNode

NameDode是一个核心成分,在系统中负责维护文件的命名系统和Hadoop集群管理的目录。HDFS按数据块存放数据,NameNode维护和管理文件/目录的数据块位置。客户请求数据时,NameNode跟踪数据放在哪里,提供被请求数据块的位置。客户想存储新数据时,NameNode提供数据可以存储的块位置。NameNode不存储数据本身,也不直接存取DataNode去读/写数据。

2.DataNodes(www.chuimin.cn)

DataNodes负责存放数据,按照NameNode给客户提供的块位置读数据或写入新数据。DataNodes在NameNode指令下创建块、复制块和删除块。

YARN是yet another resource negotiator的缩写,是Hadoop第二版的主要特征。YARN的基本思想是将原来Hadoop中Job Tracker[4]的两个主要功能(资源管理和作业调度/监控)分离,创建一个全局的Resource Manager(RM)和若干个针对应用程序的Application-Master(AM)。

3.YARN

YARN分层结构的一个主要成分是Resource Manager。这个实体控制整个集群并管理应用程序向基础计算资源的分配。Resource Manager将各个资源部分(计算、内存、带宽等)精心安排给基础Node Manager(YARN的每节点代理)。Resource Manager还与Application-Master一起分配资源,与NodeManager一起启动和监视它们的基础应用程序。在此上下文中,Application Master扮演了以前的Task Tracker的一些角色,Resource Manager扮演了Job Tracker的角色。

YARN分层结构的另一个主要成分是Application Master,管理在YARN内运行的应用程序的每个实例。Application Master负责协调来自Resource Manager的资源,并通过Node-Manager监视容器的执行和资源使用(CPU、内存等的资源分配)。值得注意的是,尽管目前的资源很传统(CPU核心、内存),但未来会带来基于实际任务的新资源类型(比如图形处理单元或其他专用处理设备)。从YARN角度讲,Application Master是用户代码,因此存在潜在的安全问题。YARN假设Application Master存在错误或者甚至是恶意的,因此将它们当作无特权的代码对待。

4.Spark

Spark[5]是另外一个开源项目。具体地说,Spark是专为大规模数据处理而设计的快速通用的计算引擎。Spark拥有Hadoop Map Reduce所具有的优点,但不同于Map Reduce的是,Job(作业)的中间输出结果可以保存在内存中,而不再需要读/写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的Map Reduce的算法

Spark是一种与Hadoop相似的开源集群计算环境,但是两者之间还有一些不同之处,这些不同之处使Spark在某些工作负载方面表现得更加优越,换句话说,Spark启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。