经过我们是Sqoop的简单安装,接下来我们就可以操作Hive、Hadoop、Mysql三者之间数据迁移,在开始操作之前,大家一定要检查三者是否可以正常运行,我在s201服务器上安装的Mysql和Sqoop还有Hadoop的名称节点,测试成功后,那我们就一起学习吧!
1.list-tables&list-databases命令操作
list-tables和list-databases两个命令都是针对关系型数据库(可以通过jdbc连接的数据库/数据仓库)而言的,我们一般可以通过该命令查看对应数据库中的table&database的列表。基本命令格式为: sqoop (list-tables|list-databases) --connect jdbc_url --username user_name --password user_pwd
实例:
$> sqoop list-tables --connect jdbc:mysql://s201:3306/test --username hive --password hive
结果:显示出test数据中的所有表名
2.create-hive-table命令操作
create-hive-table命令根据关系型数据库中的表创建Hive表,不进行数据的copy,只进行表结构的copy。如果Hive中存在要创建的表,默认情况下不进行任何操作。
命令格式:sqoop create-hive-table --connect jdbc_url --username db_name --password db_pwd --table db_table_name --hive-table hive_table_name
实例:
sqoop create-hive-table --connect jdbc:mysql://s201:3306/test --username hive --password hive --table teacher --hive-table hivetest

3.import命令操作
3.1 Mysql
-m 1:设置启动多少线程处理
案例1:将Mysql表test中的数据导入Hive的teacher 表,Hive的teacher表不存在。
sqoop import --connect jdbc:mysql://s201:3306/test --username hive --password hive --table teacher --hive-table teacher --hive-import -m 1

Mysql的数据文件存放目录:/user/hadoop
案例2:将teacher表的数据导入到hdfs中。 input文件夹不允许存在
sqoop import --connect jdbc:mysql://s201:3306/test --username hive --password hive --table teacher --target-dir /input -m 1
4.Export命令操作
Hive->Mysql
案例:hive表导出到Mysql中t2的表中 ,需要提前创建Mysql表
Hive默认的字段分隔符为'\001'
.$>sqoop export --connect jdbc:mysql://s201:3306/test --username hive --password hive --table t2 --export-dir /user/hive/warehouse/mydb.db/t2 --input-fields-terminated-by ','
Hdfs-->Mysql
需要提前创建Msyql表结构
数据如下:
t2.data与表数据列一直
1,zhangsan,20
2,lisi,30
$>sqoop export --connect jdbc:mysql://s201:3306/test --username hive --password hive --table t2 --export-dir /input/t2.data --input-fields-terminated-by ','
注意:Hive目录到表位置(文件夹) hdfs目录到文件
通过我们上面案例讲解大家可以通过Sqoop进行Hadoop、Hive、Mysql三者的导入和导出,方便解决项目中的数据迁移问题。