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

How to pass shell script arguments to a 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 个表,我想 运行 并行使用相同的脚本。

我该怎么做。谁能解释一下

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

有多种方法可以完成您的任务。我建议如下:

  1. 创建一个包含所有 1000 个 table 的 属性 文件。
  2. 有一个 shell 脚本或 java 代码来生成上面的 sqoop 查询,方法是为 属性 中的每个 table 替换 $table文件。即你最终会得到 1000 sqoop executable 查询。

现在您已经有了动态生成和执行 sqoop 命令的 shell 脚本或 java 代码,您可以创建单个 shell 操作或 java 操作来通过 oozie 执行你的工作。

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