Sqoop的产生背景 & 概述 & 架构 & 部署 & 简单使用
来源:互联网 发布:淘宝店铺最高等级 编辑:程序博客网 时间:2024/06/08 18:40
Sqoop的产生背景
当需要将RDBMS上的数据抽取到Hadoop上,我们该怎么做?
方法:- file ==> load hive
拿到一个文件,load到Hive表中去 - shell ==> file ==> HDFS
通过编写shell脚本去RDBMS上拿到数据,然后通过hdfs shell中的put命令传到到HDFS上 - MapReduce
使用MapReduce将RDBMS上的数据,写到HDFS上去 (最常用的方式)
- file ==> load hive
当需要将Hadoop上的数据导到RDBMS上去,我们该怎么做?
方法:- MapReduce
同理,也可以使用MapReduce,将HDFS上的数据导入到RDBMS中来
- MapReduce
存在的问题
- 写MapReduce程序过于麻烦
- 效率低
当新进来一条业务线,就得写一个MapReduce(尤其在代码封装的不好的情况下,就显得更为麻烦)
基于存在的问题,抽取一个框架,如何进行设计?
- RDBMS层面
需要:driver/username/password/url/database/table/sql 等 - Hadoop层面
需要:hdfs path/分隔符/mappers数量/reducers数量 (reducer的数量决定了有多少个文件输出) 等 - 扩展一:当有一个新的业务线接入以后,那么我们只需要将新的业务线对应的参数传递给mapreduce即可
A) 使用hadoop jar的方式来提交作业
B) 动态的根据业务线的需求来传入参数 - 扩展二:如何用起来更爽 ==> 工匠精神
思路是什么? ==> WebUI + DB Configuration ==> UI/UE
相当于每一条业务线就是一行表记录,全部配置到数据库的表里去,用户只要在界面上点点就可以了,十分方便
- RDBMS层面
在上述的需求下,产生了Sqoop框架,而根据扩展二可以针对目前的Sqoop框架进行改进,进而在生产上更为方便的使用
Sqoop概述
官网:
网址:
http://sqoop.apache.org/
官网介绍
Apache Sqoop(TM) is a tool designed for efficiently transferring bulk data between Apache Hadoop and structured datastores such as relational databases.
版本介绍
Note that 1.99.7 is not compatible with 1.4.6 and not feature complete, it is not intended for production deployment.
sqoop1和sqoop2是不兼容,就好比struts1和struts2之间不能兼容一样
Sqoop有2个版本:1.x 2.x(1.99.x)
名称的由来
Sqoop: SQL-to-Hadoop
SQoops ==> Sqoop
功能概述
RDBMS <==> Hadoop(HDFS/Hive/HBase….)
Sqoop是连接传统数据库到Hadoop之间的一个桥梁
运行原理
MapReduce程序的编写一定有Mapper和Reduce吗?
答案是否定的,MR程序的编写一定会有map,然而reduce不一定有
因此当我们使用MapReduce来完成导入操作,是否需要reduce?
答案是不需要reduce的,sqoop说白了就是一堆的map
注意:sqoop2是有reduce的,而sqoop1则没有
在sqoop1中底层为一个读写的操作,只需要map就能搞定,不需要reduce
因此提出问题:reduce可以决定输出的文件个数,没有reduce,输出的文件个数由谁决定呢?
其实通过map,也可以决定输出的文件个数
Sqoop架构
Sqoop1架构
把RDBMS上的数据通过Sqoop导入到HDFS中来:
Sqoop接收command后,发起一个命令,会有多个Map Task(Map Task数量可以设置),每个Map Task从关系型数据库中去读取数据(有几个Map Task,数据就会被拆分成多少片,每一个task去读那一片数据),然后进行执行。
注意:多个Map Task可以并行执行
Sqoop2架构
Metadata中存储配置信息(会提前配置好),因此客户端在提交的时候,不需要再输入这些配置信息,数据的安全性较好。
通过client来连线server端,再通过server来启动Map Task、Reduce Task来完成作业
Sqoop1与Sqoop2的对比
sqoop1都是以命令的方式进行执行的,而且是以一个客户端的小程序进行完成的 已经能满足大部分的生产需求
sqoop2安全性方面更好一些,但是用起来,有些许的麻烦,同时sqoop2还多了reduce task
Sqoop部署及help命令详解、简单使用
Sqoop部署
下载地址
http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.6-cdh5.7.0.tar.gz
解压文件到指定目录
$>tar -zxvf sqoop-1.4.6-cdh5.7.0.tar.gz -C /opt/app/
配置系统环境变量
$>vi /etc/profileexport SQOOP_HOME=/opt/app/sqoop-1.4.6-cdh5.7.0export PATH=$SQOOP_HOME/bin:$PATH
生效环境变量
$>source /etc/profile
将mysql驱动拷贝到$SQOOP_HOME/lib/下
cp mysql-connector-java-5.1.39-bin.jar $SQOOP_HOME/lib/
配置$SQOOP_HOME/conf/sqoop-env.sh
export HADOOP_COMMON_HOME=/opt/app/hadoop-2.6.0-cdh5.7.0export HADOOP_MAPRED_HOME=/opt/app/hadoop-2.6.0-cdh5.7.0export HIVE_HOME=/opt/app/hive-1.1.0-cdh5.7.0
help命令的使用
使用help命令查看sqoop的用法:
$>sqoop help$>sqoop list-databases --help$>sqoop list-tables --help
简单使用
使用之前,事先 先在mysql数据库中创建sqoop数据库,导入两张表emp、dept
创建sqoop数据库
create database sqoop;
创建dept表
create table dept ( deptno numeric(2), dname varchar(14), loc varchar(13));alter table DEPTadd constraint PK_DEPT primary key (DEPTNO);insert into dept values (10, 'ACCOUNTING', 'NEW YORK');insert into dept values (20, 'RESEARCH', 'DALLAS');insert into dept values (30, 'SALES', 'CHICAGO');insert into dept values (40, 'OPERATIONS', 'BOSTON');
创建emp表
create table emp ( empno numeric(4) not null, ename varchar(10), job varchar(9), mgr numeric(4), hiredate datetime, sal numeric(7, 2), comm numeric(7, 2), deptno numeric(2));alter table EMPadd constraint PK_EMP primary key (EMPNO);alter table EMPadd constraint FK_DEPTNO foreign key (DEPTNO)references DEPT (DEPTNO);insert into emp values (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, null, 20);insert into emp values (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);insert into emp values (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);insert into emp values (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, null, 20);insert into emp values (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);insert into emp values (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, null, 30);insert into emp values (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, null, 10);insert into emp values (7788, 'SCOTT', 'ANALYST', 7566, '1982-12-09', 3000, null, 20);insert into emp values (7839, 'KING', 'PRESIDENT', null, '1981-11-17', 5000, null, 10);insert into emp values (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30);insert into emp values (7876, 'ADAMS', 'CLERK', 7788, '1983-01-12', 1100, null, 20);insert into emp values (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, null, 30);insert into emp values (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, null, 20);insert into emp values (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, null, 10);
sqoop使用入门
sqoop list-databases \--connect jdbc:mysql://localhost:3306 \--username root \--password root sqoop list-tables \--connect jdbc:mysql://localhost:3306/sqoop \--username root \--password root
执行结果:
- Sqoop的产生背景 & 概述 & 架构 & 部署 & 简单使用
- Hive的产生背景 & 概述 & 发展历程 & 架构 & 部署及简单入门
- SQOOP部署及简单使用
- Sqoop的简单使用
- 详解Sqoop的架构和安装部署
- sqoop的安装部署与使用
- sqoop的安装与简单使用
- sqoop简单使用
- sqoop简单使用
- sqoop简单import使用
- sqoop简单import使用
- sqoop的简单实用
- 数据库产生的背景
- 数据库产生的背景
- javaBean产生的背景
- MultiDex的产生背景
- Hadoop的产生背景
- 分库分表的产生背景
- 认证相关的点滴积累
- UIWebView 修改背景色 和 禁止复制 清除 webview 的缓存
- 命题逻辑-1
- [网络流24题]方格取数 最大点权独立集
- 4、树莓派音频——jackd命令应用
- Sqoop的产生背景 & 概述 & 架构 & 部署 & 简单使用
- python(the first week)
- Git push的常见问题
- java系统高并发解决方案
- JAVA初学者如何输出打印菱形
- vue项目发布,通过nginx跨越问题
- 扫描图像自动校正的实现
- PyCharm常用快捷键及调试模式
- tcp(Test)