我有一个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个表,我想并行运行相同的脚本。
我怎么能那样做。有人能解释一下吗
1条答案
按热度按时间kmbjn2e31#
oozie不支持循环操作,即不能在循环中多次调用同一操作。
有多种方法可以完成你的任务。我建议如下:
创建一个包含所有1000个表的属性文件。
通过替换属性文件中每个表的$table,可以使用shell脚本或java代码生成上面的sqoop查询。i、 e您将得到1000个sqoop可执行查询。
现在您有了一个shell脚本或java代码来动态生成和执行sqoop命令,您可以创建单个shell操作或java操作来通过oozie执行您的作业。
另外,并行运行过多的sqoop作业可能会耗尽jvm的ram,并影响性能。