概览
1.sqoop简介
2.sqoop的安装和配置
3.测试
4.异常处理
1.sqoop简介
Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
sqoop 是 apache 旗下一款“Hadoop 和关系数据库服务器之间传送数据”的工具。
核心的功能有两个:导入和导出!
导入数据:MySQL,Oracle 导入数据到 Hadoop 的 HDFS、HIVE、HBASE 等数据存储系统
导出数据:从 Hadoop 的文件系统中导出数据到关系数据库 mysql 等 Sqoop 的本质还是一个命令行工具,和 HDFS,Hive 相比,并没有什么高深的理论。
sqoop:
工具:本质就是迁移数据, 迁移的方式:就是把sqoop的迁移命令转换成MR程序
hive
工具,本质就是执行计算,依赖于HDFS存储数据,把SQL转换成MR程序
工作原理是将导入或导出命令翻译成 MapReduce 程序来实现 在翻译出的 MapReduce 中主要是对 InputFormat 和 OutputFormat 进行定制
2.sqoop的安装和配置
软件:sqoop-1.4.7.bin__hadoop-2.6.0.tar
2.1.安装
在/usr下创建个sqoop文件夹,作为压缩包的存放路径和解压路径
1 | #进入/usr下 |
利用Xshell连接虚拟机,并利用Xftp将sqoop压缩包上传到sqoop文件夹下
解压sqoop
1 | [root@master sqoop]# tar -zxf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz |
2.2.配置profile环境变量
进入到根目录的etc文件夹下,更改profile文件
1 | [root@master sqoop]# vim /etc/profile |
在profile最后添加
1 | export SQOOP_HOME=/usr/sqoop/sqoop-1.4.7.bin__hadoop-2.6.0 |
保存退出,刷新profile
1 | [root@master sqoop]# source /etc/profile |
2.3拷贝驱动
将数据库连接驱动拷贝到$SQOOP_HOME(sqoop安装目录)/lib里
进入到你的sqoop安装目录的lib下,利用Xftp将驱动传输进去
我的mysql数据库连接驱动的百度云链接:https://pan.baidu.com/s/1wCBuZQaCP_nKT5t504SeoA
提取码:fakd
2.4.使用前准备,mysql允许远程连接
如果你在安装mysql的时候已经允许过了,就可以跳过这个步骤
1 | #进入mysql |
2.5.集群配置
如果是集群可以将sqoop发送到其他主机上,伪集群版可以跳过
发送sqoop
1 | [root@master sqoop]# scp -r /usr/sqoop root@slave1:/usr/ |
发送配置好的profile文件
1 | [root@master sqoop]# scp -r /etc/profile root@slave1:/etc/ |
分别刷新profile
1 | [root@slave1 ~]# source /etc/profile |
3.测试
关闭防火墙
1 | systemctl stop firewalld |
分别在集群的Zookeeper安装目录下的bin下启动Zookeeper
1 | [root@master sqoop]# cd /usr/zookeeper/zookeeper-3.4.12/bin/ |
确保的你的集群正常启动,请参考Hadoop HA高可用集群搭建
1 | [root@master bin]# start-all.sh |
然后随便在哪个目录下(已经设置完成环境变量)输入
1 | #mysql后是我安装mysql主机的ip地址 |
在分别在别的虚拟机使用sqoop看结果是否相同
如上图则说明sqoop安装成功了
4.异常处理
如果你出了类似的异常
1 | 18/10/23 21:07:17 ERROR manager.CatalogQueryManager: Failed to list databases |
将%这行的password复制给上面所以没有password的保存
然后重启数据库服务
1 | [root@master bin]# systemctl restart mysqld |
再次尝试,应该就能成功了
1 | [root@master bin]# sqoop list-databases --connect jdbc:mysql://192.168.134.154:3306/ --username root --password root |
分别在别的虚拟机上查看是否成功
1 | [root@slave1 sbin]# sqoop list-databases --connect jdbc:mysql://192.168.134.154:3306/ --username root --password root |
v1.5.2