2017-01-24 126 views
1

我正在构建一个应用程序以将数据从MYSQL数据库提取到配置单元表。应用程序将计划每天执行。Oozie迭代工作流程

第一个操作是读取Hive表来加载导入表信息,例如名称,类型等,并在要导入的文件中创建表的列表。接下来是一个Sqoop操作,以按顺序为每个表传输数据。

是否有可能创建一个shell脚本Oozie动作,它将遍历表列表并按顺序为每个表启动oozie子工作流Sqoop动作?你能提供一些参考吗?还有更好的方法的任何建议!

+0

为什么不直接使用配置单元和sqoop动作而不使用shell动作。 – YoungHobbit

+0

我想遍历表列表,这就是为什么我使用shell操作。 shell脚本操作应使用scoop操作为每个表的增量导入启动子工作流。 – ravi

回答

1

我想出了以下包含Sqoop动作的shell脚本。它适用于一些环境变量的调整。

hdfs_path='hdfs://quickstart.cloudera:8020/user/cloudera/workflow/table_metadata' table_temp_path='hdfs://quickstart.cloudera:8020/user/cloudera/workflow/hive_temp   

if $(hadoop fs -test -e $hdfs_path) 
then 
for file in $(hadoop fs -ls $hdfs_path | grep -o -e "$hdfs_path/*.*"); 
do 
echo ${file} 
TABLENAME=$(hadoop fs -cat ${file}); 
echo $TABLENAME 
HDFSPATH=$table_temp_path 
sqoop import --connect jdbc:mysql://quickstart.cloudera:3306/retail_db --table departments --username=retail_dba --password=cloudera --direct -m 1 --delete-target-dir --target-dir $table_temp_path/$TABLENAME 
done 
fi