【问题标题】:Sqoop incremental import argument order?Sqoop 增量导入参数顺序?
【发布时间】:2018-04-25 15:31:36
【问题描述】:

我正在尝试使用 mysql 中的 sqoop 导入增量负载。下面是我在 unix 控制台上运行的命令:

    sqoop job \
    --create sample_job --import -Dmapred.job.queue.name=realtime \
    --connect jdbc:mysql://hostname/db?zeroDateTimeBehavior=convertToNull \
    --driver com.mysql.jdbc.Driver \
    --table SAMPLE_TABLE -m 1 \
    --username tony \
    --password stark \
    --incremental lastmodified \
    --check-column ts \
    --last-value 2018-04-24 \
    --target-dir /some/tmp/location/ \
    --map-column-hive XYZ=tinyint \
    --null-string '\\N' \
    --null-non-string '\\N'

但是,得到一个典型的参数错误:

     /usr/hdp/2.6.4.0-91//sqoop/conf/sqoop-env.sh: line 21: HADOOP_CLASSPATH=${hcat -classpath}: bad substitution
     Warning: /usr/hdp/2.6.4.0-91/accumulo does not exist! Accumulo imports will fail.
     Please set $ACCUMULO_HOME to the root of your Accumulo installation.
     18/04/25 11:24:52 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6.2.6.4.0-91
     18/04/25 11:24:52 ERROR tool.BaseSqoopTool: Error parsing arguments for job:

我发现很多可用的资源展示了如何使用命令运行导入,但大多数资源没有显示确切的命令行并且传递了不正确的参数。我在某处看到参数的顺序很重要,因此尝试切换顺序但没有用。这是一个简单的问题,所以有人可以告诉我正确的语法吗?

提前致谢。

【问题讨论】:

    标签: hadoop hive sqoop cloudera hortonworks-data-platform


    【解决方案1】:

    我认为你的语法有问题。 https://sqoop.apache.org/docs/1.4.0-incubating/SqoopUserGuide.html#id1769640

    $ sqoop job --create myjob -- import --connect jdbc:mysql://example.com/db \
    --table mytable
    enter code here
    

    第一个参数之间有空格,请在导入参数之前用空格替换您的命令。

    sqoop job \
    --create sample_job -- import -Dmapred.job.queue.name=realtime \
    --connect jdbc:mysql://hostname/db?zeroDateTimeBehavior=convertToNull \
    --driver com.mysql.jdbc.Driver \
    --table SAMPLE_TABLE -m 1 \
    --username tony \
    --password stark \
    --incremental lastmodified \
    --check-column ts \
    --last-value 2018-04-24 \
    --target-dir /some/tmp/location/ \
    --map-column-hive XYZ=tinyint \
    --null-string '\\N' \
    --null-non-string '\\N'
    

    【讨论】:

    • 感谢您的帮助。我能够运行它,但必须删除 -Dmapred.job.queue.name=realtime 参数才能使其工作。知道如何包含它吗?
    • @StrangerThinks,执行时尝试添加已保存作业的参数:sqoop job --exec sample_job -- -Dmapred.job.queue.name=realtime
    • @IskuskovAlexander 谢谢。我能够解决问题
    • @StrangerThinks 我的解决方案对您有帮助吗?
    • @IskuskovAlexander 我仍然收到此错误:18/04/27 13:47:17 信息 sqoop.Sqoop:运行 Sqoop 版本:1.4.6.2.6.4.0-91 18/04/27 13:47:19 错误 tool.BaseSqoopTool:解析导入参数时出错:18/04/27 13:47:19 错误 tool.BaseSqoopTool:无法识别的参数:-Dmapred.job.queue.name=realtime 我正在运行命令ESPX。但是,我决定在当前环境中不需要队列参数。因此,没有必要,但最好知道如何解决此错误。
    【解决方案2】:

    它现在正在工作。 exec时需要传入参数,顺序如下:

    sqoop job -Dmapred.job.queue.name=realtime --meta-connect "jdbc:hsqldb:file:/tmp/sqoop-meta.db;shutdown=true" -exec
    

    【讨论】:

      猜你喜欢
      • 2016-03-27
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多