1.sqoop简介
2.sqoop的安装和配置
3.测试
4. 异常处理
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 进行定制
软件:sqoop-1.4.7.bin__hadoop-2.6.0.tar
2.1.安装
在/usr下创建个sqoop文件夹,作为压缩包的存放路径和解压路径
#进入/usr下
[root@master ~]# cd /usr/
#创建sqoop文件夹
[root@master usr]# mkdir sqoop
[root@master usr]# ls
bin etc games hadoop include java lib lib64 libexec local sbin share sqoop src tmp zookeeper
#进入sqoop下
[root@master usr]# cd sqoop
[root@master sqoop]#
利用Xshell连接虚拟机,并利用Xftp将sqoop压缩包上传到sqoop文件夹下
解压sqoop
[root@master sqoop]# tar -zxf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
2.2.配置profile环境变量
进入到根目录的etc文件夹下,更改profile文件
[root@master sqoop]# vim /etc/profile
在profile最后添加
export SQOOP_HOME=/usr/sqoop/sqoop-1.4.7.bin__hadoop-2.6.0
export PATH=$PATH:$SQOOP_HOME/bin
保存退出,刷新profile
[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的时候已经允许过了,就可以跳过这个步骤
#进入mysql
[root@master sqoop]# mysql
#允许远程连接
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
#刷新权限
mysql>FLUSH PRIVILEGES;
2.5.集群配置
如果是集群可以将sqoop发送到其他主机上,伪集群版可以跳过
发送sqoop
[root@master sqoop]# scp -r /usr/sqoop root@slave1:/usr/
[root@master sqoop]# scp -r /usr/sqoop root@slave2:/usr/
发送配置好的profile文件
[root@master sqoop]# scp -r /etc/profile root@slave1:/etc/
[root@master sqoop]# scp -r /etc/profile root@slave2:/etc/
分别刷新profile
[root@slave1 ~]# source /etc/profile
[root@slave2 ~]# source /etc/profile
关闭防火墙
systemctl stop firewalld
分别在集群的Zookeeper安装目录下的bin下启动Zookeeper
[root@master sqoop]# cd /usr/zookeeper/zookeeper-3.4.12/bin/
#启动Zookeeper
[root@master bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-3.4.12/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
确保的你的集群正常启动,请参考Hadoop HA高可用集群搭建
[root@master bin]# start-all.sh
然后随便在哪个目录下(已经设置完成环境变量)输入
#mysql后是我安装mysql主机的ip地址
[root@master bin]# sqoop list-databases --connect jdbc:mysql://192.168.134.154:3306/ --username root --password root
在分别在别的虚拟机使用sqoop看结果是否相同
如上图则说明sqoop安装成功了
如果你出了类似的异常
18/10/23 21:07:17 ERROR manager.CatalogQueryManager: Failed to list databases
java.sql.SQLException: Access denied for user 'root'@'master' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1094)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4208)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4140)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:925)
将%这行的password复制给上面所以没有password的保存
然后重启数据库服务
[root@master bin]# systemctl restart mysqld
再次尝试,应该就能成功了
[root@master bin]# sqoop list-databases --connect jdbc:mysql://192.168.134.154:3306/ --username root --password root
分别在别的虚拟机上查看是否成功
[root@slave1 sbin]# sqoop list-databases --connect jdbc:mysql://192.168.134.154:3306/ --username root --password root
[root@slave2 sbin]# sqoop list-databases --connect jdbc:mysql://192.168.134.154:3306/ --username root --password root