如何将 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 不支持循环操作,即您不能在循环中多次调用相同的操作。
有多种方法可以完成您的任务。我建议如下:
- 创建一个包含所有 1000 个 table 的 属性 文件。
- 有一个 shell 脚本或 java 代码来生成上面的 sqoop 查询,方法是为 属性 中的每个 table 替换 $table文件。即你最终会得到 1000 sqoop executable 查询。
现在您已经有了动态生成和执行 sqoop 命令的 shell 脚本或 java 代码,您可以创建单个 shell 操作或 java 操作来通过 oozie 执行你的工作。
此外,运行 太多的并行 sqoop 作业可能会耗尽 JVM 的 RAM 并影响性能。
我有一个 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 不支持循环操作,即您不能在循环中多次调用相同的操作。
有多种方法可以完成您的任务。我建议如下:
- 创建一个包含所有 1000 个 table 的 属性 文件。
- 有一个 shell 脚本或 java 代码来生成上面的 sqoop 查询,方法是为 属性 中的每个 table 替换 $table文件。即你最终会得到 1000 sqoop executable 查询。
现在您已经有了动态生成和执行 sqoop 命令的 shell 脚本或 java 代码,您可以创建单个 shell 操作或 java 操作来通过 oozie 执行你的工作。
此外,运行 太多的并行 sqoop 作业可能会耗尽 JVM 的 RAM 并影响性能。