Sqoop导入MySQL数据到Hadoop分区表
目标表不需要在Hive中提前创建,Sqoop会根据MySQL数据类型在Hive中创建对应类型的表。
将下列shell脚本命名为sqoop_ads_test_table_1d_to_Hive.sh,直接复制即可,亲测可用.
#!/bin/bash
if [ -n "$1" ] ;then
load_date=$1
else
load_date=`date -d "-1 day" +%F`
fi
source_db=test_db
source_table=test_table
# test/prod来控制测试还是生产
env=prod
my_url="jdbc:mysql://10.10.10.10:3306/${source_db}"
username=your_name
password=your_pwd
if [ $env = "prod" ] ;then
my_url="jdbc:mysql://10.10.10.11:3307/${source_db}"
username=your_name
password=your_pwd
fi
query="select id,
name,
deleted
FROM ${source_db}.${source_table} WHERE 1=1 "
##### hive配置
hive_db=ods
hive_table=ods_${source_db}__${source_table}_1d
hive_partition=dt
hive_table_dir="/user/hive/warehouse/ods.db/${hive_table}"
echo "`date`----------sqoop import $table_name job start!!!!!"
nohup sqoop import --connect "${my_url}?useUnicode=true&tinyInt1isBit=false&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true" \
--username ${username} --password "${password}" \
--query " ${query} AND \$CONDITIONS" \
--hive-import --hive-database ${hive_db} \
--hive-table ${hive_table} \
--target-dir ${hive_table_dir}/dt=${load_date} \
--delete-target-dir \
--hive-partition-key ${hive_partition} \
--hive-partition-value ${load_date} \
--hive-drop-import-delims --null-string '\\N' \
--null-non-string '\\N' --split-by id \
--m 10 --verbose
echo "`date`----------sqoop import $table_name job end!!!!!"
echo "`date`----------ETL shop_ods data job end!!!!!"
然后在虚拟机运行
sh sqoop_ads_test_table_1d_to_Hive.sh '2023-04-02'
后边的日期即将MySQL数据同步到Hive表中的dt=2022-04-02分区中。
最后,感谢大家的观看,有需要改进的地方希望大家在下方留言,关注我,有不懂的技术问题为你解决。