gpt4 book ai didi

oracle - Sqoop 作业因 Oracle 导入的 KiteSDK 验证错误而失败

转载 作者:可可西里 更新时间:2023-11-01 14:36:55 25 4
gpt4 key购买 nike

我正在尝试运行 Sqoop 作业以从 Oracle 数据库加载并以 Parquet 格式加载到 Hadoop 集群。这项工作是增量的。

Sqoop 版本为 1.4.6。甲骨文版本是12c。 Hadoop 版本为 2.6.0(发行版为 Cloudera 5.5.1)。

Sqoop 命令是(创建作业并执行它):

$ sqoop job -fs hdfs://<HADOOPNAMENODE>:8020 \
--create myJob \
-- import \
--connect jdbc:oracle:thin:@<DBHOST>:<DBPORT>/<DBNAME> \
--username <USERNAME> \
-P \
--as-parquetfile \
--table <USERNAME>.<TABLENAME> \
--target-dir <HDFSPATH> \
--incremental append \
--check-column <TABLEPRIMARYKEY>

$ sqoop job --exec myJob

执行错误:

16/02/05 11:25:30 ERROR sqoop.Sqoop: Got exception running Sqoop:
org.kitesdk.data.ValidationException: Dataset name
05112528000000918_2088_<USERNAME>.<TABLENAME>
is not alphanumeric (plus '_')
at org.kitesdk.data.ValidationException.check(ValidationException.java:55)
at org.kitesdk.data.spi.Compatibility.checkDatasetName(Compatibility.java:103)
at org.kitesdk.data.spi.Compatibility.check(Compatibility.java:66)
at org.kitesdk.data.spi.filesystem.FileSystemMetadataProvider.create(FileSystemMetadataProvider.java:209)
at org.kitesdk.data.spi.filesystem.FileSystemDatasetRepository.create(FileSystemDatasetRepository.java:137)
at org.kitesdk.data.Datasets.create(Datasets.java:239)
at org.kitesdk.data.Datasets.create(Datasets.java:307)
at org.apache.sqoop.mapreduce.ParquetJob.createDataset(ParquetJob.java:107)
at org.apache.sqoop.mapreduce.ParquetJob.configureImportJob(ParquetJob.java:80)
at org.apache.sqoop.mapreduce.DataDrivenImportJob.configureMapper(DataDrivenImportJob.java:106)
at org.apache.sqoop.mapreduce.ImportJobBase.runImport(ImportJobBase.java:260)
at org.apache.sqoop.manager.SqlManager.importTable(SqlManager.java:668)
at org.apache.sqoop.manager.OracleManager.importTable(OracleManager.java:444)
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:497)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:605)
at org.apache.sqoop.tool.JobTool.execJob(JobTool.java:228)
at org.apache.sqoop.tool.JobTool.run(JobTool.java:283)
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)
at org.apache.sqoop.Sqoop.main(Sqoop.java:236)

故障排除步骤:

0) HDFS 稳定,其他 Sqoop 作业正常运行,Oracle 源数据库已启动并且已测试连接。

1) 我尝试在 Oracle 中创建一个同义词,这样我就可以简单地将 --table 选项设置为:

--表TABLENAME(没有用户名)

这给了我一个表名不正确的错误。 --table 选项需要完整的 USERNAME.TABLENAME。

错误:

16/02/05 12:04:46 ERROR tool.ImportTool: Imported Failed: There is no column found in the target table <TABLENAME>. Please ensure that your table name is correct.

2) 我确定这是一个 Parquet 问题。我删除了 --as-parquetfile 选项,工作成功

3) 我想知道这是否是由增量选项引起的。我删除了 --incremental append & --check-column 选项,工作成功。这让我很困惑。

4) 我用 MySQL 尝试了这项工作,它成功

有人遇到过类似的事情吗?有没有办法(或者甚至建议)禁用风筝验证?似乎数据集是用点(“.”)创建的,然后 Kite SDK 提示 - 但这是我的假设,因为我不太熟悉 Kite SDK。

提前致谢

何塞

最佳答案

已解决。 JDBC 与 Oracle 12c 的连接似乎存在一个已知问题。使用特定的 OJDBC6(而不是 7)就可以了。仅供引用 - OJDBC 安装在/usr/share/java/中,符号链接(symbolic link)创建在/installpath.../lib/sqoop/lib/

关于oracle - Sqoop 作业因 Oracle 导入的 KiteSDK 验证错误而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35276816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com