主要内容:
一、sqoop概念 Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个Apache项目。 简而言之,sqoop就是用于关系型数据和非关系型数据库之间进行数据转换的工具。
Sqoop: 采集关系型数据库中数据
1、采集关系型数据库中数据,一般Sqoop用于离线计算
2、数据交换:Oracle <---> Sqoop <---> HDFS、HBase、Hive
3、基于JDBC二、sqoop的安装
1、下载sqoop-1.4.6.tar.gz和sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
2、上传到/tools目录下
3、 解压
(1)tar -zvxf sqoop-1.4.6.tar.gz -C /training/
(2)配置环境变量:
export SQOOP_HOME=/training/sqoop-1.4.6
export PATH=$PATH:$SQOOP_HOME/bin
(3)让环境变量生效:
source ~/.bash_profile
(4)进入到/training/sqoop-1.4.6/conf/目录下
cp sqoop-env-template.sh sqoop-env.sh
vi sqoop-env.sh
修改对应的选项:
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/training/hadoop-2.7.3
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/training/hadoop-2.7.3
#set the path to where bin/hbase is available
#export HBASE_HOME=/training/hbase-1.3.1
#Set the path to where bin/hive is available
#export HIVE_HOME=/training/hive
#Set the path for where zookeper config dir is
export ZOOCFGDIR=/training/zookeeper-3.4.5
(5)将mysql的驱动程序mysql-connector-java-5.1.44-bin.jar上传到/training/sqoop/lib目录下
(6)进入到/tools目录下,解压sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
tar -zvxf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
cd /tools/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
将sqoop-1.4.6.jar复制到/training/sqoop-1.4.6/lib/目录下(如果没有一步,会报错: 找不到或无法加载主类 org.apache.sqoop.Sqoop)
cp sqoop-1.4.6.jar /training/sqoop-1.4.6/lib/
4)、测试sqoop命令
sqoop help
不报错,即安装正确三、数据的可视化
()sqoop的安装与配置
()sqoop的基本操作
1、从hdfs中将数据(MR结果数据)导入到MySQL中
1)、在MySQL中新建一张表t_result,用于存放MapReduce分析结果
2)、在虚拟机中执行导入命令
sqoop export --connect jdbc:mysql://192.168.16.132:3306/university --username root
--password 123456 --input-fields-terminated-by '\t' --table t_mr_result --export-dir /output/flume01
三、sqoop的使用
命令 | 说明 |
---|---|
create-hive-table | 生成与关系数据库表的表结构对应的HIVE表 |
eval | 以快速地使用SQL语句对关系数据库进行操作,这可以使得在使用import这种工具进行数据导入的时候,可以预先了解相关的SQL语句是否正确,并能将结果显示在控制台。 |
– | – |
export | 从hdfs中导数据到关系数据库中 |
– | – |
import | 将数据库表的数据导入到HDFS中 |
1、常用命令及其介绍命令说明codegen将关系数据库表映射为一个Java文件、Java class类、以及相关的jar包create-hive-table生成与关系数据库表的表结构对应的HIVE表eval以快速地使用SQL语句对关系数据库进行操作,这可以使得在使用import这种工具进行数据导入的时候,可以预先了解相关的SQL语句是否正确,并能将结果显示在控制台。export从hdfs中导数据到关系数据库中help import将数据库表的数据导入到HDFS中import-all-tables将数据库中所有的表的数据导入到HDFS中job用来生成一个sqoop的任务,生成后,该任务并不执行,除非使用命令执行该任务。list-databases打印出关系数据库所有的数据库名list-tables打印出关系数据库某一数据库的所有表名merge将HDFS中不同目录下面的数据合在一起,并存放在指定的目录中metastore记录sqoop job的元数据信息version显示sqoop版本信息
2、具体使用案例 注意:大小写实例一:
sqoop codegen --connect jdbc:oracle:thin:@192.168.137.129:1521:orcl --username SCOTT --password tiger --table EMP也可以写成下面的形式:
sqoop codegen \
--connect jdbc:oracle:thin:@192.168.137.129:1521:orcl \
--username SCOTT --password tiger \
--table EMP
实例二:
sqoop create-hive-table --connect jdbc:oracle:thin:@192.168.137.129:1521:orcl --username SCOTT --password tiger --table EMP --hive-table emphive
实例三:sqoop eval --connect jdbc:oracle:thin:@192.168.137.129:1521:orcl --username SCOTT --password tiger --query "select ename from emp where deptno=10"sqoop eval --connect jdbc:oracle:thin:@192.168.137.129:1521:orcl --username SCOTT --password tiger --query “select ename,dname from emp,dept where emp.deptno=dept.deptno”
实例四:Orcale:sqoop export --connect jdbc:oracle:thin:@192.168.137.129:1521:orcl --username SCOTT --password tiger --table STUDENTS --export-dir /studentsMySQL:sqoop export --connect jdbc:mysql://192.168.215.131:3306/university --username root --password 123456 --table t_result --export-dir /output/flume01sqoop export --connect jdbc:mysql://192.168.215.131:3306/university --username root --password 123456 --input-fields-terminated-by ‘\t’ --table t_mr_result --export-dir /output/flume01
实例五:sqoop import --connect jdbc:oracle:thin:@192.168.137.129:1521:orcl --username SCOTT --password tiger --table EMP --target-dir /emp
**
三、数据的导入导出(HFDS->Mysql or MySQL->HDFS)
**
1、数据导入MySQL->HDFS
(*)编写脚本 vi mysql_to_sqoop.sh
#!/bin/bash
dataformat=`date +%Y-%m-%d-%H-%M-%S`
/training/sqoop-1.4.6/bin/sqoop import \
--connect jdbc:mysql://192.168.16.132:3306/university \
--username root \
--password 123456 \
--input-fields-terminated-by '\t' \
--table t_order \
--target-dir /input/$dataformat/
执行chmod 774 mysql_to_sqoop.sh 让脚本文件生效;
**
2、数据导出HDFS—>MySQL
**
(*)编写可执行文件vi sqoop_to_mysql.sh
#!/bin/bash
/training/sqoop-1.4.6/bin/sqoop export \
--connect jdbc:mysql://192.168.16.132:3306/university \
--username root \
--password 123456 \
--input-fields-terminated-by '\t' \
--table t_mr_result \
--export-dir $(cat result_path.txt)
()执行chmod 774 sqoop_to_mysql.sh 让脚本文件生效;
()$(cat result_path.txt)是HDFS上储存待导出文件的地址