1.Sqoop简介
主要是解决关系型数据库与大数据平台的数据迁移。
例如:
MySQL|Oracle ======> Hadoop生态
Hadoop生态 ======> MySQL|Oracle
sqoop进行数据迁移的本质
sqoop就是将sqoop的命令转换为mapreduce任务进行数据迁移的。sqoop是hadoop的另一种形式的客户端
1)数据导入
sqoop 使用了DBInputFormat
,即默认使用了从数据库输入
map端
:
DBInputFormat 数据库输入
获取一条一条的数据
context.write();
FileOutputFormat() 指定输出路径 dfs
2)数据导出
map端
:
FileInputFormat
一行一行读取
context.write();
写出数据到mysql数据库中
DBOutputFormat将数据写出到MySQL中
定制了输出
2.Sqoop 的安装
1)Sqoop版本
版本: 1.4.x系列 即 sqoop 1
1.99.系列 即 sqoop 2
我们这里选择 Sqoop-1.4.7 版本
2)安装准备
保证hive,hadoop,MySQL,HBASE,jdk可用
安装节点:
1个节点,该节点必须可以访问到大数据平台客户端(hdfs,hive)
即如果需要用到hive的话,需要装到安装有hive的节点
3)解压安装包并配置环境变量
下载地址:
① 官网:wget http://archive.apache.org/dist/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
② 华科镜像源:wget http://mirrors.hust.edu.cn/apache/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
将sqoop安装包上传到hive客户端所在节点,开始解压
[hadoop@mycat01 ~]$ sudo chown hadoop:hadoop sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
[hadoop@mycat01 ~]$ chmod u+x sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
[hadoop@mycat01 ~]$ tar-zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
[hadoop@mycat01 ~]$ ln -s sqoop-1.4.7.bin__hadoop-2.6.0 sqoop
开始配置环境变量
sudo vim /etc/profile
配置环境变量:(没有回车----zookeeper集群已经在前面谈到,Hadoop的HA也说到)
export JAVA_HOME=/opt/jdk1.8.0_73
export HADOOP_HOME=/home/hadoop/hadoop-2.7.6
export HIVE_HOME=/opt/hive
export ZOO_HOME=/home/hadoop/zk
export SQOOP_HOME=/home/hadoop/sqoopPATH=$PATH:$REDIS_HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOO_HOME/bin:$SQOOP_HOME/bin
使配置文件生效
source /etc/profile
4)修改sqoop的配置文件
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/home/hadoop/hadoop-2.7.6
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/home/hadoop/hadoop-2.7.6
#set the path to where bin/hbase is available
# export HBASE_HOME=
#Set the path to where bin/hive is available
export HIVE_HOME=/opt/hive
export HIVE_CONF_DIR=/opt/hive/conf
#Set the path for where zookeper config dir is
export ZOOCFGDIR=/home/hadoop/zk/conf
# set zookeeper_home
export ZOOKEEPER_HOME=/home/hadoop/zk
注意:上面我多添加了两项(因为自己在装1.4.7版本时报错说这两个没有设置,然后改的)
export HIVE_CONF_DIR=/opt/hive/conf
export ZOOKEEPER_HOME=/home/hadoop/zk
而 HADOOP_COMMON_HOME
和HADOOP_MAPRED_HOME
分别是Hadoop 的 common模块和mapreduce模块的核心jar包所在目录,直接配置成hadoop更目录就好了。
5)将MySQL或者Oracle等的驱动包上传到sqoop的lib目录下
建议使用5.x的驱动包
,8.x系列的驱动包可能连接的时候一堆问题,设置一些参数虽然可以搞定,此处为了方便,便采用了5.x系列
6)拷贝hive的jar包到sqoop的lib目录
cp /opt/hive/lib/hive-exec-2.3.4.jar /home/hadoop/sqoop-1.4.7.bin__hadoop-2.6.0/lib/
7)测试
测试前请保证hadoop集群所有DataNode节点能够访问到MySQL
也就说要配置MySQL远程访问。
mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| root | localhost | *3C9208F77DE51912A81F33B800626A3C097BBC1F |
| root | mycat01 | *3C9208F77DE51912A81F33B800626A3C097BBC1F |
| root | % | *3C9208F77DE51912A81F33B800626A3C097BBC1F |
+------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)
为了方便,此处直接配置 %
,即所有主机都可以访问(用户名和密码对应)
开始测试:
[hadoop@mycat01 conf]$ sqoop list-databases \
> --connect jdbc:mysql://mycat01:3306/ \
> --username root \
> --password miku;
Warning: /home/hadoop/sqoop/../hbase does not exist! HBase imports will fail.
Please set $HBASE_HOME to the root of your HBase installation.
Warning: /home/hadoop/sqoop/../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /home/hadoop/sqoop/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
19/03/28 22:05:07 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7
19/03/28 22:05:07 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
19/03/28 22:05:07 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
information_schema
azkabandb
hivedb
mysql
test
查询当前客户端(mycat01)的MySQL中有哪些数据库。
至此sqoop安装成功。