在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。
答案 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:
根据参考中的建议,尝试将以下参数添加到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>
感谢所有人的回复。