由于 org.kitesdk.data.DatasetOperationException,sqoop 增量作业失败

sqoop incremental job is failing due to org.kitesdk.data.DatasetOperationException

我正在尝试使用 parquet 文件格式使用 sqoop 增量作业将数据从 oracle 导入到 hive table。但作业因以下错误而失败

Error: org.kitesdk.data.DatasetOperationException: Failed to append {"CLG_ID": "5",.....19/03/27 00:37:06 INFO mapreduce.Job: Task Id : attempt_15088_130_m_000_2, Status : FAILED

创建已保存作业的查询:

sqoop job -Dhadoop.security.credential.provider.path=jceks://xxxxx --create job1 -- import --connect "jdbc:oracle:thinxxxxxx" --verbose --username user1 --password-alias alisas --query "select CLG_ID,.... from CLG_TBL where $CONDITIONS" --as-parquetfile --incremental append --check-column CLG_TS --target-dir /hdfs/clg_data/ -m 1

导入查询:

sqoop job -Dhadoop.security.credential.provider.path=jceks:/xxxxx --exec job1 -- --connect "jdbc:oracle:xxx" --username user1 --password-alias alisas --query "select CLG_ID,.... from CLG_TBL where $CONDITIONS" --target-dir /hdfs/clg_data/ -m 1 --hive-import --hive-database clg_db --hive-table clg_table --as-parquetfile

此错误是一个已知问题。几周前我们遇到了同样的问题并且 找到了这个。

这里是 link.

问题或行为的描述

在 HDP 3 中,托管 Hive tables 必须是事务性的 (hive.strict.managed.tables=true)。 Hive 不支持 Parquet 格式的事务性 table。使用 --as-parquetfile 的 Hive 导入必须通过指定 --external-table-dir.

使用外部 tables

相关错误信息

Table db.table 由于 以下原因:Table 被标记为托管 table 但不是 事务性的。 解决方法

当使用 --hive-import--as-parquetfile 时,用户还必须提供 -- external-table-dir 具有 table:

的完全限定位置

sqoop 导入 ... --hive 导入 --as-parquetfile --external-table-dir hdfs:///path/to/table