3

你曾经使用 Saiku 在 BigData Platform (Hadoop) 上进行数据分析吗?我最近的工作需要将一些遗留的 BI 工具与 Hadoop 集成,以支持 HDFS/HBase 上的常见 OLAP 查询。

我在这里找到了一个使用 Phoenix 和 Hbase 实现的解决方案它将 saiku 和 Hbase 与 Phoenix 中的 SQL Dialect 连接起来,并且可以正常工作。但是,这种方法只能通过 HBase-API 处理 HBase 内的数据。在构建数据立方体时,它不能提升任何 Map-Reduce 风格的工作。我更喜欢一些与 BigData 兼容的替代方案,例如通过 Apache Hive。

Saiku 基于蒙德里安。我的 Saiku 版本使用Mondrian-4.0.0.0-SNAPSHOT.jar,我发现它已经可以很好地与 Hive 配合使用。而且我发现 Saiku 的 lib 目录中有很多 Hive-0.13 的 jar。所以我认为 hive2 数据源的简单配置可以工作。我在我的 HDFS 集群的 namenode 中启动了一个 hiveserver2,并将以下数据源添加到 saiku。

Name: hive2
Connection Type: Mondrian
URL: jdbc:hive2://localhost:10000/default
Schema: /datasources/movie.xml
Jdbc Driver: org.apache.hive.jdbc.HiveDriver
Username: ubuntu
Password: XXXX

saiku 确实成功连接到 hiveserver2 但未能加载数据源。我在 saiku 日志中发现以下错误:

name:hive2
driver:mondrian.olap4j.MondrianOlap4jDriver
url:jdbc:mondrian:Jdbc=jdbc:hive2://localhost:10000/default;Catalog=mondrian:///datasources/movie.xml;JdbcDrivers=org.apache.hive.jdbc.HiveDriver
12:41:48,110 WARN  [RolapSchema] Model is in legacy format
12:41:50,464 ERROR [SecurityAwareConnectionManager] Error connecting: hive2
mondrian.olap.MondrianException: Mondrian Error:Internal error: while quoting identifier
    at mondrian.resource.MondrianResource$_Def0.ex(MondrianResource.java:992)
    at mondrian.olap.Util.newInternal(Util.java:2543)
    at mondrian.spi.impl.JdbcDialectImpl.deduceIdentifierQuoteString(JdbcDialectImpl.java:245)
    at mondrian.spi.impl.JdbcDialectImpl.<init>(JdbcDialectImpl.java:146)
    at mondrian.spi.DialectManager$DialectManagerImpl$1.createDialect(DialectManager.java:210)
...
Caused by: java.sql.SQLException: Method not supported
    at org.apache.hive.jdbc.HiveDatabaseMetaData.getIdentifierQuoteString(HiveDatabaseMetaData.java:342)
    at org.apache.commons.dbcp.DelegatingDatabaseMetaData.getIdentifierQuoteString(DelegatingDatabaseMetaData.java:306)
    at mondrian.spi.impl.JdbcDialectImpl.deduceIdentifierQuoteString(JdbcDialectImpl.java:238)
    ... 99 more

我查看了 hive 0.13 源。我发现 getIdentifierQuoteString 还没有实现,只是抛出一个异常。

   public String getIdentifierQuoteString() throws SQLException {                                                                                                             
     throw new SQLException("Method not supported");
   }

直到现在我都很困惑。将saiku与蜂巢一起使用是否实用?它的 lib 目录中有 Hive 0.13 jar,但无法加载简单的 hive 数据源?我是否应该简单地修改配置单元的来源。我在新发布的 Hive 1.0 中找到了。这个函数是通过简单的返回一个空字符串来实现的。

有人有好主意吗?谢谢!

4

0 回答 0