Presto(trino)就是个大坑,小心工具用错地方

1. 环境

组件名称版本
Hadoop3.1.3
Spark2.4.8
Hive3.1.3
Iceberg0.13.2
trino386

客户端查询时基本都用DBeaver工具来查询,
由于上了trino做连接器,集成了hive、MySQL、Phoenix、Kafka、Iceberg等组件,所以使用trino来做分析,特别方便。
今天我们在使用pyspark跑批任务时,使用了trino的jdbc连接iceberg表。

df_table = spark.read.format("jdbc") \
    .option("url", url + "/iceberg/iceberg_dw") \
    .option("driver", driver) \
    .option("user", user) \
    .option("dbtable", '(select * from iceberg.iceberg_dw.dw_test)') \
    .load()

2. 问题描述

当数据量不大时,没任何异常。
但是一旦数据量大,表数据有几十G(平时很正常大小),然后使用这种连接方式做聚合等操作时,就一直卡着很长时间执行不完。

3. 问题解决

后来换成pyspark直接读iceberg表,问题瞬间解决。

df_table = spark.read.format("iceberg").load("iceberg_dw.dw_test")

4. 总结

trino使用要谨慎,可以用在分析,或者前端连接查询等动作。
如果是后台批处理计算,还是老老实实使用spark直接读吧。
不过如果是视图,spark不能直接读,那就只能用trino的jdbc方式连接了。


版权声明:本文为wang6733284原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。