2017-03-07 90 views
0

我有一个shell脚本,用于从MySQL to hdfs导入数据,即sqoop shell脚本。我想使用oozie安排sqoop导入作业。如何将shell脚本参数传递给oozie

脚本具有以下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

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

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

  1. 创建一个包含所有1000个表的属性文件。
  2. 要么通过替换属性文件中每个表的$表来生成上面的sqoop查询的shell脚本或java代码。即您将以1000个sqoop可执行查询结束。

既然您有一个可以动态生成并执行sqoop命令的shell脚本或java代码,您可以创建单个shell动作或java动作来通过oozie执行您的作业。

另外,并行运行太多的sqoop作业可能会耗尽JVM的RAM并影响性能。

+0

@ K S Nidhin我已经把所有1000个表放在一个文件中。这个文件我将作为参数传递。现在在哪个文件中应该存在上述查询中的所有变量 – User12345

相关问题