1、-Hadoop 与RDBMS数据迁移工具-什么是什么是Sqoop? Sqoop 是实现Hadoop 与关系型数据库(RDBMS)之间进行数据迁移的工具,通过Sqoop可以简单、快速地从诸如MySQL、Oracle 等传统关系型数据库中把数据导入(import)到诸如HDFS、HBase、Hive 等。 Hadoop 分布式存储环境下,使用Hadoop MapReduce 等分布式处理工具对数据进行加工处理,然后可以将最终处理结果导出(export)到RDBMS 中。1. Sqoop的基本安装的基本安装 Sqoop 的安装非常简单,在类UNIX 系统上需要预先安装好Java 6 及其后期版本,并
2、已部署Hadoop 稳定版本的集群环境。 从网站http:/sqoop.apache.org/下载最新的Sqoop 稳定版本。Sqoop 的Apache 发行包分为源码包和已经编译好的二进制包,下面只介绍Sqoop 的二进制包安装方法。 下载Sqoop 二进制包,并解压到相应安装目录,解压后会生成子目录sqoop-x.y.z.bin(x.y.z为版本号):$ tar -xzf sqoop-x.y.z.bin.tar.gz 把sqoop-x.y.z.bin 目录移动到sqoop-x.y.z 目录:$ mv sqoop-x.y.z.bin / sqoop-x.y.z/ 设置环境变量,编辑文件/.b
3、ashrc 或/.bash_profile 把Sqoop 的安装路径添加到PATH 变量中,方便Sqoop 的使用和管理:$ export SQOOP_HOME=/home/trucy/sqoop-x.y.z$ export PATH=$PATH:$SQOOP_HOME/bin2. Sqoop的配置的配置 Sqoop 获取Hadoop 平台各相关组件的配置信息是通过读取环境变量实现的, 如获取Hadoop 相关信息可以通过读取变量$HADOOP_HOME的值,获取Hive 相关信息可以通过读取变量$HIVE_HOME的值等。修改文件/.bashrc 或/.bash_profile 配置环境变量
4、使用export 命令将上述工具的根目录添加到文件末尾;同时Sqoop 连接RDBMS 需要使用相应的数据库驱动工具,如通过JDBC 连接MySQL 需要用到mysql-connector-java-x.y.z-bin.jar 驱动程序2. Sqoop的配置的配置将MySQL 的JDBC 驱动程序mysql-connector-java-x.y.z-bin.jar 复制到$ SQOOP_HOME /lib 目录下使用sqoop 的list-databases 命令测试Sqoop 连接MySQL 是否成功:$ sqoop list-databases -connect jdbc:mysql:/m
5、ysql.server.ip:3306/ -username root -PEnter password:(输入MySQL 中root 用户密码)information_schemaemployeeshiveDBmysqltesttrucyDB2. Sqoop的配置的配置2. Sqoop的配置的配置若配置好Hadoop 相应环境变量后使用Sqoop 仍无法连接MySQL,可以执行下述操作。(1)进入$ SQOOP_HOME /conf 目录(注意第一个$为Linux 命令提示符,第二个$为系统变量取值符):$ cd $SQOOP_HOME/conf(2)复制Sqoop 读取环境变量的模板文件到
6、自定义文件:$ cp sqoop-env-template.sh sqoop-env.sh(3)编辑文件sqoop-env.sh,修改相应属性值指向相关软件安装目录,如:#Set path to where bin/hadoop is availableexport HADOOP_COMMON_HOME=/usr/local/hadoop#Set path to where hadoop-*-core.jar is availableexport HADOOP_MAPRED_HOME=/usr/local/hadoop#set the path to where bin/hbase is av
7、ailableexport HBASE_HOME=/usr/local/hbase#Set the path to where bin/hive is availableexport HIVE_HOME=/usr/local/hive#Set the path for where zookeper config dir isexport ZOOCFGDIR=/usr/local/zk3.Sqoop相关功能相关功能 Sqoop 提供了一系列工具命令(tools command),包括导入操作(import)、导出操作(export)、导入所有表(import-all-tables)、列出所有数据
8、库实例(list-databases)和列出特定数据库实例中的所有表(list-tables)等,在Linux 命令提示符下输入sqoop help 会输出Sqoop所支持的所有工具命令下面分别详细介绍Sqoop 所支持的工具命令。3.Sqoop相关功能相关功能(1)使用root 用户登录MySQL 数据库:$ mysql -u root p(2)输入root 用户密码,创建MySQL 数据库SqoopDB:mysql create database sqoopDB;(3)使用root 用户登录MySQL 数据库,创建用户bear,密码为123456: $ mysql -u root -pmy
9、sql create user bear identified by 123456;(4)授权用户bear 拥有数据库sqoopDB 的所有权限:mysql grant all privileges on sqoopDB.* to bear% identified by 123456;(5)刷新系统权限表:mysqlflush privileges; 新建一个MySQL 数据库SqoopDB 和用户bear,并授予用户bear 拥有操作数据库SqoopDB 的所有权限。 下面使用bear 用户登录MySQL 数据库,在数据库实例sqoopDB 下创建一张employees表,后面所有的Sqoo
10、p 相关操作都在SqoopDB employees 表上进行:3.Sqoop相关功能相关功能(1)使用bear 用户登录MySQL 数据库:$ mysql -u bear p(2)输入密码,进入MySQL 数据库SqoopDB:mysql use sqoopDB;(3)创建employees 表: mysql CREATE TABLE employees ( - id int(11) NOT NULL AUTO_INCREMENT, - name varchar(100) NOT NULL, - age int(8) NOT NULL DEFAULT 0, - place varchar(40
11、0) NOT NULL, - entry_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - position varchar(500), - PRIMARY KEY (id) - )ENGINE=InnoDB DEFAULT CHARSET=utf8; Query OK, 0 rows affected (0.18 sec)(4)向employees 表中插入3 条数据:mysql INSERT INTO employees(name,age,place,position) VALUES(James,27,NewYork,Manager)
12、;mysql INSERT INTO employees(name,age,place,position) VALUES(Allen,30,NewYork,CEO);mysql INSERT INTO employees(name,age,place,position) VALUES(Sharen,33,NewYork,CTO);(5)查询表employees,结果如图:3.Sqoop相关功能相关功能3.Sqoop相关功能相关功能-import sqoop import 工具导入RDBMS 中的单个表到HDFS 上,RDBMS 表中的每一行以单独记录形式存储在HDFS 中,记录默认以文本文件格
13、式(每个记录一行)进行存储,还可以二进制形式进行存储,如Avro 文件格式或序列文件格式(SequenceFiles)。 sqoop-import 语法格式为(两种操作功能一样):$ sqoop import (generic-args) (import-args)$ sqoop-import (generic-args) (import-args)sqoop-import 操作分为连接数据库服务器和导入数据等步骤。3.Sqoop相关功能相关功能-import(1)连接数据库服务器(2)导入MySQL 表sqoopDB.employees 中的数据到HDFS 上(3)查看导入到HDFS 上的表
14、数据(4)sqoop-import 增量导入到HDFS 上(5)导入MySQL 表sqoopDB.employees 中的数据到Hive(6)导入MySQL 表sqoopDB.employees 中的数据到HBase3.Sqoop相关功能相关功能-import-all-tables sqoop import-all-tables 工具的语法与sqoop-import 语法大致相同,唯一的区别是sqoop import-all-tables 操作导入多个RDBMS 表到HDFS 上,每个RDBMS 表数据分别位于HDFS上的一个单独目录下。 执行sqoop import-all-tables 操
15、作必须满足以下条件。(1)每个RDBMS 表中只有一个单独列作为主键,即不能是多个列的组合键作为主键。(2)执行导入操作时,每个RDBMS 表的所有列都将被导入到HDFS 上。(3)不能在RDBMS 表上附加任何诸如WHERE 条件的子句。3.Sqoop相关功能相关功能-import-all-tablesSqoop-import 语法格式为(两种操作功能一样):$ sqoop import-all-tables (generic-args) (import-args)$ sqoop-import-all-tables (generic-args) (import-args)查询表items_i
16、nfo 显示结果查看数据库实例SqoopDB 中的所有表3.Sqoop相关功能相关功能-export sqoop-export 操作与sqoop-import 的操作是相反的,即把HDFS、Hive、HBase 中的文件或数据导出到RDBMS 数据库中,RDBMS 表必须存在,否则sqoop-export 操作执行出错。sqoop-export 语法格式为(两种操作功能一样):$ sqoop export (generic-args) (export-args)$ sqoop-export (generic-args) (export-args)查看表users_info 的内容3.Sqoop
17、相关功能相关功能-list-databasessqoop-list-databases 用于列举出指定数据库服务器中的数据库模式。$ sqoop list-databases -connect jdbc:mysql:/database.mysql.node1/sqoopDB-username bear -PEnter password:information_schemamysqlperformance_schemasqoopDB3.Sqoop相关功能相关功能-list-tablessqoop-list-tables 用于列举出指定数据库服务器中的数据库表。$ sqoop list-table
18、s -connect jdbc:mysql:/database.mysql.node1/sqoopDB-username bear -PEnter password:employeesitems_infousers_info上述sqoop-list-databases 操作和sqoop-list-tables 操作中指定-onnect 选项连接数据库服务器时未指定服务器端口号,Sqoop 端口号默认为3306。4. Hive、Pig 和和Sqoop 三者之间的关系三者之间的关系通过第8 章和第9 章的介绍,了解到Hive 和Pig 都是基于Hadoop 进行大数据分析,但两者却具有完全不同的处
19、理方式,Hive 诞生于Facebook,Pig 诞生于Yahoo!,两者的应用侧重方向和面向的使用者不同,Hive 主要面向对SQL 技术比较熟悉的开发人员进行数据分析,Pig 采用基于数据流的全新方式对数据进行分析,因此,两者处理方式差异很大。4. Hive、Pig 和和Sqoop 三者之间的关系三者之间的关系Hive 技术因此在Facebook 中诞生,为大数据技术与传统数据处理方式搭起了一座桥梁,对传统的数据处理方式进行了封装,将上层应用的所有SQL 操作转换为底层的分布式应用,使对SQL 技术比较擅长的技术人员也能处理大数据。Hive 学习成本低,只要熟悉SQL技术,可以很容易上手,
20、但处理方式受传统结构化处理技术的限制。Pig 在另一方面充分利用分布式特性,所有操作都基于Hadoop 的固有特性,在处理数据方面,不同处理操作可以根据数据特点编写相应的分布式应用程序,对数据原始结构要求很低。Pig Latin 提供了一系列丰富的功能操作命令,使用Pig Latin 功能操作命令可以方便地对数据进行分析,支持数据加载、萃取、转换等功能,实现传统SQL 技术在数据仓库方面的所有应用,同时也能够灵活地处理大数据。4. Hive、Pig 和和Sqoop 三者之间的关系三者之间的关系因此,Pig在处理大数据过程中具有更大的灵活性,但学习梯度比较大;Sqoop 的主要功能是实现Hado
21、op 分布式存储平台上的数据与传统关系型数据库中的数据进行迁移操作,如传统的业务数据存储在关系型数据库中,如果数据量达到一定规模后需要对其进行分析或统计,单纯以关系型数据库作为存储采用传统数据技术对数据进行处理可能会成为瓶颈,这时可以将业务数据从关系型数据库中导入(import)到Hadoop 平台进行离线分析。对大规模的数据在Hadoop平台上进行分析以后,可以将结果导出(export)到关系型数据库中作为业务的辅助数据。4. Hive、Pig 和和Sqoop 三者之间的关系三者之间的关系对大规模的数据在Hadoop平台上进行分析以后,可以将结果导出(export)到关系型数据库中作为业务的
22、辅助数据。因此,Hive、Pig、Sqoop 三者之间的关系相辅相成,针对不同的应用需求互为补充。4. Hive、Pig 和和Sqoop 三者之间的关系三者之间的关系5.小结小结 本章主要介绍了实现RDBMS 与Hadoop 平台上各功能组件之间进行数据相互迁移的工具Sqoop,该工具既可以快速地从诸如MySQL、Oracle 等传统关系型数据库中把数据导入(import)到诸如HDFS、HBase、Hive 等Hadoop 分布式存储环境下,也可以将Hadoop 平台上的分布式数据导出(export)到RDBMS 中,是一个极其方便、好用的工具。 本章首先介绍了Sqoop 的基本安装,然后介绍了其所支持的相关操作,最后对Hive、Pig 和Sqoop 三者之间最容易使人混淆的地方进行了分析和总结,读者可根据自身需要选择相关工具进行数据分析操作。习题习题1简要描述Sqoop 的功能。2简要描述Sqoop 所支持的功能操作有哪些。选做选做分别安装MySQL 数据库和Sqoop 工具,实现MySQL 数据库和HDFS 之间的数据导入、导出操作。