我正在尝试运行Sqoop作业,从Oracle数据库加载到Parquet格式到Hadoop集群。这项工作是增量的。
Sqoop版本是1.4.6。 Oracle版本是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源DB已启动且连接已经过测试。
1)我尝试在Oracle中创建一个同义词,这样我就可以将--table选项简单地用作:
- 表格TABLENAME(不含用户名)
这给了我一个表名不正确的错误。它需要完整的USERNAME.TABLENAME作为--table选项。
错误:
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&amp; --check-column选项和工作成功。这让我很困惑。
4)我尝试使用MySQL的工作,成功。
有没有人碰到类似的东西?是否有办法(或甚至可取)禁用风筝验证?似乎数据集是用点(“。”)创建的,然后风筝SDK抱怨 - 但这是我的假设,因为我对Kite SDK不太熟悉。
提前致谢,
何
答案 0 :(得分:1)
解决。与Oracle 12c的JDBC连接似乎存在已知问题。使用特定的OJDBC6(而不是7)就可以了。仅供参考 - OJDBC安装在/ usr / share / java /中,并在/ installpath ... / lib / sqoop / lib /
中创建符号链接答案 1 :(得分:0)
破坏参数
Jan 23 15:09:54 foo bar
Jan 23 15:10:04 bla bla
分成单独的参数
--hive-table my_hive_db_name.my_hive_table_name
对我有用吗
我的环境是
--hive-database my_hive_db_name
--hive-table my_hive_table_name
Sqoop v1.4.7
提示:我在Hive 2.3.3
答案 2 :(得分:-1)
当我在CHD5.8上将所有表格导入镶木地板文件时,我也遇到了这个错误。通过查看错误消息,我觉得这个实现不支持名称中带有“ - ”的目录。基于这种理解,我从目录名称中删除了“ - ”并重新运行了sqoop import命令,所有工作正常。希望这有帮助!