《BigInsights -- 基于 Hadoop 的数据分析平台》由会员分享,可在线阅读,更多相关《BigInsights -- 基于 Hadoop 的数据分析平台(8页珍藏版)》请在金锄头文库上搜索。
1、BigInsights - 基于 Hadoop 的数据分析平台刘传杰,IBM 中国研发中心高级软件工程师,主要从事 Hadoop 及 Jaql 相关的研发工作。简介:本文针对 IBM 最新开发的数据分析平台进行概要介绍并对其应用进行指导说明。随着信息技术应用范围的不断扩展,对数据进行挖掘分析的需求日益增加,但是信息量的不断增大及其应用构建的复杂性日益却成为了传统数据分析的一个瓶颈。IBM 构建的数据分析平台针对上述问题,基于 Hadoop 技术,对数据查询语言,数据分析软件,数据库,作业调度模块进行了有效整合,实现了对数据的有效、高效处理,保证了高度的扩展性和兼容性。数据分析背景及其传统数据分
2、析平台的问题起源在当今信息爆炸的时代,企业需要对越来越多的数据进行访问和处理。除了传统的在线交易处理系统和管理信息系统外,半结构化和无结构化的数据呈现出了更快速的增长趋势,例如企业内部的 email 归档,call center 对话记录,客户反馈记录,企业内部网络应用,合作管理系统以及,企业的外部门户网站点击记录,基于 Feed 的市场信息等等。如何更加有效的低成本的处理这些大量的数据(数据量从几个 Tera 字节到 Peta 字节)从而和商业智能相结合以挖掘出对企业有益的信息并帮助用户作出更准确的决策是一个急需解决的问题。目前传统的数据分析平台(ETI 引擎,数据仓库和集市等技术)主要是针
3、对结构化的数据进行在线数据分析应用,这种数据处理模式面临着对大量数据和半结构化的数据处理能力不足和不能承受服务器扩展的的复杂性的问题,为此,Google 实现了一个能够有效利用大量成本低廉的 PC 机和服务器的 Mapred 编程模型和框架并于 2004 年发表了相应的论文,此框架提供自动容错和恢复功能并且能够保证整个系统的高度可扩展性,而 Hadoop 作为 Mapred 的 Open source 的实现已经被越来越多的企业特别是 Internet 公司采用作为基本的分析和查询的基础架构,比如百度,Facebook, Yahoo !等。 IBM 对于 Hadoop 的研究开始于 2-3 年
4、前,截止到目前,研究成果涉及到作业调度,查询语言等多个方面。在这些研究的基础上,IBM 启动了 BigInsights 项目并于 2011 年 5 月发布了 Basic Edition 和 Enterprise Edition 并且还将集成更多 IBM 的产品与组件(可通过以下链接了解 BigInsights 的产品 http:/ 1 所示。 图 1. BigInsight 整体框架图从上面的 BigInsights 产品战略示意图中可以看到,平台的最低层依赖于由多台普通 PC 或者服务器组成的集群 , 也就是说用户并不需要通过不断的购买或者升级目前的大型服务器的性能来实现更大数据量的处理,而
5、只需要利用一些闲置的普通机器对目前的集群进行扩展 (scale-up 方式 )。另外,此平台除了支持 Hadoop 应用程序主要基于的 HDFS 存储系统外,还将对 IBM 最新推出的 GPFS SNC (Shared Nothing Cluster) 平台进行支持以更好的利用其强大的灾难恢复,高可靠性,高扩展性的优势,其实现依赖于 Hadoop 本身提供的抽象 API 接口。为了对这些存储系统的数据能够进行有效地分析,BigInsights 平台集成了 IBM 最新推出的大数据量处理分析系统 BigSheets, 用来方便的抓取转瞬即逝的信息并进行保存分析,除此之外,为了使用户自己能够方便的
6、定制自己的查询功能,BigInsights 还提供了能够直接对存储系统的数据进行读取及其他操作的查询语言 Jaql, 这些也是 Biginsight 发布的重点特性,也是本文进行介绍的重点。在 BigSheets,Jaql 和底层的存储系统之间,BigInsights 使用了任务调度器来调度多个作业的同时运行。此外,从上图中可以看到 ,BigInsights 不但考虑到了单独对数据进行处理的能力,还考虑到了和传统数据库软件、传统数据分析软件集成的能力,另外也提供了对系统进行管理监控等功能。下面的章节将集中在 BigInsights 的应用模块 (Jaql,biggSheets, Jaql 和
7、DB2 的集成 ) 进行阐述。 BigInsights 平台的查询语言和对传统数据库的支持1. Jaql-BigInsights 平台提供的查询语言作为一个优秀的并行计算平台,Hadoop 虽然已经被广泛验证,但是在 Hadoop 上开发 MapReduce 程序需要较长的开发周期,开发人员需要充分理解 MapReduce 计算框架和 HDFS 文件系统的原理和实现才能编写出性能较好的 MapReduce 程序。作为下一代数据分析平台的重要基础,人们也一直在探讨是否可以提供一种类 SQL 的描述性语言来屏蔽 MapReduce 的实现细节,从而让开发人员可以能够更加关注业务逻辑本身而不是计算机
8、程序的实现,目前应用的比较广泛的有 Pig 和 Hive。Pig 提供了一种基于 PigLatin 的描述性语言,Hive 则提供了一种类 SQL 的描述性语言,而 IBM BigInsights 则集成了另外一种描述性语言,JAQL(Json Analysis Query Language)。JAQL 以 Json 数据类型为基础,采用一种在 Linux 系统中广泛应用的 Pipeline 模式来定义数据流的走向,如下例所示: read(hdfs(foo)-transform $.id -write(hdfs(ids);上例中,我们先从 HDFS 文件 foo 中读出所有的数据,然后取得每个
9、记录的 id 属性,把它们组成一个数组写到 HDFS 文件 ids 中。因为读操作的对象是一个 HDFS 文件 ( 可能会非常大,由很多个 HDFS 的 block 单元组成 ),JAQL 会根据 HDFS 支持并发读取的特点,将该操作重构为一个 MapReduce 过程,transform 方法被实现为一个 map 任务,分布到整个集群中来执行。每个 map 任务分别读取 foo 的一个 block 单元,然后生成一个 ids 的 block 单元。最后从用户的角度来看,生成的 ids 不是一个文件,而是一个目录,里面包含了分散在各个 datanode 上的 block 单元。根据 HDFS
10、 的定义,该文件夹可以被当成一个整体来操作。JAQL 提供了一系列类似的方法,允许用户读写 HDFS,HBase,数据库,本地文件系统等各种各样的数据格式,提供了诸如 Transform, Group, Join 等各种常用的方法,允许用户来完成基本的数据操作。除了这些内建的操作外,用户也可以通过自己编写 Java UDF 来扩展 JAQL 的功能。对于一套比较完整的操作集合,也可以定义模块来实现代码的重用。采用 JAQL,包括 Pig 和 Hive,作为与 Hadoop 的交互语言大大降低了 MapReduce 开发人员的技术门槛,这种语言的另外一个潜在优势在于,随着这些语言的不断成熟和算法
11、的不断优化,可能不需要编程人员了解具体的实现细节而获得优异的性能,就像人们在传统数据库中为优化 SQL 所做的一样。 2. Jaql 与 DB2 的集成 -BigInsights 平台对数据库的支持作为企业级的应用平台,IBM BigInsights 不仅推出了这种全新的数据分析框架,也提供了与传统数据库,数据仓库集成的机制,从而允许用户能够无缝的处理新旧平台中的数据。这种集成体现在以下两个方面,JAQL 本身提供了一种访问数据库的机制,允许用户在 JAQL Query 中编写 SQL 语句,通过 JDBC 访问数据库中的数据,另一方面,IBM BigInsights 也提供了一个模块,允许用
12、户在 SQL 语句中编写 JAQL 语句。第一种方向的集成相对简单,是对 JAQL Io 层的一个简单扩展,后一种集成方向的实现则相对复杂,图 2 描述了这种集成的一个逻辑示意图。 图 2. Jaql 和 DB2 的集成示意图整个解决方案的主体由两部分组成:JAQL Server 是对 JAQL 的一个扩展,它提供了一组 RESTful 的操作,允许用户通过 HTTP 的方式提交,查询或者终止一个 JAQL 查询。JaqlSubmit 是 DB2 的一个 scalar UDF,它允许用户在 DB2 的 SQL 语言中提交一个 JAQL 查询,HdfsRead 是 DB2 的一个 table U
13、DF, 它允许用户通过 DB2 访问存储在 HDFS 中的数据。这种设计框架的一个主要优点是在保证互联互通的同时,可以最大限度的使得各个模块的之间保持松散耦合。结合 DB2 的 partition 技术,该方案还可以实现文件的并发读取,最大限度的获得 Hadoop 计算集群的性能优势。 下面是使用 jaql-db2 集成的功能的一个例子,这个例子中我们选取出版年份为 1930,1997,1998 年的数据的信息。清单 1 中是所有书籍的信息,以 json 格式存储在文件中。要使用 Jaql 和 DB2 集成的功能,我们必须执行一下步骤: 1. 注册两个 jar 包,并且为 DB2 创建两个 U
14、DF, 这些步骤在 BigInsights 安装后都在 jaql-db2/scripts 目录下,我们可以通过清单 2 中描述的脚本来运行。 2. 启动 JaqlServer,此服务使 Jaql 能够接受以 HTTP 消息传递过来的 Jaql 指令。 3. 使用 UDF 对数据进行分析查询,本例中的查询语句和结果如清单 3 所示。 清单 1. 使用 DB2 来查询 HDFS 上的数据 $ cat books.json publisher: Scholastic, author: J. K. Rowling, title: Deathly Hallows, year: 2007, publish
15、er: Scholastic, author: J. K. Rowling, title: Chamber of Secrets, year: 1999, reviews: rating: 10, user: joe, review: The best ., rating: 6, user: mary, review: Average ., publisher: Scholastic, author: J. K. Rowling, title: Sorcerers Stone, year: 1998, publisher: Scholastic, author: R. L. Stine, title: Monster Blood IV, year: 1997, reviews: rating: 8, user: rob, review: High on my list., rating: 2, user: