Sqoop简介
Sqoop: “SQL到Hadoop和Hadoop到SQL”
Sqoop是一种用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从MySQL,Oracle等关系数据库向Hadoop HDFS导入数据,并从Hadoop文件系统导出到关系数据库。
Sqoop命令
import数据导入
import:从MySQL导入到HDFS文件系统数据
–connect:数据库JDBC连接字符串jdbc:mysql://192.168.1.105:3306/sqoop_db
–username:数据库用户名
–password:数据库密码
–table:数据库表名
–columns:数据库列名
sqoop import \
--connect jdbc:mysql://192.168.1.105:3306/sqoop_db
--username root
--password root
--table product
--columns 'PRODUCT_ID,PRODUCT_NAME,LIST_PRICE,QUANTITY,CREATE_TIME'
导入表数据子集
我们可以使用Sqoop导入工具中的"where"子句导入表的子集。它在相应的数据库服务器中执行相应的SQL查询,并将结果存储在HDFS的目标目录中。
sqoop import
--connect jdbc:mysql://localhost/userdb
--username root
--table emp_add
--m 1
--where “city =’sec-bad’”
--target-dir /wherequery
增量导入表数据
增量导入是仅导入表中新添加的行的技术。需要添加“incremental”,“check-column”和“last-value”选项来执行增量导入。
Sqoop import命令中的增量选项使用以下语法。
--incremental <mode>
--check-column <column name>
--last value <last check column value>
sqoop import
--connect jdbc:mysql://localhost/userdb
--username root
--table emp
--m 1
--incremental append
--check-column id
-last value 1205
Sqoop将数据导到hbase
- mysql导入hbase可以直接通过sqoop进行
sqoop import
--connect jdbc:mysql://192.168.220.20:3306/test
--username root
--password 123456
--table smq_to_hbase
--hbase-table smq_hbase
--column-family info
--hbase-row-key id
通过Sqoop将Hbase导入到Mysql中
hbase导出到mysql无法直接通过sqoop进行,需要经过hive的中间作用来完成。顺序为:hbase→hive外部表→hive内部表→sqoop导出→mysql。
hbase外部表中映射了Hbase中的数据。真正的数据此时还是存在Hbase中的,所以需要先将外部表导入到内部表中再导出。
创建内部表
hive> CREATE TABLE test.employee(key INT,id INT,name STRING);
创建外部表与mysql中表的对应
CREATE EXTERNAL TABLE test.h_employee (key int,id int,name string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
"hbase.columns.mapping" =
":key,info:id, info:name"
)
TBLPROPERTIES( "hbase.table.name" = "employee",
"hbase.mapred.output.outputtable" = "employee");
hive外部表的数据导入内部表中
insert overwrite table test.employee select * from test.h_employee;
sqoop将hive表导入至mysql中
sqoop export -connect jdbc:mysql://192.168.220.20:3306/test -username root -password 123456 -tablemploye