一、MYSQL ----> HIVE
1、考虑到安全性问题,我们会将数据库、服务器的连接信息放在一个配置脚本里,然后在执行脚本里调用这个配置脚本,从而使配置和执行进行解耦分离
2、配置脚本(db_config.sh)
!/bin/sh
jdbc=mysql://ip:3326/test
username=root
password=root
table=wb_robot
hive-database=zl_test
hive-table=t1
3、将MySQL历史全量数据进行导入到hive
!/bin/sh
# @date 2019-08-04
# mysql表按天分区全量导入hive库
source /etc/profile
## 设置时间
if [[ -z $1 ]]; then
datetime=`date -d "-1 day" +"%Y-%m-%d"`
else
datetime=$1
fi
echo "datetime:${datetime}"
statdate=`date -d "${datetime}" +"%Y%m%d"`
echo "statdate:${statdate}"
two_days_ago=`date -d "2 days ago" +"%Y-%m-%d"`
source /usr/local/zll/config/db_config.sh
/opt/cloudera/parcels/CDH/bin/sqoop import \
--connect ${jdbc} \
--username ${username} \
--password ${password} \
--table total \
--hive-database ods \
--hive-table t_ods_di_bank_messages \
--hive-partition-key ds \
--hive-partition-value $two_days_ago \
--hive-import \
--m 1
4、增量导入
#!/bin/sh
# @date 2019-08-04
# mysql表按天分区全量导入hive库
source /etc/profile
## 设置时间
if [[ -z $1 ]]; then
datetime=`date -d "-1 day" +"%Y-%m-%d"`
else
datetime=$1
fi
echo "datetime:${datetime}"
statdate=`date -d "${datetime}" +"%Y%m%d"`
echo "statdate:${statdate}"
two_days_ago=`date -d "2 days ago" +"%Y-%m-%d"`
source /usr/local/zll/config/db_config.sh
function wxrbt_senstv(){
echo "[`date +'%Y-%m-%d %H:%M:%S'`]"
echo "将敏感信息源表导入到hive的ods层"
echo " 按天分区,增量导入 mysql导入hive(t_ods_di_wxrbt_senstv)"
/opt/cloudera/parcels/CDH/bin/sqoop import \
--connect ${jdbc} \
--username ${username} \
--password ${password} \
--table sensitives \
--hive-database ods \
--hive-table t_ods_di_bank_senstv \
--hive-partition-key ds \
--hive-partition-value ${statdate} \
--incremental append \
--check-column dates \
--last-value $two_days_ago \
--hive-import \
--m 1
}
二、HIVE ----> MYSQL
将Hive表导入到MySQL,这里的Hive表一般是存放的指标数据,用于前后端的使用
#!/bin/sh
# @date
# mysql表按天分区全量导入hive库
source /etc/profile
## 设置时间
if [[ -z $1 ]]; then
datetime=`date -d "-1 day" +"%Y-%m-%d"`
else
datetime=$1
fi
echo "datetime:${datetime}"
statdate=`date -d "${datetime}" +"%Y%m%d"`
echo "statdate:${statdate}"
function wxrbt_total_cnt(){
echo "[`date +'%Y-%m-%d %H:%M:%S'`] mysql导入hive"
/opt/cloudera/parcels/CDH/bin/sqoop export --connect jdbc:mysql://ip:3326/ztdlk --username root --password root --table user_total_cnt --input-null-string '\\N' --input-null-non-string '\\N' --input-fields-terminated-by '\t' --export-dir /user/hive/warehouse/ads.db/t_ads_user_total_cnt/ds=20190812 --m 1
}
三、遇到问题:
解决方式:
1.检查一下两个表的字段是否对的上
2.类型
3.hive中有的null,需要添加语句
--input-null-string '\\N' --input-null-non-string '\\N' --input-fields-terminated-by '\t'