在特定队列上运行 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 队列中删除特定作业?