我们利用Java语言编写MapReduce程序,然后用Apache Hadoop生态圈的其他工具将它们结合起来,这在技术上是相当复杂的。一种名为Hive的工具在Hadoop和MapReduce上提供类SQL查询层,使得像OBIEE这样的工具可以访问到它们。这样比你亲自用JAVA语言编写自己的MapReduce程序复杂度要低得多。 Hive已经为你写好了,通过ODBC和JDBC驱动器返回数据到OBIEE和ODI。下图展示了这种机制构建的数据层:
基于上图,Hive拥有它自己的元数据层、服务器引擎和数据存储,开发者加载到Hive表中的数据其实存储在HDFS文件系统中,就像MapReduce处理任何其他数据一样。当通过Hive发起查询,Hive服务器动态生成MapReduce程序去查询底层数据,以一种类似于交互式数据库SQL会话的形式返回数据给用户,比如:
markmacbookpro:~ markrittman$ sshoracle@bigdataliteoracle@bigdatalite's password:Last login: Wed Apr 17 04:02:592013 from192.168.2.200==========================================================================================================Welcometo BigDataLiterun startx at the command line for X-Windowsconsole==========================================================================================================
Host: bigdatalite.us.oracle.com[192.168.2.35]
[oracle@bigdatalite~]$hiveHive historyfile=/tmp/oracle/hive_job_log_oracle_201304170403_1991392312.txt
hive> showtables;OKdwh_customerdwh_customer_tmpi_dwh_customerratingssrc_customersrc_sales_personweblogweblog_preprocessedweblog_sessionizedTimetaken: 2.925 seconds
hive> select count(*) fromsrc_customer;Total MapReduce jobs = 1Launching Job 1 out of 1Number of reducetasks determined at compile time: 1In order to change the average load for areducer (in bytes):set hive.exec.reducers.bytes.per.reducer=In order to limitthe maximum number of reducers:set hive.exec.reducers.max=In order to set aconstant number of reducers:set mapred.reduce.tasks=Starting Job =job_201303171815_0003, Tracking URL =http://localhost.localdomain:50030/jobdetails.jsp?jobid=job_201303171815_0003KillCommand=/usr/lib/hadoop-0.20/bin/Hadoop job-Dmapred.job.tracker=localhost.localdomain:8021 -killjob_201303171815_00032013-04-17 04:06:59,867 Stage-1 map = 0%, reduce =0%2013-04-17 04:07:03,926 Stage-1 map = 100%, reduce = 0%2013-04-1704:07:14,040 Stage-1 map = 100%, reduce = 33%2013-04-17 04:07:15,049 Stage-1map = 100%, reduce = 100%Ended Job = job_201303171815_0003OK25Time taken: 22.21seconds
hive>
在上例中,我们连接到Hive环境,列出我可用的“表”,后台运行src_customers表中的“行”计数,引起MapReduce进程在后台Hive服务器中写入和执行。Hive被称为“Hdoop数据仓库”,但它不是你我熟知的数据仓库——例如你通常不会用Hadoop和Hive去存储顾客交易数据,但你可能会用它存储Facebook网的交互数据,或者你网站的最受欢迎的页面或者常用访问路径,同时网站分析的工作人员倾向于用一种更友好的方式进行交互式数据查询而不是他们自己编写Java程序的方式。因此OBIEE如何访问这数据,你在原来的基础上需要哪些额外的软件或者配置块来实现呢?
如果你想OBIEE11g访问Hadoop数据,最好用11.1.1.7以上版本,因为它是测试得最多和最稳定的版本。需要对驱动器进行两点配置:一是在服务器级(Hadoop访问只支持OBIEE 11.1.1.7的Linux服务器设备),二是基于Windows管理工具级。基于《11.1.1.7 Metadata Repository Builder'sGuide》手册,我们先从BI Administration tool开始。
为了让BIAdministration tool 连接Hadoop/Hive数据源,需要通过Oracle支持网站(My Oracle Support)下载文档标识为DocID 1520733.1的 Hadoop 的ODBC驱动。它提供了一套Hive ODBC驱动和PDF文档解释安装过程,一旦安装了驱动后,需要打开ODBC数据源管理程序,创建一个新的HiveODBC数据源。在本实例中,对服务器名后面命名数据源为"bihdatalite",其他项保持默认值。注意"default"是"database"在Hive中的名称,端口号是Hive服务器运行的端口。
现在创建一个新的离线资料库,连接到Hive服务器,通过HiveODBC连接导入表的元数据到RPD中。注意连接当前的展现形式,同时可以导入多个Hive数据库中的表到RPD中。发起的查询不能跨Hive数据库(例如,不能给表名指定一个前缀schema名,因此不能关联两个schema)。
导入Hive表元数据到RPD中后,更改物理数据库类型为"Apache Hadoop",从元数据导入过程自动添加了的默认的ODBC3.5设置。保留连接池调用接口ODBC2.0,在共享登陆信息中输入任意以前的用户名和密码(或者有效的用户名/密码,如果Hive安全是激活状态),保存资料库。
现在你可以在BIAdministration tool中用” View Data ”查看Hive表的数据,如下:
现在跳转到OBIEE的服务器部分,配置ODBC连接到Hive。OBIEE 11.1.1.7附带的DataDirect驱动是已经安装了的且能连接到Hive,因此,以下是通过配置OBIEE的 odbi.ini文件连接相同名称的HIVE数据源案例 。
[ODBC DataSources]AnalyticsWeb=Oracle BI ServerCluster=Oracle BI ServerSSL_Sample=OracleBI Serverbigdatalite=Oracle 7.1 Apache Hive Wire Protocol
[bigdatalite]Driver=/u01/app/Middleware/Oracle_BI1/common/ODBC/Merant/7.0.1/lib/ARhive27.soDescription=Oracle7.1 Apache Hive WireProtocolArraySize=16384Database=defaultDefaultLongDataBuffLen=1024EnableLongDataBuffLen=1024EnableDescribeParam=0Hostname=bigdataliteLoginTimeout=30MaxVarcharSize=2000PortNumber=10000RemoveColumnQualifiers=0StringDescribeType=12TransactionMode=0UseCurrentSchema=0
注意用DataDirect7.1驱动配置OBIEE的OPMN特征,而不是默认的以前的驱动。对于RPD而言,只需要基于Hive表源建立业务模型,用EM上传,使其在线运行在你安装好的OBIEE服务器设备上,最后你的RPD类似于下图:
最后,就像任何其他数据源的分析一样,你可以基于这些数据建立OBIEE分析,除去在查询开始的时候有大量的滞后和延迟,因为,Hive会在它的java环境中运转,写入MapReduce 查询,然后发送回数据到OBIEE的BI Server中。
如何获取数据到Hive,在后台创建这些表,通过Hadoop 和 MapReduce访问?下次我们介绍Oracle数据集成中间件如何用于加载数据到Hive,正如用Hadoop或者其他大数据技术执行数据集成任务一样。