目录
需求背景
根据业务情况,需要通过sqoop+mysql+hive定时拉取数据。业务数据通过sqoop+mysql落地到hive;ETL结果数据通过sqopp+hive落地到mysql。
解决方案
通过大数据组件HUE+OOZIE调度shell脚本执行sqoop命令,方便管理,方便排错。
实施方法
1.编写shell文件
sqoop-mysql2hive.sh
#!/bin/bash
# 如果是输入的日期按照取输入日期;如果没输入日期取当前时间的前一天
#do_date=$(date -d "-1 day" +%F)
if [ -n "$1" ]; then
do_date=$1
else
do_date=$(date -d "-1 day" +%F)
fi
jdbc_url_dduser="jdbc:mysql://xxx:13306/dduser?serverTimezone=Asia/Shanghai&characterEncoding=utf8&tinyInt1isBit=false"
jdbc_username=root
jdbc_password=123456
echo "===开始从mysql中提取业务数据日期为 $do_date 的数据==="
#sqoop-mysql2hive-appconfig
sqoop import --connect $jdbc_url_dduser --username $jdbc_username --password $jdbc_password --table app_config --hive-overwrite --hive-import --hive-table dd_database_bigdata.ods_app_config --target-dir /warehouse/dd/bigdata/ods/tmp/ods_app_config --hive-drop-import-delims -m 1 --input-null-string '\\N' --input-null-non-string '\\N'
echo "===从mysql中提取日期为 $do_date 的数据完成==="
语句解释:
shell文件中定义一个变量,直接定义比如:jdbc_username=root,使用此参数:$jdbc_username
shell中前一天`date -d "-1 day" +%F`,当日`date +%F`
shell action需要传参时,HUE上规定是使用$1,$2,$3这种方式,后面创建Schedule时会讲到。
2.将sh文件放到hdfs上
/warehouse/dd/oozie/workspace/workspace-sqoop-hive2mysql-now/shell/sqoop-hive2mysql-now-shell.sh
3.创建workflow
4.执行测试
程序执行可在job中查看执行情况
5.创建coordinate调度
from开始时间如果选择了之前的时间,任务创建执行后,会先执行多个job弥补选择的时间差。
比如:我们每时10分的任务,当前时间是12点15分,from选择了12点0分,执行这个coordinate时,会立即执行一个job workflow,是执行的12点10分的任务。所以这个from我们只需要创建时默认当时的时间即可。
6.执行coord