转载

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan   。该系列课程是应邀实验楼整理编写的,这里需要赞一下实验楼提供了学习的新方式,可以边看博客边上机实验,课程地址为 https://www.shiyanlou.com/courses/237

【注】该系列所使用到安装包、测试数据和代码均可在百度网盘下载,具体地址为 http://pan.baidu.com/s/10PnDs ,下载该 PDF 文件

1 、 搭建环境

部署节点操作系统为 CentOS ,防火墙和 SElinux 禁用,创建了一个 shiyanlou 用户并在系统根目录下创建 /app 目录,用于存放 Hadoop 等组件运行包。因为该目录用于安装 hadoop 等组件程序,用户对 shiyanlou 必须赋予 rwx 权限(一般做法是 root 用户在根目录下创建 /app 目录,并修改该目录拥有者为 shiyanlou(chown – R shiyanlou:shiyanlou /app )。

Hadoop 搭建环境:

l   虚拟机操作系统: CentOS6.6   64 位,单核, 1G 内存

l   JDK : 1.7.0_55 64 位

l   Hadoop : 1.1.2

2 、 Sqoop 介绍

2.1   Sqoop 简介

Sqoop 即 SQL to Hadoop ,是一款方便的在传统型数据库与 Hadoop 之间进行数据迁移的工具,充分利用 MapReduce 并行特点以批处理的方式加快数据传输,发展至今主要演化了二大版本, Sqoop1 和 Sqoop2 。  

Sqoop 工具是 hadoop 下连接关系型数据库和 Hadoop 的桥梁,支持关系型数据库和 hive 、 hdfs , hbase 之间数据的相互导入,可以使用全表导入和增量导入。

那么为什么选择 Sqoop 呢?  

l   高效可控的利用资源,任务并行度,超时时间。  

l   数据类型映射与转化,可自动进行,用户也可自定义  

l   支持多种主流数据库, MySQL,Oracle , SQL Server , DB2 等等  

2.2   Sqoop1 和 Sqoop2 比较

2.2.1   Sqoop1 和 Sqoop2 异同

l   两个不同的版本,完全不兼容  

l   版本号划分区别, Apache 版本: 1.4.x(Sqoop1); 1.99.x(Sqoop2)      CDH 版本 : Sqoop-1.4.3-cdh4(Sqoop1) ; Sqoop2-1.99.2-cdh4.5.0 (Sqoop2)

l   Sqoop2 比 Sqoop1 的改进  

(1) 引入 Sqoop server ,集中化管理 connector 等  

(2) 多种访问方式: CLI,Web UI , REST API  

(3) 引入基于角色的安全机制

2.2.2   Sqoop1 与 Sqoop2 的架构图

Sqoop 架构图 1

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

Sqoop 架构图 2

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

2.2.3   Sqoop1 与 Sqoop2 的优缺点

比较

Sqoop1

Sqoop2

架构

仅仅使用一个 Sqoop 客户端

引入了 Sqoop server 集中化管理 connector ,以及 rest api , web , UI ,并引入权限安全机制

部署

部署简单,安装需要 root 权限, connector 必须符合 JDBC 模型

架构稍复杂,配置部署更繁琐

使用

命令行方式容易出错,格式紧耦合,无法支持所有数据类型,安全机制不够完善,例如密码暴漏

多种交互方式,命令行, web UI , rest API , conncetor 集中化管理,所有的链接安装在 Sqoop server 上,完善权限管理机制, connector 规范化,仅仅负责数据的读写

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

3 、 安装部署 Sqoop

3.1   下载 Sqoop

可以到 apache 基金 sqoop 官网 http://hive.apache.org/ ,选择镜像下载地址: http://mirror.bit.edu.cn/apache/sqoop/ 下载一个稳定版本,如下图所示下载支持 Hadoop1.X 的 1.4.5 版本 gz 包:

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

也可以在 /home/shiyanlou/install-pack 目录中找到该安装包,解压该安装包并把该安装包复制到 /app 目录中

cd /home/shiyanlou/install-pack

tar -xzf sqoop-1.4.5.bin__hadoop-1.0.0.tar.gz

mv sqoop-1.4.5.bin__hadoop-1.0.0 /app/sqoop-1.4.5

ll /app

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

3.2   设置 /etc/profile 参数

编辑 /etc/profile 文件,加入 sqoop 的 Home 路径和在 PATH 加入 bin 的路径:

export SQOOP_HOME=/app/sqoop-1.4.5

export PATH=$PATH:$SQOOP_HOME/bin

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

编译配置文件 /etc/profile ,并确认生效

source /etc/profile

echo $PATH

3.3   设置 bin/configure-sqoop 配置文件

修改 bin/configure-sqoop 配置文件

cd /app/sqoop-1.4.5/bin

sudo vi configure-sqoop

注释掉 HBase 和 Zookeeper 等检查(除非使用 HBase 和 Zookeeper 等 HADOOP 上的组件)

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

3.4   设置 conf/sqoop-env.sh 配置文件

如果不存在 sqoop-env.sh 文件,复制 sqoop-env-template.sh 文件,然后修改 sqoop-env.sh 配置文件

cd /app/sqoop-1.4.5/conf

cp sqoop-env-template.sh sqoop-env.sh

sudo vi sqoop-env.sh

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

设置 hadoop 运行程序所在路径和 hadoop-*-core.jar 路径( Hadoop1.X 需要配置)

#Set path to where bin/hadoop is available

export HADOOP_COMMON_HOME=/app/hadoop-1.1.2

#Set path to where hadoop-*-core.jar is available

export HADOOP_MAPRED_HOME=/app/hadoop-1.1.2

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

编译配置文件 sqoop-env.sh 使之生效

3.5   验证安装完成

输入如下命令验证是否正确安装 sqoop ,如果正确安装则出现 sqoop 提示

sqoop help

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

4 、 文件导入 / 导出

4.1   MySql 数据导入到 HDFS 中

如果没有安装 MySql ,请参照第 8 课 3.1 进行安装

4.1.1   下载 MySql 驱动

到 MySql 官网进入下载页面: http://dev.mysql.com/downloads/connector/j/ ,选择所需要的版本进行下载,这里下载的 zip 格式的文件,然后在本地解压:

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

也可以在 /home/shiyanlou/install-pack 目录中找到该安装包,把 MySql 驱动包使用如下命令放到 Sqoop 的 lib 目录下

cd /home/shiyanlou/install-pack

cp mysql-connector-java-5.1.22-bin.jar /app/sqoop-1.4.5/lib

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

4.1.2   启动 MySql 服务

查看 MySql 服务并查看状态,如果没有启动则启动服务

sudo service mysql status

sudo service mysql start

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

4.1.3   查看 MySql 中的数据表

进入 MySql 数据库,选择有数据的一张表查看内容,比较导出结果是否正确,输入如下命令:

mysql -uhive -phive

mysql>show databases;

mysql>use hive;

mysql>show tables;

mysql>select TBL_ID, CREATE_TIME, DB_ID, OWNER, TBL_NAME,TBL_TYPE from TBLS;

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

4.1.4   把 MySql 数据导入到 HDFS 中

使用如下命令列出 MySql 中所有数据库:

sqoop list-databases --connect jdbc:mysql://hadoop:3306/ --username hive --password hive

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

使用如下命令把 hive 数据库 TBLS 表数据导入到 HDFS 中:

sqoop import --connect jdbc:mysql://hadoop:3306/hive --username hive --password hive --table TBLS -m 1

l --username 数据库用户名

l --password 连接数据库密码

l --table 表名

l -m 1 表示 map 数

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

4.1.5   查看导出结果

使用如下命令查看导出到 HDFS 结果,文件路径在当前用户 hadoop 目录下增加了 TBLS 表目录,查看 part-m-00000 文件:

hadoop fs -ls /user/shiyanlou/TBLS

hadoop fs -cat /user/shiyanlou/TBLS/part-m-00000

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

4.2   MySql 数据导入到 Hive 中

4.2.1   启动 metastore 和 hiveserver

在使用 hive 之前需要启动 metastore 和 hiveserver 服务,通过如下命令启用:

hive --service metastore &

hive --service hiveserver &

启动用通过 jps 命令可以看到两个进行运行在后台

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

4.2.2   从 MySql 导入表数据到 Hive 中

使用如下命令到把 MySql 中 TBLS 表数据导入到 Hive 中:

sqoop import --connect jdbc:mysql://hadoop:3306/hive --username hive --password hive --table TBLS --hive-table MySql2Hive --hive-import -m 1

l -- username 为 mysql 中的数据库连接用户名

l --password 为 mysql 中的数据库连接密码

l --table 为导出表

l --hive-table test1 为导出表在 Hive 中的名称

l -m 1 表示 map 数

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

从运行的日志可以看到,这个过程有两个阶段:

1.   第一个阶段是从 MySql 中把数据到 HDFS 文件中

2.   第二个阶段是从 HDFS 中把数据写入到 MySql 中

4.2.3   查看导出结果

登录 hive ,在 hive 创建表并查看该表,命令如下:

hive

hive>show tables;

hive>desc MySql2Hive;

Hadoop入门进阶课程11--Sqoop介绍、安装与操作

正文到此结束
Loading...