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 '\001' 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 "\001"
--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;