asd456
作者asd456·2015-05-12 17:41
项目经理·JF

Hadoop中的重要Apache项目

字数 4738阅读 1832评论 0赞 0

 Hadoop中的重要Apache项目

既然我们已经领会了Hadoop核心项目的概念(可以视它们为大脑和心脏),现在就开始学习更多内容来充实对广泛生态系统的理解。在Hadoop体系下存在很多项目,一些会取得成功,其他的会凋零死亡,这就是开源软件的本质。好的想法得到发展、进化,然后变得伟大,至少理论上应该是这样的。

接下来要讨论的一些项目推动了许多创新,特别是在Hdaoop 2.0方面。Hive就是其中最著名的。几乎所有关于Hortonworks Stinger的工作开始的目的都是为了在Hadoop中支持SQL,而其中许多变化都由Hive项目推动。因此,了解Hive的概念及其为何如此受重视的原因是至关重要的。

1. Hive

Apache Hive是Hadoop的另一个关键子项目,它为最终用户提供了一个实现类似SQL查询功能的数据仓库软件。Hive查询语言被称为HQL(Hive Query Language),Hive的创始者很明显没时间来想一个更有创意的名字。和ANSI SQL类似,HQL使一端到另一端的交叉相对简单。HQL提供了基于MapReduce的抽象提取;HQL查询语句能够被Hive转换为MapReduce作业。Hive因此成为非常受最终用户欢迎的初学者工具,因为不需要学习专门的MapReduce作业开发知识就可以访问和处理Hadoop中的数据。

明白Hive不会将Hadoop转变为一个关系型数据库管理系统(Relational Database Management System,RDBMS)是很重要的。Hive仍是一个生成MapReduce作业的批处理系统,它并不提供事务性支持、全类型系统、安全性、高并发性或可预测响应时间等功能。它的查询往往以分钟来衡量而不是秒或毫秒。这是因为每个查询的启动成本很高,而且在结束时也没有类似传统SQL开发者经常使用的基于成本的优化器来支撑整个查询计划。因此,不要夸大Hive的能力显得很重要。

不过Hive有一些RDBMS不具备的功能。例如,Hive支持如下复杂数据类型:结构体类型、映射(键/值对)和数组型。Hive还提供了对正则表达式的原生运算符支持,这是一个很有趣的附加功能。考虑到更多的高级分析需要,HQL还提供了允许MapReduce开发者嵌入个性化映射器和化简器的额外可扩展性。

Hive最近最激动人心的发展是它已经成为新的Stinger方案。Stinger的目标是为Hive+SQL兼容性方便实现一百倍的性能改进。这两个功能将对Hadoop的推广采纳产生深远的影响;时刻关注它们吧。我们将在第2章中对Stinger进行更深入的探讨。

2. Pig

Apache Pig是一个使用名为Pig Latin脚本语言对Hadoop数据进行加载、操作和转换的开放式可扩展编程平台。Pig是另一个基于Hadoop核心的抽象应用,它将Pig Latin脚本转换为MapReduce作业运算,使其能基于Hadoop运行。

Pig Latin脚本通过转换确定数据流,即使是简单的写入也能形成复杂的数据操作。因此即使Pig Latin在语法结构上类似SQL,但在本质上更像SQL Server集成服务(SSIS)。Pig Latin脚本可以有多重的输入、转换和输出。Pig有大量的独有嵌入功能,但在社区提供的功能中,只能选择建立自定义功能或raid the piggybank

如上所述,Pig在Hadoop集群上以分布式模式运行的方式提供了其独有的可扩展性。但是,Pig Latin也可以本地模式运行,并不需要Hadoop集群,反而整个编译过程在一个本地Java虚拟机(Java Virtual Machine,JVM)中就可以实现。这在迭代开发和原型设计中无疑是有优势的。

3. SQOOP

SQOOP是一个顶级Apache项目,但是,我更愿意把它作为一种粘合方案。它可将关系型表格式结构化数据导入Apache Hadoop(反之亦然)。

SQOOP的可扩展性使开发者可使用SQOOP应用程序接口创建新的数据连接器。这是SQOOP架构的核心部分,使新连接器的即插即用框架得以实现。

SQOOP目前正在经历一系列的二次发展,最后细化为两个版本。SQOOP 1是客户端应用架构,直接与Hadoop配置层和数据库进行交互,在其发展历程中经历了种种挑战。SQOOP 2旨在解决其原始设计问题,重新设计成基于服务器架构。在本书后文会有更详细讨论。

整合SQOOP连接器的SQL Server早已可以通过Microsoft单独下载,现在的版本已经发展到了SQOOP 1.4并整合进HDInsight服务。SQL Server并行数据仓库(PDW)有一种替代技术,那就是Polybase,我们会在第10章中进行详细介绍。

4. HCatolog

什么是HCatalog?简单来说,HCatalog为存储在Hadoop中的HDFS文件生成了一个抽象化的表格。当需要对数据进行操作时,会有多个工具利用这个抽象表,Pig、Hive和MapReduce在读写Hadoop数据时都利用抽象层来降低复杂程度和缩短操作时间。

HDFS文件理论上可以是任意格式,数据块也可以被存储在集群的任何位置。HCatalog提供了将文件格式和位置映射成数据表格视图的方法。此外,HCatalog的开放性和可扩展性使其可以支持某些特殊的文件格式,可能这需要一些额外开发才能实现。但事实是通过使用Catalog,以前HDFS中那些未知的文件格式将不再是障碍。

就技术层面来说,Apache HCatalog已经不再是Hadoop项目。它虽然仍旧是Hadoop的一个重要功能,但是代码库已经在2013年早些时候被合并进了Hive项目。现在HCatalog建立在Hive之上并用Hive的命令行接口执行命令。

