最近在复习sqoop使用,可以概括为全量导入HDFS/HIVE,查询导入HDFS/HIVE,增量导入HDFS/HIVE,导出。
一.sqoop全量导入HDFS
sqoop使用import命令来完成RDMS向HDFS或者HIVE导入数据。最基本的命令如下
sqoop import \
--connect jdbc:mysql://windows:3306/my_db2 \
--username root \
--password 123456 \
--table course \
--delete-target-dir \ -- 注意:要导入的路径必须不存在,不然的话会报错,因为是走的MR程序
--target-dir /1119/course -m 1
##注释:如果没有指定分隔符,默认是用逗号进行分割的。如果要制定分隔符,使用--fields-terminater-by
##注释:默认使用一个map程序进行导入,如果要使用多个并行导入的话,要么表有主键,要么根据--split-by进行切分,
##注释:如果是根据字符串切分的话 还要在import命令后边加上-Dorg.apache.sqoop.splitter.allow_text_splitter=true
##注释:其他常用命令
--compress 指定压缩 如果只写上边这个 其实就相当于与--compression-codec gzip
--compression-codec gzip 指定压缩格式 lzop,gzip,DEFLATE,bzip2,Snappy
--null-non-string '\N' 空值处理,非字符串类的空值
--null-string '\N' 空值处理,字符串类的空值
--as-avrodatafile 指定生成文件类型
--as-parquetfile 指定生成文件类型
--as-sequencefile 指定生成文件类型
--as-textfile 指定生成文件类型
二.sqoop全量导入Hive
sqoop import \
--connect jdbc:mysql://windows:3306/my_db2 \
--username root \
--password 123456 \
--table course \
--hive-import \
--delete-target-dir \
--hive-table ods1110.course \
--hive-overwrite \
-m 2 \
--hive-partition-key "ds" \
--hive-partition-value "20210127" \
##注释:要导入的hive表,可以不提前创建,也可以提前创建,如果要覆盖原来的数据,指定--hive-overwrite
三.条件导入HDFS和HIVE
条件导入HDFS HIVE(如果是--query则不能指定--table,且导入hive需要指定一个临时目录)
sqoop import \
--connect jdbc:mysql://windows:3306/my_db2 \
--username root \
--password 123456 \
--query 'SELECT cid,cname FROM course WHERE $CONDITIONS' \
--delete-target-dir \
--target-dir /1119/query -m 1
sqoop import \
--connect jdbc:mysql://windows:3306/my_db2 \
--username root \
--password 123456 \
--query 'SELECT cid,cname FROM course WHERE $CONDITIONS' \
--target-dir /tmp/1119 \
--hive-import \
--hive-table ods1110.query \
--hive-overwrite -m 1
四.增量导入append和lastmodified 两种模式
sqoop import \
--connect jdbc:mysql://windows:3306/my_db2 \
--username root \
--password 123456 \
--table course \
--target-dir /1119/append \
--incremental append \
--check-column cid \
--last-value 5 \
-m 1
#注释:append模式能够导入hive,lasdmodified模式不能导入hive
##注释:如果是lastmodified模式,那么不要写--delete-target-dir,否则会报错。append模式不会报错
##注释:如果是lastmodified模式,那么还要加一个--append追加,或者--merge-key id 合并
sqoop import \
--connect jdbc:mysql://windows:3306/my_db2 \
--username root \
--password 123456 \
--table testApp \
--target-dir /1119/append2 \
--incremental lastmodified \
--check-column mod_time \
--last-value "2022-11-21" \
--append \
-m 1
五.sqoop将数据导出到MySQL
sqoop export
--connect jdbc:mysql://windows:3306/my_db2
--username root
--password 123456
--table t1
--input-fields-terminated-by ','
--update-mode allowinsert
--update-key id
--export-dir '/user/hive/warehouse/t1'