【问题标题】:Impala ODBC/JDBC bad performance - rows fetch is very slow from a remote server compared with NNImpala ODBC/JDBC 性能不佳 - 与 NN 相比,从远程服务器获取行非常慢
【发布时间】:2017-10-21 18:11:05
【问题描述】:

在 CDH 的 NameNode 中,当我通过 odbc 脚本(php/perl 或 python)运行查询时,我可以在大约 30 秒内获取变量中的所有结果(9.2M,但是当我在另一台远程 2 服务器上尝试使用相同的脚本/查询时,执行时间在第一台服务器 28 分钟 和第二台服务器 17 分钟

为了排除这是网络速度问题的假设,我在一个文件中获取结果,然后使用 scp 命令将其复制到第一个远程服务器,并在 ~40 秒内完成。

我在 CM 的查询信息中观察到,3 个查询中的 Threads: Network Send Wait Time 值之间存在很大差异:
在 NN 查询中:9.40s
在第一个远程服务器中:16.7m
在第二个远程服务器中:26.8m

我还尝试了一个带有 Impala JDBC 的 java 脚本,但是 NN 中的结果已经不刺激继续了。

但到目前为止,我找不到问题出在哪里以及如何解决它。
NB:我正在开发 CDH 5.12.0/Impala 2.9.0,我已安装 Impala ODBC 2.5.37.1014。

【问题讨论】:

    标签: hadoop jdbc odbc impala unixodbc


    【解决方案1】:

    没有提及使用的 JDBC 连接器版本。

    您的集群中可能有不止一台服务器在运行 Impala 守护程序,请进行相应的更改 在您的 JDBC 连接 URL 中,并验证这些服务器上的性能。

    万一您错过了参考文档 (https://www.cloudera.com/documentation/enterprise/5-12-x/topics/impala_jdbc.html),请注意此摘录:

    最新的 JDBC 驱动,对应 Hive 0.13,提供 返回的 Impala 查询的显着性能改进 大型结果集。 Impala 2.0 及更高版本与 Hive 兼容 0.13 驱动程序。如果您已经安装了较旧的 JDBC 驱动程序,并且正在运行 Impala 2.0 或更高版本,请考虑升级到最新版本 Hive JDBC 驱动程序可实现 JDBC 应用程序的最佳性能。

    由于您使用远程计算机访问 Impala,请参阅以下信息:

    如果您在 CDH 之外的主机上使用支持 JDBC 的应用程序 集群,您不能在非 CDH 上使用 CDH 安装过程 主机。在至少一台 CDH 主机上安装 JDBC 驱动程序.... 然后 将 JAR 文件下载到将使用 JDBC 的每台客户端计算机 黑斑羚...

    如果之前没有完成,请更新 JDBC 连接器,并确保所有 impalad 实例都在运行。 然后比较ODBC和JDBC的性能结果。

    这个链接也值得参考: https://www.cloudera.com/documentation/enterprise/5-12-x/topics/impala_troubleshooting.html

    更新 1:

    参考#1:https://community.cloudera.com/t5/Interactive-Short-cycle-SQL/Impala-JDBC-10x-Slower-Vs-Shell/m-p/51779

    按照参考中的建议,尝试将以下参数添加到 JDBC 连接字符串并检查日志:

    ;LogLevel=6;LogPath=/path/to/directory

    参考#2:https://issues.apache.org/jira/browse/IMPALA-2651 您可以考虑以下设置:

    SET disable_codegen=true;

    更新 2:我猜你的集群中至少有一个 Impala 服务器中已经有了下面提到的这些 jar。

    commons-logging-X.X.X.jar
    hadoop-common.jar
    hive-common-X.XX.X-cdhX.X.X.jar
    hive-jdbc-X.XX.X-cdhX.X.X.jar
    hive-metastore-X.XX.X-cdhX.X.X.jar
    hive-service-X.XX.X-cdhX.X.X.jar
    httpclient-X.X.X.jar
    httpcore-X.X.X.jar
    libfb303-X.X.X.jar
    libthrift-X.X.X.jar
    log4j-X.X.XX.jar
    slf4j-api-X.X.X.jar
    slf4j-logXjXX-X.X.X.jar
    

    请将这些 jar 复制到您尝试通过 JDBC 代码访问 Impala 的机器上。确保这些 jar 在您的 classpath 中并执行 JDBC 代码。

    【讨论】:

    • 我会测试一下。
    • 更新了答案。调查是关于延迟的,日志可能会显示什么需要时间。
    • 由于问题仍然存在,生成一次日志并查看。您可能会发现一些有趣的东西。
    • 在您调整驱动程序配置之前,您能否在 NN 中使用相同的 JDBC 配置(不更改任何连接参数)运行 Java/JDBC 代码并共享结果? “我还尝试了一个带有 Impala JDBC 的 java 脚本,但 NN 中的结果已经不刺激继续”是什么意思。在你的问题?
    • 奇怪。请尝试使用最新的 Impala JDBC 驱动程序cloudera.com/documentation/other/connectors/impala-jdbc/…
    【解决方案2】:

    终于,在将近 6 个月后,我找到了解决方案!

    一直是关于我的 1024 限制备注,行批限制是从 BATCH_SIZE 最大值(1024)开始,在最新版本(CDH 5.14/Impala 2.11)中,我们有一个新的有效范围是 1-65536。

    1-1024:https://www.cloudera.com/documentation/enterprise/5-12-x/topics/impala_batch_size.html 1-65536:https://www.cloudera.com/documentation/enterprise/5-14-x/topics/impala_batch_size.html

    因此,当我通过带有 SSP_BATCH_SIZE 的 odbc.ini 增加它时,我可以受益于增加其他 odbc 参数(RowsFetchedPerBlock / TSaslTransportBufSize),并且可以在几秒钟内(~45 秒)而不是几十分钟内获取行。

    链接:http://community.cloudera.com/t5/Interactive-Short-cycle-SQL/Impala-ODBC-JDBC-bad-performance-rows-fetch-is-very-slow-from-a/m-p/61152

    感谢大家的回复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 2017-05-27
      • 2021-02-13
      相关资源
      最近更新 更多