2017-01-24 5 views
1

Я создаю приложение для приема данных из базы данных MYSQL в таблицы удержания. Приложение будет планироваться каждый день.Итеративный рабочий процесс Oozie

Самое первое действие - прочитать таблицу Hive для загрузки информации таблицы импорта, например, имени, типа и т. Д., А также создать список таблиц в файле для импорта. Затем действие Sqoop для передачи данных для каждой таблицы в последовательности.

Возможно ли создать сценарий оболочки Oozie, который будет выполнять итерацию по списку таблиц и запустить действие Sqoop oozie для каждой таблицы в последовательности? Не могли бы вы предоставить некоторую ссылку? Также любое предложение лучшего подхода!

+0

Почему бы не использовать улей и действия sqoop непосредственно вместо действия оболочки. – YoungHobbit

+0

Я хочу перебирать список таблиц, поэтому я использую действие оболочки. действие сценария оболочки должно запускать вспомогательный рабочий процесс с помощью действия scoop для инкрементного импорта для каждой таблицы. – ravi

ответ

1

Я придумал следующий сценарий оболочки, содержащий действие Sqoop. Он отлично работает с некоторой настройкой переменных окружения.

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 
Смежные вопросы