Impala ODBC / JDBC性能不佳 - 与NN相比,远程服务器的行提取速度非常慢

时间:2017-10-21 18:11:05

标签: hadoop jdbc odbc impala unixodbc

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

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

我在CM的查询信息中观察到,3个查询中的线程:网络发送等待时间值之间存在很大差异:
在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。

2 个答案:

答案 0 :(得分: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 = /路径/到/目录

参考文献#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

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

答案 1 :(得分:0)

最后,差不多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秒)内取代行,而不是数十分钟。< / p>

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

感谢所有人的回复。