一. Apache Sqoop介绍二.Sqoop安装
2.1安装Sqoop2.2解压Sqoop2.3配置Sqoop2.4.加入mysql的jdbc驱动包2.5. 设置ACCUMULO_HOME环境变量2.5. 验证启动,显示版本号2.6.显示MySQL中的数据库 三.Sqoop导入
3.1. 加载测试数据到MySQL(创建表)3.2. 全量导入MySQL表数据到HDFS3.3.全量导入MySQL表数据到HIVE 四.Sqoop导出
4.1.模块开发--数据导出4.2. Sqoop 导出项目数据4.3.Hive-->HDFS4.4.HDFS-->Mysql
一. Apache Sqoop介绍- Apache Sqoop是在Hadoop生态体系和RDBMS体系之间传送数据的一种工具。来自于Apache软件基金会提供。Sqoop工作机制是将导入或导出命令翻译成mapreduce程序来实现。在翻译出的mapreduce中主要是对inputformat和outputformat进行定制。Hadoop生态系统包括:HDFS、Hive、Hbase等
RDBMS体系包括:MySql、Oracle、DB2等Sqoop可以理解为:“SQL 到 Hadoop 和 Hadoop 到SQL”。
站在Apache立场看待数据流转问题,可以分为数据的导入导出:
import:数据导入。RDBMS----->Hadoop
Export:数据导出。Hadoop---->RDBMS
当前系统环境 1. hadoop-2.7.5 2. jdk1.8.0_141(node03) 3. apache-hive-2.1.1-bin 4. MySql(node03)2.2解压Sqoop
cd /export/softwares tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C ../servers/ cd /export/servers/ ls2.3配置Sqoop
cd /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/conf cp sqoop-env-template.sh sqoop-env.sh vim sqoop-env.sh export HADOOP_COMMON_HOME=/export/servers/hadoop-2.7.5 export HADOOP_MAPRED_HOME=/export/servers/hadoop-2.7.52.4.加入mysql的jdbc驱动包
cp /export/servers/apache-hive-2.1.1-bin/lib/mysql-connector-java-5.1.38.jar /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/ ll /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/mysql-connector-java-5.1.38.jar2.5. 设置ACCUMULO_HOME环境变量
mkdir -p /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/tmp/accumulo mkdir -p /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/tmp/hcat vim /etc/profile export ACCUMULO_HOME=/export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/tmp/accumulo export HCAT_HOME=/export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/tmp/hcat
source /etc/profile2.5. 验证启动,显示版本号
cd /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha bin/sqoop-version2.6.显示MySQL中的数据库
#启动MySQL /etc/init.d/mysqld start #本命令会列出所有mysql的数据库。 cd /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha bin/sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 123456三.Sqoop导入 3.1. 加载测试数据到MySQL(创建表) 3.2. 全量导入MySQL表数据到HDFS
cd /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha bin/sqoop import --connect jdbc:mysql://node03:3306/dress #刚创建数据库名字 --username root #用户名 --password 123456 #密码 --delete-target-dir --target-dir /sqoopdressresult --fields-terminated-by 't' --table dress_customer --m 1 #--target-dir用来指定导出数据存放至HDFS的目录,此目录事先不能存在 #--fields-terminated-by 't' #分隔符为 /t #--m 1 #并行度为1
查看导入结果
hdfs dfs -cat /sqoopdressresult/part-m-00000
并行度参数–m测试
cd /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha bin/sqoop import --connect jdbc:mysql://node03:3306/dress --username root --password 123456 --delete-target-dir --target-dir /sqoopdressresult2 --fields-terminated-by 't' --split-by identity --table dress_customer --m 2 #--m 2 #并行度为2 #--split-by identity #按照 identity 字段进行拆分
查看结果
hdfs dfs -cat /sqoopdressresult2/part-m-00000 hdfs dfs -cat /sqoopdressresult2/part-m-00001 hdfs dfs -cat /sqoopdressresult2/part-m-00002 hdfs dfs -cat /sqoopdressresult2/part-m-000033.3.全量导入MySQL表数据到HIVE
将关系型数据的表结构复制到hive中
create database if not exists dress; use dress; show tables;
cd /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha bin/sqoop create-hive-table --connect jdbc:mysql://node03:3306/dress --table dress_customer --username root --password 123456 --hive-table dress.dress_customer_sp # --table dress_customer为mysql中的数据库dress中的表。 # --hive-table dress_customer_sp 为hive中新建的表名称。
desc formatted dress_customer_sp;
cd /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha bin/sqoop import --connect jdbc:mysql://node03:3306/dress --username root --password 123456 --table dress_customer --hive-table dress.dress_customer_sp --hive-import --m 1
use dress; select * from dress_customer_sp;
至此,已将MySQL数据库中的表导入到hive中
将数据从Hadoop生态体系导出到RDBMS数据库导出前,目标表必须存在于目标数据库中。
export有三种模式:
默认模式:是从将文件中的数据使用INSERT语句插入到表中。
更新模式:Sqoop将生成UPDATe替换数据库中现有记录的语句。
调用模式:Sqoop将为每条记录创建一个存储过程调用。
- Sqoop支持直接从Hive表到RDBMS表的导出操作,也支持HDFS到RDBMS表的操作,鉴于此,有如下两种方案:
从Hive表到RDBMS表的直接导出:
效率较高,相当于直接在Hive表与RDBMS表的进行数据更新,但无法做精细的控制。从Hive到HDFS再到RDBMS表的导出:
需要先将数据从Hive表导出到HDFS,再从HDFS将数据导入到RDBMS。虽然比直接导出多了一步操作,但是可以实现对数据的更精准的操作,特别是在从Hive表导出到HDFS时,可以进一步对数据进行字段筛选、字段加工、数据过滤操作, 从而使得HDFS上的数据更“接近”或等于将来实际要导入RDBMS表的数据,提高导出速度。
4.3.Hive–>HDFS
导出dress_customer_sp表数据到HDFS
insert overwrite directory '/dress/export/dress_customer_hdfs' row format delimited fields terminated by ' 01' STORED AS textfile select custname,identity,sex,college,phone,custype,createtime from dress_customer_sp; # /dress/export/dress_customer_hdfs 为导入HDFS的目录 # select custname,identity,sex,college,phone,custype,createtime from dress_customer_sp; 可以根据自己的需求对数据进入筛选(SQl语句)
查看
先创建目标表 dress_customer_hdfs
cd /export/servers/sqoop-1.4.6.bin__hadoop-2.0.4-alpha bin/sqoop export --connect jdbc:mysql://192.168.174.120:3306/dress --username root --password 123456 --table dress_customer_hdfs --fields-terminated-by '


