Sqoop安装配置及Mysql->Hive数据导入实践

写在前面
本博客基于的环境如下:
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、下载


下载版本: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

2、解压

我们这里讲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

3、配置环境变量

使用`sudo vi ~/.bashrc`打开配置文件,使用下面的语句配置环境变量:

export SQOOP_HOME=/usr/local/src/sqoop-1.4.7
export PATH=$PATH:$SQOOP_HOME/bin

使用source ~/.bashrc使配置立即生效。

4、Sqoop配置

(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上的组件) ,注释内容如下图:

è¿éåå¾çæè¿°

5、mysql-connector-java放入

将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/

6、测试Sqoop


根目录下执行sqoop version测试,成功之后sqoop的版本信息会给出,界面如下:

 

二、Sqoop:Mysql-and-Hive

1.在MySQL创建数据库表

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;

2.插入测试数据

INSERT INTO `testsqoop` VALUES (1, '小米', 22);
INSERT INTO `testsqoop` VALUES (2, '小萌', 25);
INSERT INTO `testsqoop` VALUES (3, '小丽', 33);

3.数据导入导出

(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

4.sqoop导入Hive参数说明

## 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使用的

5.sqoop导出MySQL参数说明

## 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

发布了30 篇原创文章 · 获赞 20 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/YiWangJiuShiXingFu/article/details/100921026