2012-10-09 45 views
1

我正在使用Sqoop v1.4.2执行带作业的增量导入。这些作业是:
--create job_1 -- import --connect <CONNECT_STRING> --username <UNAME> --password <PASSWORD> -m <MAPPER#> --split-by <COLUMN> --target-dir <TARGET_DIR> --table <TABLE> --check-column <COLUMN> --incremental append --last-value 1
上次修改的Sqoop增量类型不会执行增量导入

注:

  1. 增量类型是追加
  2. 创造就业机会是成功的
  3. 工作的执行是成功的重复次数
  4. 可以看到新行在HDFS中导入

--create job_2 -- import --connect <CONNECT_STRING> --username <UNAME> --password <PASSWORD> -m <MAPPER#> --split-by <COLUMN> --target-dir <TARGET_DIR> --table <TABLE> --check-column <COLUMN> --incremental lastmodified --last-value 1981-01-01

注:

  1. 增量型的LastModified
  2. 创造就业机会是成功的,表名是不同于在job_1使用
  3. 作业执行仅获第一次
  4. C一看行正在进口的第一次执行中HDFS
  5. 后续作业执行失败,以下错误:

    ERROR security.UserGroupInformation: PriviledgedActionException as:<MY_UNIX_USER>(auth:SIMPLE) cause:org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory <TARGET_DIR_AS_SPECIFIED_IN_job_2> already exists 
    ERROR tool.ImportTool: Encountered IOException running import job: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory <TARGET_DIR_AS_SPECIFIED_IN_job_2> already exists 
        at org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:132) 
        at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:872) 
        at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:833) 
        at java.security.AccessController.doPrivileged(Native Method) 
        at javax.security.auth.Subject.doAs(Subject.java:396) 
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1177) 
        at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:833) 
        at org.apache.hadoop.mapreduce.Job.submit(Job.java:476) 
        at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:506) 
        at org.apache.sqoop.mapreduce.ImportJobBase.runJob(ImportJobBase.java:141) 
        at org.apache.sqoop.mapreduce.ImportJobBase.runImport(ImportJobBase.java:202) 
        at org.apache.sqoop.manager.SqlManager.importTable(SqlManager.java:465) 
        at org.apache.sqoop.manager.MySQLManager.importTable(MySQLManager.java:108) 
        at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:403) 
        at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:476) 
        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:145) 
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65) 
        at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:181) 
        at org.apache.sqoop.Sqoop.runTool(Sqoop.java:220) 
        at org.apache.sqoop.Sqoop.runTool(Sqoop.java:229) 
        at org.apache.sqoop.Sqoop.main(Sqoop.java:238) 
        at com.cloudera.sqoop.Sqoop.main(Sqoop.java:57) 
    
+0

你是怎么解决这个问题的? –

+0

坦率地说,我搬到了下一个项目,所以不知道。大数据/ sqoop不是我的核心能力,所以没有太多麻烦去检查。我的歉意,我忍不住。 – San

+0

这个问题的问题是你在两个工作中的输出是相同的。 --target-dir 。对于每个作业,这应该是不同的,或者每个作业在运行之前应该删除当前文件。 – Bob

回答

0

如果你想再次执行job_2又一次,那么你需要使用--incremental lastmodified --append

sqoop --create job_2 -- import --connect <CONNECT_STRING> --username <UNAME> 
--password <PASSWORD> --table <TABLE> --incremental lastmodified --append 
--check-column<COLUMN> --last-value "2017-11-05 02:43:43" --target-dir 
<TARGET_DIR> -m 1