在特定队列上运行 sqoop 作业

Posted

技术标签:

【中文标题】在特定队列上运行 sqoop 作业【英文标题】:Run a sqoop job on a specific queue 【发布时间】:2016-06-07 09:54:57 【问题描述】:

我正在尝试创建一个 在特定队列中运行的 Sqoop 作业,但它不起作用。

我尝试了两件事:

1st:在作业创建中声明队列

sqoop job \
         --create myjob \
         -- import \
         --connect jdbc:teradata://RCT/DATABASE=MYDB \
         -Dmapred.job.queue.name=shortduration \
         --driver com.teradata.jdbc.TeraDriver \
         --username DBUSER -P \
         --query "$query" \
         --target-dir /data/source/dest/$i \
         --check-column DAT_CRN_AGG \
         --incremental  append \
         --last-value 2001-01-01 \
         --split-by NUM_CTR

但由于-Dmapred.job.queue.name=shortduration,它会引发解析参数错误

2nd :删除作业创建的-Dmapred.job.queue.name=shortduration。创造就业的效果很好。但无法指定应该使用哪个队列

我失去了在这个队列中运行我的工作的希望

感谢您提供的任何帮助!

编辑:使用sqoop import -Dmapred.job.queue.name=shortduration 进行导入,但sqoop 作业不工作

【问题讨论】:

【参考方案1】:

我认为你的命令有错误

-Dmapreduce.job.queuename=NameOfTheQueue

注意queuename一个字和顺序,根据文档,vm args需要导入后直接走。

https://sqoop.apache.org/docs/1.4.3/SqoopUserGuide.html#_using_generic_and_specific_arguments

通用 Hadoop 命令行参数: (必须在任何特定于工具的参数之前) 支持的通用选项是 -conf 指定应用程序配置文件 -D 给定属性的使用价值

sqoop job -Dmapred.job.queuename=shortduration \
         --create myjob \
         -- import  \
         --connect jdbc:teradata://RCT/DATABASE=MYDB \
         --driver com.teradata.jdbc.TeraDriver \
         --username DBUSER -P \
         --query "$query" \
         --target-dir /data/source/dest/$i \
         --check-column DAT_CRN_AGG \
         --incremental  append \
         --last-value 2001-01-01 \
         --split-by NUM_CTR

你可能只想用导入工具试试看它是否正常工作,然后执行作业命令,即

sqoop import -Dmapred.job.queuename=shortduration \
         --connect jdbc:teradata://RCT/DATABASE=MYDB \
         --driver com.teradata.jdbc.TeraDriver \
         --username DBUSER -P \
         --query "$query" \
         --target-dir /data/source/dest/$i \
         --check-column DAT_CRN_AGG \
         --incremental  append \
         --last-value 2001-01-01 \
         --split-by NUM_CTR

【讨论】:

仍然有同样的错误Unrecognized argument: -Dmapred.job.queuename=shortduration ...我不明白出了什么问题 最后使用sqoop import -Dmapred.job.queue.name=shortduration ...得到一个使用队列的导入 当然可以,但它不起作用。我认为在创建作业中给出队列有点复杂......

以上是关于在特定队列上运行 sqoop 作业的主要内容,如果未能解决你的问题,请参考以下文章

Beanstalkd 在伪造队列工作人员上同时运行队列中的所有作业

如何在不清除整个队列的情况下从 Resque 队列中删除特定作业?

ruby 清理特定sidekiq队列中的作业

Laravel 队列只运行一项工作

使用消息队列与使用 PHP 的普通 Cron 作业之间的区别

在作业中暂停队列