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

标签 mysql shell hadoop oozie

我有一个 shell 脚本可以将数据从 MySQL 导入到 hdfssqoop 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 不支持循环操作,即您不能在循环中多次调用相同的操作。

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

  1. 创建包含所有 1000 个表的属性文件。
  2. 通过替换属性文件中每个表的 $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/

相关文章:

java - 我正在尝试使用Hadoop MapReduce计算文本文件中 “pairs of word”的出现次数

hadoop - hive 选择计数基于计数的平均值

mysql - Eloquent 中的 IN 语句

shell - 如何重定向 Tornado/VXWorks shell 输出?

shell - 如何使用awk去除标点符号?

linux - 在shell中获取程序执行时间

hadoop - DML over MetaStore在HIVE项目中的哪一类?哪个类选择MetaStore DB凭据?

MYSQL 多分组依据和最大值

mysql - MySQL 客户端和 PDO 如何使用 fetch 方法接收大结果

mysql - 在同一查询中使用查询结果