sqoop

sqoop原理及一般使用

1.Sqoop原理

从传统数据库获取元数据信息(schema、table、field、field type),把导入功能转换为只有Map的Mapreduce作业,在mapreduce中有很多map,每个map读一片数据,进而并行的完成数据的拷贝。

在导入开始之前,Sqoop使用JDBC来检查将要导入的表。他检索出表中所有的列以及列的SQL数据类型。这些SQL类型(VARCHAR、INTEGER)被映射到Java数据类型(String、Integer等),在MapReduce应用中将使用这些对应的java类型来保存字段的值。Sqoop的代码生成器使用这些信息来创建对应表的类,用于保存从表中抽取的记录

2.Sqoop使用

一般先建hive表再导入,创建Hive表时的分隔符必须和导入时指定的分割相同。

1.先到hdfs再load到hive
 bin/sqoop import \
 --connect jdbc:mysql://172.16.71.27:3306/babasport \
 --username root \
 --password root \
 --query 'select id, brand_id,name from bbs_product where $CONDITIONS LIMIT 100' \
 --target-dir /user/xuyou/sqoop/imp_bbs_product_sannpy_ \
 --delete-target-dir \
 --num-mappers 1 \
 --compress \
 --compression-codec org.apache.hadoop.io.compress.SnappyCodec \
 --fields-terminated-by '\t'





 load data inpath '/user/xuyou/sqoop/imp_bbs_product_sannpy_' into table default.hive_bbs_product_snappy PARTITION (day='2018-01-01');
2.导入到指定hive表下
 sqoop import \
 --connect jdbc:mysql://hadoop001:3306/sqoop \
 --username root \
 --password 123456 \
 --table emp_etl \
 -m 1 \
 --hive-import \
 --hive-table  emp \
 --fields-terminated-by '\t' 
 –hive-overwrite   //表示覆盖原有数据
3.导入到指定hive表分区下
 sqoop import \
 --connect jdbc:mysql://hadoop001:3306/sqoop \
 --username root \
 --password 123456 \
 --table emp_etl \
 -m 1 \
 --hive-import \
 --hive-table  emp_part \
 --fields-terminated-by '\t' \
 --hive-partition-key 'day' \
 --hive-partition-value '2018-08-08'

参考文章:

http://student-lp.iteye.com/blog/2157983

https://blog.csdn.net/zhongwen7710/article/details/40032265

https://blog.csdn.net/gavin_chun/article/details/78314065