章
目
录
一、下载Sqoop
1)Sqoop官网:点击访问官网
2)下载地址:Sqoop1.4.7版本下载
这里我们选择目前最新版1.4.7版本下载
二、安装与配置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_HOME
和HADOOP_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服务,新建一个名为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.7
的conf
目录下新建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
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
我们发现会警告如下(可忽略):
参考解决:
我们在搭建Sqoop之后开始运行迁移数据,可能会发现如下报错: Warning: /usr/sqoop/sqo […]
解决后再次执行,发现还是有错:
参考解决:
运行Sqoop是我们发现如下报错: Exception in thread "main" […]
我们再次执行,发现仍然有错,报错如下:
参考解决:
运行sqoop报错如下: 2021-05-18 10:03:22,120 ERROR manager.SqlM […]
最后,我们再去执行,发现成功运行。
4)查看HDFS中结果如下:
hdfs dfs -cat /sqoop/part-m-00000
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