Sqoop导出Hadoop分区表数据到MySQL
前提: 目标表需要提前在MySQL数据库中创建。
将下列shell脚本命名为sqoop_ads_test_table_1d_to_MySQL.sh,直接复制即可,亲测可用.
echo "`date`--------将Hadoop分区数据同步到MySQL---------sqoop eval job start!!!!!"
# 将所需分区通过外部参数传入
dt=$1
hive_db_name=ads
hive_table_name=ads_test_table_1d
# MySQL结果表名
table_name=ads_test_table_1d
# 需要的字段
table_columns="id,name,phone"
# env test prod 通过设置env控制生产环境还是测试环境
env=prod
my_url="jdbc:mysql://192.168.10.xxx:3306/test"
username="root"
password=your_pwd
if [ $env = "prod" ] ;then
my_url="jdbc:mysql://192.168.10.xxx:3306/prod"
username="bigdata"
password=your_pwd
fi
# 由于是overwrite形式,需要先将目标表数据清除
echo "`date`----------sqoop eval job start!!!!!"
nohup sqoop eval \
--connect "${my_url}" \
--username ${username} --password "${password}" \
--query "delete from $table_name "
echo "`date`----------sqoop export job start!!!!!"
nohup sqoop export --hcatalog-database ${hive_db_name} \
--hcatalog-table ${hive_table_name} \
--hcatalog-partition-keys dt \
--hcatalog-partition-values ${dt} \
--connect "${my_url}" \
--username ${username} --password "${password}" \
--table $table_name \
--columns $table_columns
echo "`date`----------sqoop export job end!!!!!"
然后在虚拟机运行
sh sqoop_ads_test_table_1d_to_MySQL.sh '2023-04-01'
后边的日期即将hadoop中分区为2022-04-01的数据同步到MySQL。
后边将会分享同步Hadoop非分区表数据同步到MySQL.
最后,感谢大家的观看,有需要改进的地方希望大家在下方留言,关注我,有不懂的技术问题为你解决。