Sqoop的使用
1、 上传并解压
2、 修改sqoop/conf/sqoop=env.sh
分别输入hadoop,hadoop,hive,zookeeperconf的目录
3、 导入jdbc的jar包
4、 进入到sqoop/bin目录下
5、 从mysql到导入
(1) mysql上传到hdfs
(2) 导入到hive中
注:如需指定hive的table名,需要添加--hive-table t_1
(3) 其他参数:
指定查询:
1)query
--query ‘selectid,name from t_1 where id<10 and $CONDITIONS’
--split-by‘id’ //以插入的哪一列作为主键
--target-dir‘/aa/bb’
2)columns
--columns ‘id,name’
3)where
--where ‘id>10’
类型匹配:(把原来的类型转换成指定的类型)
--map-column-hive columnName=valueType
空值转换:(把数据库中的”null”字符串替换成null)
--null-string'\\N'
--null-non-string '\\N'
分隔符:
--lines-terminated-by‘\n’
--fields-terminated-by‘\t’
封闭字符:(用于封闭每个字段的内容)
--enclosed-by” //所有封闭
--optionally-enclosed-by ” //选择性封闭
增量导入:
--check-column
用来指定一些列,这些列在增量导入时用来检查这些数据是否作为增量数据进行导入,和关系型数据库中的自增字段及时间戳类似。
注意:这些被指定的列的类型不能使任意字符类型,如char、varchar等类型都是不可以的,同时–check-column可以去指定多个列。
--incremental
用来指定增量导入的模式,两种模式分别为Append和Lastmodified
--last-value
指定上一次导入中检查列指定字段最大值
--merge-key id
把id相同的数据汇总成一条数据,主要用于Lastmodified模式
例如:sqoop export --connect jdbc:mysql://192.168.80.11:3306/test \
--username root -P \
--export-dir ‘aa/bb’ \
----check-column ‘id’ \
--incremental append \
--last-value ‘5’
或者:
sqoop export --connectjdbc:mysql://192.168.80.11:3306/test \
--username root -P \
--export-dir ‘aa/bb’ \
----check-column ‘modifieddate’ \
--incremental lastmodified\
--last-value ‘2018-8-11 12:54’
但是这样会把所有时间大于2018-8-11 12:54的导入,包括修改的数据,所以就需要加入--merge-key id 这个选项,这样就变成了把id相同的数据汇总成一条数据。如下:
sqoop export --connectjdbc:mysql://192.168.80.11:3306/test \
--username root -P \
--export-dir ‘aa/bb’ \
----check-column ‘modifieddate’ \
--incremental lastmodified\
--last-value ‘2018-8-11 12:54’
--merge-key id
很详细的增量导入讲解https://blog.csdn.net/qq_26937525/article/details/53670213
6、 从hdfs(hive)导出
(1) 从hadf导出:
sqoop export --connect jdbc:mysql://192.168.80.11:3306/test \
--username root -P \
--export-dir ‘aa/bb’ \
--input-fields-terminated-by ‘,’
(2) 从hive导出:
sqoop export --connect jdbc:mysql://192.168.80.11:3306/test \
--username root -P \
--export-dir ‘aa/bb’ \ //hive源文件存在hdfs的路径
--input-fields-terminated-by ‘\001’
--input-lines-terminated-by ‘\n’
(3) 其他参数:
--update-mode allowinsert //可以插入,可以更新
--update-key ‘id’ //按照哪一列进行更新或者插入