sqoop导出笔记

背景信息

SQOOP支持直接从Hive表到RDBMS表的导出操作,也支持HDFS到RDBMS表的操作,
当前需求是从Hive中导出数据到RDBMS,有如下两种方案:

从Hive表到RDBMS表的直接导出:

该种方式效率较高,但是此时相当于直接在Hive表与RDBMS表的数据之间做全量、增量和更新对比,当Hive表记录较大时,或者RDBMS有多个分区表时,无法做精细的控制,因此暂时不考虑该方案。

从HDFS到RDBMS表的导出:

该方式下需要先将数据从Hive表导出到HDFS,再从HDFS将数据导入到RDBMS。虽然比直接导出多了一步操作,但是可以实现对数据的更精准的操作,特别是在从Hive表导出到HDFS时,可以进一步对数据进行字段筛选、字段加工、数据过滤操作,从而使得HDFS上的数据更“接近”或等于将来实际要导入RDBMS表的数据。在从HDFS导入RDBMS时,也是将一个“小数据集”与目标表中的数据做对比,会提高导出速度。

举例

HIVE导出到HDFS
./hive -e "insert overwrite directory '/user/sqoop/hive_export/xpydw/rpt_dispy_job_stats' row format delimited fields terminated by ' 01' null defined as '' stored as textfile select date_id,status,owner,category_name,res_host,job_cnt,error_times from xpydw.rpt_dispy_job_stats"
HDFS导出到mysql
./sqoop export -m 1 
--outdir /home/hadoop/bigdata/sqoop/outdir 
--fields-terminated-by " 01" 
--null-non-string ''
--null-string '' 
--connect jdbc:mysql://hupz.cn:3306/xpydw?characterEncoding=UTF-8 
--username dwopr --password * 
--table 'rpt_dispy_job_stats_sqp' 
--columns date_id,status,owner,category_name,res_host,job_cnt,error_times 
--export-dir /user/sqoop/hive_export/xpydw/rpt_dispy_job_stats
合并或替换目标表
alter table rpt_dispy_job_stats rename to rpt_dispy_job_stats_sqp_tmp;
alter table rpt_dispy_job_stats_sqp rename to rpt_dispy_job_stats;
alter table rpt_dispy_job_stats_sqp_tmp rename to rpt_dispy_job_stats_sqp;