如何将shell脚本参数传递给oozie

时间:2017-03-07 06:32:54

标签: mysql shell hadoop oozie

我有一个shell脚本来从MySQL to hdfs导入数据,即sqoop shell脚本。我想使用oozie来安排sqoop导入作业。

该脚本具有以下sqoop query

sqoop import --connect ${domain}:${port}/${database} --username ${username} --password ${password} --query "select * from ${table} where  \$CONDITIONS" -m 1  --hive-import --hive-database ${hivedatabase} --hive-table ${table}  --target-dir  /user/hive/warehouse/${hivedatabase}.db/${table} 

我在另一个.sh文件中包含了所有这些参数。现在我想在workflow.xml文件中传递这些参数。或者我应该在job.properties文件中传递这些参数。

参数${table}是一个变量。有1000个表我想并行运行相同的脚本。

我该怎么做?请任何人解释

1 个答案:

答案 0 :(得分:1)

Oozie不支持循环操作,即你不能在循环中多次调用相同的动作。

您的任务有多种方式。我建议如下:

  1. 创建一个包含所有1000个表的属性文件。
  2. 要么有shell脚本或java代码,要通过替换属性文件中每个表的$ table来生成上面的sqoop查询。即最终会得到1000平方的可执行查询。
  3. 既然你有一个动态生成并执行sqoop命令的shell脚本或java代码,你可以创建单个shell动作或java动作来通过oozie执行你的工作。

    此外,并行运行太多sqoop作业可能会耗尽您的JVM内存并对性能产生影响。