Cognos 报告 Hive 数据源很慢?

Posted

技术标签:

【中文标题】Cognos 报告 Hive 数据源很慢?【英文标题】:Cognos reporting on Hive datasource is very slow? 【发布时间】:2016-10-24 14:01:52 【问题描述】:

我是 Cognos 新手,正在尝试使用 Hive JDBC 驱动程序在 Hadoop 之上创建报告。我能够通过 JDBC 连接到 Hive 并且能够生成报告,但是这里的报告运行速度非常慢。我在连接 DB2 时做了同样的工作,并且数据与 Hadoop 中的数据相同。与 Hive 之上的报告相比,报告的运行速度非常快。我在 Hadoop 和 DB2 中使用相同的数据集,但无法弄清楚为什么 Hadoop 之上的报告非常慢。我以伪分布式方式安装Hadoop并通过JDBC连接。

我安装了以下我使用的软件版本,

带有修订包 11 的 IBM Cognos 10.2.1, Apache Hadoop 2.7.2, Apache Hive 0.12。

两者都安装在不同的系统中,Cognos 安装在 Windows 7 之上,Hadoop 安装在 Red-Hat 之上。

谁能告诉我在设置 Cognos 或 Hadoop 时我可能在哪里出错。有什么方法可以加快 Cognos 中基于 Hadoop 的报告运行时间。

【问题讨论】:

Hive 通常会比 RDBMS 慢。您是否直接在 Hive 中测试过您的查询? 有什么办法可以提高速度,因为报表运行速度很慢,一个简单的报表只需要2到3分钟的时间 【参考方案1】:

当您说您以伪分布式模式安装 Hadoop 时,您是说您只在单个服务器上运行它吗?如果是这样,它永远不会像 DB2 那样快。 Hadoop 和 Hive 旨在在集群和规模上运行。在一个集群中运行 3 或 4 台服务器,您应该会发现在大型数据集上可以开始看到一些令人印象深刻的查询速度。

检查您是否允许 Cognos 查询服务访问超过其 Java 堆 (http://www-01.ibm.com/support/docview.wss?uid=swg21587457) 的默认内存量.

您将遇到的下一个问题是 Cognos 不知道 Hive SQL 的细节(或者我正在使用的 Impala)。这意味着任何非基本查询都将被转换为 select from 和 group by。最大的缺失部分是 where 子句,这意味着 Cognos 将尝试从 Hive 表中提取所有数据,然后在 Cognos 中进行过滤,而不是将其传递给它所属的 Hive。 Cognos 知道如何编写 DB2 SQL 和所有细节,因此它可以通过该工作负载。

查询越复杂,或任何特定于平台的函数等通常不会传递给 Hive(日期函数、分析函数等),因此请尝试构建您的数据和查询,以便它们在过滤器中是必需的。

使用 Hive 查询日志来监控 Cognos 正在运行的查询。还可以尝试将字段添加到查询中,然后将该字段拖到过滤器中,而不是直接从模型中拖到过滤器中。我发现这有助于让 Cognos 将过滤器包含在 where 子句中。

另一种选择是在 Report Studio 中使用直通 SQL 查询并将其全部写入 Hive 的 SQL。我刚刚为一组仪表板完成了此操作,这些仪表板需要一个包含 500 万行的事实表中的前 5 个堆栈。对于 5 行,Cognos 提取所有 500 万行,然后在 Cognos 中对它们进行排名。多次这样做,突然间,Cognos 将陷入困境。通过直通查询,我可以使用 Impala Rank() 函数并且只得到 5 行,这比 DB2 看到我在一个合适的(但很小的)集群上运行时所做的要快得多。

使用 Hive 的另一个考虑因素是您是在 Map Reduce 上使用 Hive 还是在 TEZ 上使用 Hive。根据一位同事的发现,在 Cognos 运行的查询类型上,TEZ 上的 Hive 比 Map Reduce 上的 Hive 快得多。

【讨论】:

以上是关于Cognos 报告 Hive 数据源很慢?的主要内容,如果未能解决你的问题,请参考以下文章

各位,cognos active report和固定报表有啥区别

Cognos软件介绍文档

如何在 cognos 11.1 上计算 YoY?

cognos greenplum pg_catalog

在 Cognos PDF 报告中对超链接列进行分组

将Unicode字符添加到Cognos Analytics表达式数据中