Impala 通过 JDBC 流式传输真的很慢

Posted

技术标签:

【中文标题】Impala 通过 JDBC 流式传输真的很慢【英文标题】:Impala streaming over JDBC is really slow 【发布时间】:2017-05-16 01:44:19 【问题描述】:

我使用 impala-shell 运行了几个大型查询,发现性能令人满意。这些查询通常将 100k-1m 行写入磁盘。但是,当我使用 JDBC 以编程方式运行相同的查询时,将结果写入磁盘需要更长的时间。例如,从 impala-shell 需要 5 分钟的查询在 JDBC 上最多需要 30 分钟。

我已经尝试过 Hive 和 Cloudera JDBC 驱动程序,但性能同样很差。我尝试了各种获取大小,但没有任何区别。 Impala 通过 JDBC 进行流式传输从根本上来说很慢,还是我可以做其他事情来加速流式传输?

这是在 CDH 5.9.1 上。

【问题讨论】:

“流媒体”是什么意思?你能举一个你正在运行的查询的例子吗? 基本上,如果您正在运行INSERT SELECT 查询,则数据不会由您的客户端应用程序传输,因此“获取大小”无效。而按顺序运行 1000 个小查询意味着创建至少 1000 个 HDFS 文件(复制 x3),这与运行一个大查询不同。 【参考方案1】:

结果证明这是一个客户端问题。我正在使用 curl 来测试一个进行 Impala 查询的 Web 应用程序。从 curl 切换到使用 Scala 代码编写的客户端消除了延迟。

【讨论】:

以上是关于Impala 通过 JDBC 流式传输真的很慢的主要内容,如果未能解决你的问题,请参考以下文章

通过 Spring JDBC 流式传输数据,长度未知

使用 ASP.NET Core 3 流式传输视频

JDBC 和 MySQL 真的很慢,不知道为啥

Postgres使用JDBC Kafka Connect进行流式传输

带有 MSSQL 的 Kafka JDBC 连接器仅流式传输 100 行

Impala 通过 jdbc 使元数据无效