写在前面
本博客基于的环境如下:
OS版本: centos7.5
Hadoop版本: Hadoop-2.6.5
Hive版本: Hive-1.2.2
Sqoop版本: Sqoop-1.4.7
目录
一、Sqoop安装
1、下载
2、解压
3、配置环境变量
4、Sqoop配置
5、mysql-connector-java放入
6、测试Sqoop
二、Sqoop:Mysql-and-Hive
1.在MySQL创建数据库表
2.插入测试数据
3.数据导入导出
4.sqoop导入Hive参数说明
5.sqoop导出MySQL参数说明
下载版本:sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
压缩包存放位置:/usr/local/src/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
注意注意:需要下载的是sqoop**_hadoop**这个版本,而不是sqoop-1.4.7.tar.gz
我们这里讲sqoop安装到/usr/local/src/下,下面将其解压到这个目录下,使用下面的命令:
cd /usr/local/src
tar -xzvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
解压之后的目录文件为/usr/local/src/sqoop-1.4.7.bin__hadoop-2.6.0,文件夹名称比较长,使用下面的命令重命名文件夹:
cd /usr/local/src
mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop-1.4.7
使用`sudo vi ~/.bashrc`打开配置文件,使用下面的语句配置环境变量:
export SQOOP_HOME=/usr/local/src/sqoop-1.4.7
export PATH=$PATH:$SQOOP_HOME/bin
使用source ~/.bashrc
使配置立即生效。
(1)sqoop-env.sh配置 sqoop-env.sh配置文件没有,我们需要将sqoop-env-template.sh复制为sqoop-env.sh,sqoop-env-template.sh在sqoop-1.4.6/conf中,命令如下:
cd /usr/local/src/sqoop-1.4.7/conf
cp sqoop-env-template.sh sqoop-env.sh
在/usr/local/src/sqoop-1.4.7/conf目录下使用sudo vi sqoop-env.sh打开配置文件,添加如下的配置,将所有变量的值变成相应软件的安装目录:
export HADOOP_COMMON_HOME=/usr/local/src/hadoop-2.6.1
export HADOOP_MAPRED_HOME=/usr/local/src/hadoop-2.6.1
export HIVE_HOME=/usr/local/src/apache-hive-1.2.2-bin
(2)configure-sqoop配置
configure-sqoop文件在/usr/local/src/sqoop-1.4.7/bin/configure-sqoop下,将目录切换至相应目录,使用vi打开文件,将HCatalog,Accumulo检查注释掉(除非你准备使用HCatalog,Accumulo等HADOOP上的组件) ,注释内容如下图:
将mysql-connector-java-5.1.42-bin.jar放入/usr/local/src/sqoop-1.4.7/lib/下,mysql-connector-java-5.1.42-bin.jar下载地址为:https://dev.mysql.com/downloads/connector/j/
根目录下执行sqoop version测试,成功之后sqoop的版本信息会给出,界面如下:
CREATE TABLE `testsqoop` (
`id` int(11) NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`age` int(11) NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `testsqoop` VALUES (1, '小米', 22);
INSERT INTO `testsqoop` VALUES (2, '小萌', 25);
INSERT INTO `testsqoop` VALUES (3, '小丽', 33);
(1)列出mysql数据库中的所有数据库命令
sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 123456
(2)连接mysql并列出数据库中的表命令
sqoop list-tables --connect jdbc:mysql://localhost:3306/test --username root --password 123456
(3)将关系型数据的表结构复制到hive中
sqoop create-hive-table --connect jdbc:mysql://localhost:3306/test --table username --username root --password 123456 --hive-database sqoop --hive-table test
(4)从关系数据库导入文件到hive中
sqoop import \
--connect "jdbc:mysql://192.168.10.1/test?useUnicode=true&characterEncoding=utf-8" \
--username test \
--password "#8lwAGoc9" \
--table testsqoop \
--delete-target-dir \
--hive-import \
--hive-database sqoop \
--hive-table testsqoop \
--fields-terminated-by '\t' \
--num-mappers 1
(5)将hive中的表数据导入到mysql中
sqoop export \
--connect "jdbc:mysql://192.168.10.1/test?useUnicode=true&characterEncoding=utf-8" \
--username test \
--password "#8lwAGoc9" \
--table testsqoop2 \
--export-dir /usr/local/src/apache-hive-1.2.2-bin/warehouse/sqoop.db/testsqoop \
--input-null-string '\\N' \
--input-null-non-string '\\N' \
--input-fields-terminated-by '\t' \
--num-mappers 1
注意:执行命令如果报下面错误的话请执行下面的命令:
ERROR hive.HiveConfig: Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly.
执行下面的命令解决:
ln -s /usr/local/src/apache-hive-1.2.2-bin/lib/hive-exec-1.2.2.jar hive-exec-1.2.2.jar
## sqoop命令
sqoop import
## 链接MySQL数据库url
--connect "jdbc:mysql://192.168.10.1/test?useUnicode=true&characterEncoding=utf-8" \
## 链接MySQL数据库用户名
--username test
## 链接MySQL数据库密码(如果密码有特殊符号需要加双引号)
--password "#8lwAGoc9"
## 链接MySQL数据库中的表
--table testsqoop
## 如果目标目录已存在,则先删除
--delete-target-dir
## 设置操作类型
--hive-import
## 指定hive中的数据库
--hive-database sqoop
## 指定hive中的表
--hive-table testsqoop
## 设置导入到hdfs文件的分隔符
--fields-terminated-by '\t'
## 设置map的个数
--num-mappers 1
## 备注:还可以加query参数,query参数是写sql使用的
## sqoop导出命令
sqoop export \
## 链接MySQL数据库url
--connect "jdbc:mysql://10.111.97.149:3306/test?useUnicode=true&characterEncoding=utf-8" \
## 链接MySQL数据库用户名
--username test
## 链接MySQL数据库密码(如果密码有特殊符号需要加双引号)
--password "#8lwAGoc9"
## 链接MySQL数据库中的表
--table testsqoop
## 设置hdfs文件所在的位置
--export-dir /usr/local/src/apache-hive-1.2.2-bin/warehouse/sqoop.db/testsqoop \
##避免导出有空值
--input-null-string '\\N' \
--input-null-non-string '\\N' \
## 设置hdfs文件导出的分隔符
--input-fields-terminated-by '\t' \
## 设置map的个数
--num-mappers 1
## 备注:还可以加columns参数,columns的值写字段
参考文档:
1.https://blog.csdn.net/quiet_girl/article/details/75144235
2.https://blog.csdn.net/qy20115549/article/details/53982119
3.https://blog.csdn.net/u013850277/article/details/78808631
4.https://www.cnblogs.com/xuyou551/p/7998846.html
5.https://blog.csdn.net/jiedushi/article/details/6663177
6.https://blog.csdn.net/volitationlong/article/details/80695658