可将HCatalog视为Hive的主数据库,从这个层面看,HCatalog为你的Hadoop“数据库”提供了目录视图和接口。

5. HBase

HBase是一个有趣的项目,因为它在HDFS之上提供了NoSQL数据库功能。它同时是一个面向列的存储,提供了对海量数据的快速访问能力,通常来说这是非常少见的。HBase同时也对Hadoop提供事务性支持,具有数据操作语言(Data Modification Language,DML)能力,即可以对数据执行插入、更新和删除操作。但是,HBase并不提供SQL接口,而是NoSQL的一部分。它也不具备许多RDBMS功能,例如,类型列、安全性、增强的数据可编程功能和查询语言。

HBase被设计用来处理大型表单,但是你不大可能在RDBMS甚至SharePoint数据库中遇到这种巨型表单。HBase表可以有数十亿行,这种表现在并不罕见;但与此同时,这些行几乎可以有无数列,比如数百万列。相比之下,SQL Server的列数限制是1024列。

从架构上来说,HBase属于主/从集合分布式Hadoop实现,并高度依赖Zookeeper(一个稍后即将讨论的Apache项目)。

6. Flume

Flume是Hadoop生态系统的StreamInsight(复杂事件处理平台)。正如所期望的一样,它是一个为HDFS采集、聚合和传输海量事件流数据的分布式系统,同时也具有容错性并可切换成为故障转移和数据恢复模式。但总的来说,想要快速恢复数据就意味着需要牺牲一些性能,所以需要平衡考虑两者的关系。

Flume的架构由以下要素组成:

客户端

数据源

通道

Sink(字面意思:水槽,可理解为输出端)

目的地

事件从客户端流向数据源,数据源是Flume的第一个组件。数据源分析事件后将其分发给一个或多个数据通道进行处理,每个数据通道中的数据被一个输出端使用,按照Hadoop的说法,事件被sink“排空”(事件被比喻成一盆水,每个数据通道类似一个管道,输出端就是水槽出口)。数据通道同时将事件和输出端分离,还可以根据需要,通过将事件存储到文件系统的方式来管理数据恢复。

一旦事件分发处理完毕,sink就需要将事件传输至数据目的地。可用的sink很多,包括HDFS sink。使用集成服务的用户都熟悉“后端压力”的概念,可将数据通道视为一个处理后端压力的组件。假如数据源接收外部事件的速度比自己处理快,就需要数据通道增加容量并对逐渐累积的事件进行管理。

一个经过数据源、数据通道和输出端的传输过程被称为一“跳”(hop)。在单个JVM虚拟机中一跳的所有组件被称为代理。但是Flume并没有限制开发者只能建立一跳,多跳复用流才是Flume最完美的模式。其中包括创建输出输入流、失败跳的容错路由和条件内容路由事件。因此,事件在到达最终目的地之前可以在代理之间传递。

7. Mahout

Mahout是一个关于机器学习的项目,旨在建立可扩展的机器学习函数库。Apache Mahout的核心基于Hadoop并通过MapReduce得以实现,但不仅局限于此。到目前为止,Mahout主要针对以下4方面:

推荐挖掘:推荐挖掘由后端若干推荐引擎驱动。你可能在自己的收件箱中发现过很多类似的消息:“因为之前购买过New England Patriots球队的衬衫,您可能对NFL足球也感兴趣。”

聚类:聚类是将文本文档归类,然后建立局部相关的分组和类别。

分类:分类算法基于已分类文档之上来学习如何对新文档进行分类。可以想象招聘专员会多么钟爱对他们招聘筛选数据的聚类和分类。假如Apache Mahout能减少接到推荐不适合工作机会的电话数量,在我看来这就是共赢。

频繁项目集合挖掘:频繁项目集合挖掘是为了找出哪些项目常绑定在一起出现(如购物篮分析)。

8. Ambari

Ambari是Hadoop生态环境的系统中心,支持Hadoop集群的供应、运维洞察和管理。Hadoop集群包含数以百千计的机器,确保它们被正确配置是一项很重要的工作,因此有相关工具是相当必要的。

可通过Ambari的Web界面很轻松地对所有Hadoop服务、核心组件进行管理,同样也可以用于监控集群,配置系统健康和性能的通知警告。作业诊断信息同样可以反映在Web用户界面,帮助用于更好地理解作业依赖性状态、历史性能和系统趋势。

最后,Ambari还能通过它的RESTful API与其他第三方监控应用程序整合。所以当我说Ambari是Hadoop系统中心时,它的确就是!

9. Oozie

Oozie是针对Hadoop的一款Java Web调度应用程序。单个独立作业并不需要定义业务流程,但更多情况是有一连串的事件、处理进程需要启动和完成才能得到有意义的结果。Oozie大部分时间就是提供这种支持。简言之,Oozie根据作业、脚本和程序的集合创建单个工作容器/单元。对于熟悉企业级调度程序的用户而言再熟悉不过了。Oozie取得这些工作单元并完成相应调度。

很重要的一点是,需要明白Oozie是触发机制,它提交作业等,但MapReduce才是真正的执行者。因此,Oozie必须索取已请求操作的状态信息。所以,Oozie的回调和轮询机制可以提供作业的状态/完成情况信息。

10. Zookeeper

分布式应用使用Zookeeper帮助管理和存储配置信息,Zookeeper的有趣之处在于它不像Hadoop其他项目一样是主/从模式,它本身是高度分布式架构并因此具有高可用性,为其拥有的配置信息提供“单一真实视图”。Zookeeper负责管理和调节可能存在冲突的更新信息,确保集群间的同步一致性。如果熟悉复杂的合并复制拓扑的管理,就会明白这不是一项简单工作!

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广