Sqoop的安装与配置以及导入导出实例

大数据技术 潘老师 3年前 (2021-05-18) 1746 ℃ (0) 扫码查看

一、下载Sqoop

1)Sqoop官网:点击访问官网
2)下载地址:Sqoop1.4.7版本下载
这里我们选择目前最新版1.4.7版本下载
Sqoop的安装与配置以及导入导出实例

二、安装与配置Sqoop

1)我们将下好的sqoop上传到master主机的/usr/sqoop目录下(没有就新建),然后执行解压,由于原目录太长需要重命名下目录:

//解压
tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
//重命名
mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop-1.4.7

2)配置SQOOP_HOME

vi /etc/profile
//新增
export SQOOP_HOME=/usr/sqoop/sqoop-1.4.7
export PATH=$PATH:$SQOOP_HOME/bin
//生效
source /etc/profile

3)配置Sqoop的conf目录下核心配置文件sqoop-env.sh

//复制template模板
cp sqoop-env-template.sh sqoop-env.sh

编辑sqoop-env.sh,我们目前只放开HADOOP_COMMON_HOMEHADOOP_MAPRED_HOME的配置(如果你需要其他的也可以配置下),完整配置如下:

#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/usr/hadoop/hadoop-3.2.1

#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/usr/hadoop/hadoop-3.2.1

#set the path to where bin/hbase is available
#export HBASE_HOME=

#Set the path to where bin/hive is available
#export HIVE_HOME=

#Set the path for where zookeper config dir is
#export ZOOCFGDIR=

4)由于Sqoop要用到JDBC链接库,因此我们需要把MYSQL驱动复制到Sqoop的lib目录中,否则会报错。由于我在windows上安装的mysql是8.0版本的,所以导入8.0版本的驱动包。

如果你是其他数据库,则需要导入其他数据的驱动,另外注意驱动和数据库的版本匹配关系

三、导入导出案例

1、导入案例:MYSQL导入HDFS

1)启动本地MYSQL服务,新建一个名为sqooptest的数据库,然后新建一个user表,并插入几条记录:

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `age` int DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '小明', '10');
INSERT INTO `user` VALUES ('2', '小李', '15');
INSERT INTO `user` VALUES ('3', '小张', '20');
INSERT INTO `user` VALUES ('4', 'jack', '8');
INSERT INTO `user` VALUES ('5', 'peter', '30');

2)在sqoop-1.4.7conf目录下新建conf1文件,其内容如下:

import
--connect
jdbc:mysql://10.10.11.211:3306/sqooptest?useSSL=false&serverTimezone=UTC
--username
root
--password
123456
--table
user
--columns
id,name,age
--where
id>0
--target-dir
hdfs://master:9820/sqoop
--delete-target-dir
-m
1
--as-textfile
注意:如果出现中文乱码问题,需要再connect连接后面加上编码设置,具体如下:
jdbc:mysql://10.10.11.211:3306/sqooptest?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8

前面多行的配置含义大家一看便知,后面的几行:
a)--target-dir:指定导入HDFS的位置
b)--delete-target-dir:若目标目录存在,则删除
c)最后1行表示导入数据以文本格式存放在HDFS上
d)另外,sqoop的导入时候,默认导入后的文件的分割符为’ , ‘
如果想要指定分割符需要使用--fields-terminated-by "\t",代表以"\t"(tab)作为导入后文件的分隔符。
3)启动hadoop,执行sqoop

sqoop --options-file /usr/sqoop/sqoop-1.4.7/conf/conf1

我们发现会警告如下(可忽略):

Warning: /usr/sqoop/sqoop-1.4.7/../accumulo does not exist

参考解决:

解决Sqoop运行Warning: /usr/sqoop/sqoop-1.4.7/../accumulo does not exist

我们在搭建Sqoop之后开始运行迁移数据,可能会发现如下报错: Warning: /usr/sqoop/sqo […]

解决后再次执行,发现还是有错:

Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils

参考解决:

运行Sqoop报错解决: java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils

运行Sqoop是我们发现如下报错: Exception in thread "main" […]

我们再次执行,发现仍然有错,报错如下:

Error executing statement: java.sql.SQLException: null, message from server: “Host ‘Midlight’ is not allowed to connect to this MySQL server”

参考解决:

最后,我们再去执行,发现成功运行。
4)查看HDFS中结果如下:

hdfs dfs -cat /sqoop/part-m-00000

Sqoop的安装与配置以及导入导出实例

2、导出案例:HDFS导出至MYSQL

1)基于上个案例,先删除上个案例中的user表记录
2)在conf目录下新建conf2配置文件,如下:

export
--connect
jdbc:mysql://10.10.11.211:3306/sqooptest?useSSL=false&serverTimezone=UTC
--username
root
--password
123456
--table
user
--columns
id,name,age
--export-dir
hdfs://master:9820/sqoop
-m
1

3)执行如下指令:

sqoop --options-file /usr/sqoop/sqoop-1.4.7/conf/conf2

4)执行完后查看user表,发现数据都进来了

最后,大家可以自行研究:

1)如何导入MYSQL查询结果至HDFS
2)如何实现将MYSQL数据导入HIVE


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/java/bigdata/3176.html
喜欢 (13)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】