【发布时间】:2021-01-15 05:27:32
【问题描述】:
我正在尝试使用 Hadoop Sqoop 从 Presto 数据库中提取数据,这会在 Presto 中引发此错误:
18/07/12 10:34:05 DEBUG manager.SqlManager: No connection paramenters specified. Using regular API for making connection.
18/07/12 10:34:06 ERROR manager.SqlManager: Error executing statement: java.sql.SQLException: [Teradata][Presto](100050) Query failed: Current transaction is aborted, commands ignored until end of transaction block.
java.sql.SQLException: [Teradata][Presto](100050) Query failed: Current transaction is aborted, commands ignored until end of transaction block.
at com.teradata.presto.presto.PRUtils.parseError(Unknown Source)
at com.teradata.presto.presto.dataengine.PRResultSet.parseDataString(Unknown Source)
at com.teradata.presto.presto.dataengine.PRResultSet.execute(Unknown Source)
at com.teradata.presto.presto.dataengine.PRResultSet.<init>(Unknown Source)
at com.teradata.presto.presto.dataengine.PRQueryExecutor.<init>(Unknown Source)
at com.teradata.presto.presto.dataengine.PRDataEngine.prepare(Unknown Source)
at com.teradata.presto.jdbc.common.SPreparedStatement.<init>(Unknown Source)
at com.teradata.presto.jdbc.jdbc41.S41PreparedStatement.<init>(Unknown Source)
at com.teradata.presto.jdbc.jdbc42.S42PreparedStatement.<init>(Unknown Source)
at com.teradata.presto.jdbc.jdbc42.JDBC42ObjectFactory.createPreparedStatement(Unknown Source)
at com.teradata.presto.presto.jdbc42.PRJDBC42ObjectFactory.createPreparedStatement(Unknown Source)
at com.teradata.presto.jdbc.common.SConnection.prepareStatement(Unknown Source)
at org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:744)
at org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:767)
at org.apache.sqoop.manager.SqlManager.getColumnInfoForRawQuery(SqlManager.java:270)
at org.apache.sqoop.manager.SqlManager.getColumnTypesForRawQuery(SqlManager.java:241)
at org.apache.sqoop.manager.SqlManager.getColumnTypes(SqlManager.java:227)
at org.apache.sqoop.manager.ConnManager.getColumnTypes(ConnManager.java:295)
at org.apache.sqoop.orm.ClassWriter.getColumnTypes(ClassWriter.java:1833)
at org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1645)
at org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:107)
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:478)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:605)
at org.apache.sqoop.Sqoop.run(Sqoop.java:143)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:218)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)
Presto DB 端没有错误。 Sqoop 命令:
sqoop-import \
--verbose \
--driver com.teradata.presto.jdbc42.Driver
--connect 'jdbc:presto://bla:8443/hive?SSL=true&SSLTrustStorePath=bla&SSLTrustStorePassword=bla' \
--username bla -P \
--table hive.bla.blah \
--m 2
Teradata Presto 驱动版本:PrestoJDBC42-1.0.21.1031.jar
【问题讨论】:
-
我很确定这个错误是因为之前的查询失败了。在日志中查找在此之前的失败查询。
-
您是否尝试过使用 Presto JDBC 驱动程序?
-
是的@DainSundstrom,在此之前确实有一个错误。这是错误:com.facebook.presto.spi.PrestoException:连接器支持的隔离级别 READ UNCOMMITTED 不符合请求的隔离级别 READ COMMITTED 虽然 sqoop 默认为“READ COMMITTED”,但我不知道为什么查询被设为“READ”未提交”隔离级别。可能 Presto 没有将隔离级别保留为事务序列的一部分。如果您对此有任何意见,请告诉我。
-
是的@DavidPhillips,我确实尝试了 com.facebook.presto.jdbc.PrestoDriver 和 com.teradata.presto.jdbc42.Driver。同样的问题。
-
Presto 连接的每个事物都有不同的功能。当目录被添加到事务中时,系统会验证连接器是否可以满足事务的要求。对于 Hive,连接器仅支持 READ UNCOMMITTED,因为一些 HDFS 客户端将未提交的数据保留在分区输出中(例如,标准 s3 行为)。