前置工具及环境
Hadoop 2.7.3
sqoop 1.4.6
mysql 8
mysql-connector-java-8.0.20.jar
java-json.jar
一、简介
Sqoop 是一个常用的数据迁移工具,主要用于在不同存储系统之间实现数据的导入与导出:
- 导入数据:从 MySQL,Oracle 等关系型数据库中导入数据到 HDFS、Hive、HBase 等分布式文件存储系统中;
- 导出数据:从 分布式文件系统中导出数据到关系数据库中。
其原理是将执行命令转化成 MapReduce 作业来实现数据的迁移。
二、安装
1、解压、配置环境变量
tar -zxvf sqoop-1.4.6.tar.gz
其他步骤略去。
2、修改环境文件
进入安装目录的conf下,拷贝模板
cp sqoop-env-template.sh sqoop-env.sh
在文件中修改hadoop的变量。
sqoop使用mapReduce处理数据,所以以下两个变量必须修改。
export HADOOP_COMMON_HOME=/usr/local/hadoop
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/usr/local/hadoop
3、加入jar包
在lib目录下加入Mysql和处理json的jar包。
mysql-connector-java-8.0.20.jar
# 处理json
java-json.jar
查看版本
$ sqoop version
Warning: /usr/local/sqoop/../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /usr/local/sqoop/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
20/11/12 14:34:17 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
Sqoop 1.4.6
git commit id
Compiled by jenkins on Tue Aug 23 00:56:12 PDT 2016
三、数据转换
1、查看mysql
没有mysql驱动会报错
#链接数据库,查看库
sqoop list-databases
--connect jdbc:mysql://ip:3306/
--username root
--password root
#连接数据库,查看表
sqoop list-tables
--connect jdbc:mysql://ip:3306/mysql
--username root
--password root
2、mysql-hdfs
将mysql数据导入hdfs
sqoop import
--connect jdbc:mysql://ip:3306/mysql
--username root
--password root
--table help_keyword # 待导入的表
--delete-target-dir # 目标目录存在则先删除
--target-dir /sqoop # 导入的目标目录
--fields-terminated-by ' ' # 指定导出数据的分隔符
-m 3
将hdfs数据导入mysql中
#mysql中需要预先建表
CREATE TABLE help_keyword_from_hdfs LIKE help_keyword ;
sqoop export
--connect jdbc:mysql://ip:3306/mysql
--username root
--password root
--table help_keyword_from_hdfs # 导出数据存储在 MySQL 的 help_keyword_from_hdf 的表中
--export-dir /sqoop
--input-fields-terminated-by ' '
--m 3
3、sqoop转换hbase、hive、mysql等
导入导出过程中可能会出现以下冲突:
主键错误
乱码