-
Sqoop将用户编写的sqoop命令翻译为MR程序,MR程序读取关系型数据库中的数据,写入到HDFS或读取HDFS上的数据,写入到关系型数据库
-
在MR程序中如果要读取关系型数据中的数据,必须制定输入格式为DBInputformat
-
在MR程序中如果要向关系型数据吸入数据,必须制定输出格式为DBOutputformat
-
Sqoop命令运行的MR程序,只有Map阶段,没有reduce阶段。只需要数据传输,不需要对数据进行合并和排序
Sqoop导入数据1导入到HDFS
全表导入
使用sqoop关键字筛选查询导入数据
使用查询语句导入
注意:
-
如果使用了–query,就不能指定–table,和–columns和–where
-
–query 和 –table一定不能同时存在!
-
–where和–query同时存在时,–where失效
-
–columns和–query同时存在时,–where无效!
-
–query 必须跟–target-dir
先导入hdfs
利用 load data 命令导入hive
-
Hive中的Null在底层是以“\N”来存储,而MySQL中的Null在底层就是Null,为了保证数据两端的一致性。
-
在导出数据时采用–input-null-string和–input-null-non-string两个参数。
-
导入数据时采用–null-string和–null-non-string。
当选用自动创建表时,如果版本不兼容会报错:
20/03/24 13:51:24 INFO mapreduce.HBaseImportJob: Creating missing HBase table t_emp
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/hbase/HColumnDescriptor;)V
此时只能自己手动创建或者可以重新编译sqoop源码
如果要多列族导入,只能多次运行命令,一次导入一个列族
Sqoop导出1表为空时
2表不为空时如果插入的数据的主键和表中已有数据的主键冲突,那么会报错
Duplicate entry '5' for key 'PRIMARY'
在mysql中
指定当插入时,主键重复时时,对于重复的记录,只做更新,不做插入!
而用sqoop时,则可以启用以下俩种模式
updateonly模式
利用 –update-key 字段 ,表示主键重复时会进行更新,但是主键不重复的时候,数据不会插入进来
allowinsert模式
表示主键重复时会进行更新,主键不重复的时候,数据也会插入进来