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