在cdh的namenode中,当我运行时 通过odbc脚本(php/perl或python)进行查询,我可以在 一个变量在大约30秒内完成,但当我在另一个远程2台服务器上尝试使用相同的脚本/查询时,执行时间是第一台服务器28分钟,第二台服务器17分钟。
为了排除假设这是网络速度问题,我在一个文件上获取结果,然后用scp命令将其复制到第一个远程服务器 服务器,它在40秒内完成。
我在cm的query info中观察到,线程之间有很大的不同:3个查询中的network send wait time值:
在nn查询中:9.40s
在第一个远程服务器中:16.7m
在里面 第二台远程服务器:26.8m
我还尝试了一个带有impalajdbc的java脚本,但是nn中的结果已经不能继续了。
但到目前为止,我还没有找到问题所在,也没有找到解决问题的方法。
注意:我正在开发cdh 5.12.0/impala 2.9.0, 我安装了impala odbc 2.5.37.1014。
2条答案
按热度按时间6bc51xsx1#
最后,经过近6个月的时间,我终于找到了解决办法!
这总是关于我的1024限制备注,行批限制是从批大小最大值(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\u batch\u 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
谢谢大家的回复。
1dkrff032#
没有提到使用的jdbc连接器版本。
集群中可能有多个服务器运行impala守护进程,请在jdbc连接url中进行相应的更改,并验证这些服务器上的性能。
以防万一你没查到文件(https://www.cloudera.com/documentation/enterprise/5-12-x/topics/impala_jdbc.html),请注意以下摘录:
与hive0.13相对应的最新jdbc驱动程序为返回大型结果集的impala查询提供了实质性的性能改进。impala 2.0及更高版本与hive 0.13驱动程序兼容。如果已经安装了较旧的jdbc驱动程序,并且运行的是impala 2.0或更高版本,请考虑升级到最新的配置单元jdbc驱动程序,以获得jdbc应用程序的最佳性能。
由于您使用的是远程计算机来访问impala,请参阅以下信息:
如果在cdh集群之外的主机上使用支持jdbc的应用程序,则不能在非cdh主机上使用cdh安装过程。在至少一个cdh主机上安装jdbc驱动程序。。。。然后将jar文件下载到每个使用jdbc和impala的客户机上。。。
如果之前没有这样做,请更新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连接字符串并检查日志:
;对数电平=6;logpath=/path/to/directory
参考文献2:https://issues.apache.org/jira/browse/impala-2651 您可以考虑以下设置:
设置disable_codegen=true;
更新2:我猜您的集群中至少有一个impala服务器上已经有了下面提到的jar。
请将这些jar复制到您试图通过jdbc代码访问impala的机器上。确保这些jar在类路径中并执行jdbc代码。