sqoop数据迁移
概述:
sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。
导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;
导出数据:从Hadoop的文件系统中导出数据到关系数据库mysql等
工作机制:是将导入和导出的命令翻译成mapreduce程序来实现,在翻译出的mapreduce中主要对inputformat和outputformat进行定制
sqoop安装
安装sqoop的前提是已经具备java和hadoop的环境
下载并解压
下载地址
http://archive.cloudera.com/cdh5/cdh/5/
sqoop1版本详细下载地址
http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.6-cdh5.14.0.tar.gz
sqoop2版本详细下载地址
http://archive.cloudera.com/cdh5/cdh/5/sqoop2-1.99.5-cdh5.14.0.tar.gz
这里我使用的是sqoop1的版本,下载之后上传到/export/softwares目录下,然后进行解压
cd /export/softwares
tar -zxvf sqoop-1.4.6-cdh5.14.0.tar.gz -C ../servers/
修改配置文件
cd /export/servers/sqoop-1.4.6-cdh5.14.0/conf/
cp sqoop-env-template.sh sqoop-env.sh
vim sqoop-env.sh
export HADOOP_COMMON_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
export HADOOP_MAPRED_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
export HIVE_HOME=/export/servers/hive-1.1.0-cdh5.14.0
加入额外的依赖包
sqoop的使用需要添加两个额外的依赖包,一个是mysql的驱动包,一个是java-json的的依赖包,不然就会报错
mysql-connector-java-5.1.40.jar
java-json.jar
将这两个jar包添加到sqoop的lib目录下
启动:
cd /export/servers/sqoop-1.4.6-cdh5.14.0
bin/sqoop-version
sqoop的数据导入
“导入工具”导入单个表从RDBMS到HDFS。表中的每一行被视为HDFS的记录。所有记录都存储为文本文件的文本数据(或者Avro、sequence文件等二进制数据)
列举所有的数据库
命令行查看帮助
bin/sqoop list-databases --help
列出所有的主机的数据库
bin/sqoop list-databases --connect jdbc:mysql://192.168.15.22:3306/ --username root --password root
查看某个数据库下的所有数据表
bin/sqoop list-tables --connect jdbc:mysql://192.168.15.22:3306/userdb --username root --password root
导入数据库表数据到hdfs
用下面命令从mysql数据库服务器包表emp表导到hdfs
–m启动一个maptask
bin/sqoop import --connect jdbc:mysql://192.168.15.37/userdb --username root --password root --table emp --m 1
验证是否导入成功
hdfs dfs -ls /user/root/emp
导入数据表到指定hdfs的目录
使用参数 --target-dir来指定导出目的地,
使用参数—delete-target-dir来判断导出目录是否存在,如果存在就删掉
bin/sqoop import --connect jdbc:mysql://192.168.15.37/userdb --username root --password root --table emp --m 1 --delete-target-dir --target-dir /sqoop/emp
查看导入的数据
hdfs dfs -text /sqoop/emp/part-m-00000
默认会使用逗号来分隔表中的数据和字段
1201,gopal,manager,50000,TP,2018-12-18 21:10:54.0,2018-12-18 21:10:54.0,1
导入hdfs指定目录并指定字段之间的分隔符