一.Sqoop简述
- Sqoop是一个用于在Hadoop和关系数据库之间传输数据的工具
-
将数据从RDBMS导入到HDFS(HDFS、Hive、HBase)
-
从HDFS导出数据到RDBMS
-
使用MapReduce导入和导出数据,提供并行操作和容错
-
二.数据导入、导出
MySQL导入数据到HDFS:命令汇总
//插入数据命令import
sqoop import
//配置连接MySQL中的数据库hr
--connect jdbc:mysql://localhost:3306/hr
--driver com.mysql.jdbc.Driver
//指定表
--table user
//(可选)指定where条件
[--where "id>'10'"]
//(可选)query就是导通入过查询语句获取的数据
//如果使用query就不需要--table以及--where
//结尾必须加上\$CONDITIONS,即使没有条件判断也需要where \$CONDITIONS做结尾
//query需要与--split...一起使用
[--query "select * from user where ... and \$CONDITIONS"]
//与query配合使用:指定用于分割数据的列
[--split-by 字段]
//(可选)导入指定列的数据
[--columns "字段,字段,字段,..."]
//配置MySQL用户名
--username root
//配置MySQL密码
--password hadoop
//(可选)Incremental指定增量导入的模式需要与--chech-column、--last-value一起使用
//增量导入方式为append追加数据至已经存在的HDFS数据集
//append:追加数据记录
//lastmodified:可追加更新的数据
[--incremental append/lastmodified]
//与Incremental配合使用:指定递增的列(建议设为主键)
[--check-column 字段]
//与Incremental配合使用:指定上一次导入的最大值:那么追加数据就会从这个最大值的后面开始增加
[--last-value '值']
//(可选)如果HDFS中的目标目录存在,则删除
[--delete-target-dir]
//设置存储到HDFS中的路径
--target-dir /data/user
//(可选)设定mapper数量
[--m 值]
//(可选)导入时指定文件格式
//不同的版本支持的格式可能会有差异
//格式:textfile(默认)、avrodatafile、sequencefile、parquetfile
[--as-testfile]
MySQL导入数据到Hive:命令汇总
数据导入hive操作需要先将hive/lib下的两个jar包复制到sqoop/lib下
hive-exec-…jar
hive-common-…jar
//插入数据命令import
sqoop import
//配置连接MySQL中的数据库hr
--connect jdbc:mysql://localhost:3306/hr
--driver com.mysql.jdbc.Driver
//指定MySQL表
--table user
//配置MySQL用户名
--username root
//配置MySQL密码
--password hadoop
//通过hive-import指定导入到Hive
--hive-import
//(可选)指定创建一个新的hive表(如果表已经存在则报错)
//自动创建表,生产中一般不使用
//与--hive-overwrit互斥
[--create-hive-table]
//指定已存在的库
--hive-database 库名
//指定hive表
--hive-table 表名
//(可选)指定分区字段
//sqoop不支持动态分区导入数据至hive中
[--hive-partition-key "分区字段名"]
//与partition-key配合使用:指定分区值
[--hive-partition-value "分区值"]
//覆盖原有表数据
[--hive-overwrite]
//(可选)指定mapper数
[--m 值]
MySQL导入数据到Hbase
//插入数据命令import
sqoop import
//配置连接MySQL中的数据库hr
--connect jdbc:mysql://localhost:3306/hr
--driver com.mysql.jdbc.Driver
//指定MySQL表
--table user
//配置MySQL用户名
--username root
//配置MySQL密码
--password hadoop
//指定导入数据的列
--columns "customernum, customername"
//创建hbase表
--hbase-table customercontactinfo
//指定列簇名
--column-family CustomerName
//指定rowkey对应的字段
//对应的字段必须select或colums中列出来
--hbase-row-key customernum
//指定mapper数量
-m 1
导出HDFS数据到MySQL
需要提前在在MySQL中创建表
//导出数据命令export
sqoop export
//配置连接MySQL数据库指定的库
--connect jdbc:mysql://localhost:3306/库名
//配置MySQL用户名
--username 用户名
//配置MySQL密码
--password 密码
//指定导至MySQL中的表
--table 表名
//指定HDFS数据路径
--export-dir /数据路径
//指定一下分隔符(默认^A,对应的值为001)
--input fields-terminated-by '\001'
//设置mapper数量
-m 值
创建Sqoop Job
sqoop job \
//-- import中间有个空格否则报错
--create Job名 -- import \
--connect jdbc:mysql://192.168.**.**:3306/库名 \
--....
--m 3
//调用Job
sqoop job --exec Job名