我有一个 shell 脚本可以将数据从 MySQL 导入到 hdfs
即 sqoop
shell 脚本。我想使用 oozie
来安排 sqoop 导入作业。
脚本有以下sqoop查询
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 查询。也就是说,您最终会得到 1000 个 sqoop 可执行查询。
既然您已经拥有动态生成和执行 sqoop 命令的 shell 脚本或 java 代码,您可以创建单个 shell 操作或 java 操作来通过 oozie 执行您的作业。
此外,并行运行过多的 sqoop 作业可能会耗尽 JVM 的 RAM 并影响性能。
关于mysql - 如何将 shell 脚本参数传递给 oozie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42641711/