Sqoop框架基础

Sqoop框架基础

本节我们主要需要了解的是大数据的一些协作框架,也是属于Hadoop生态系统或周边的内容,比如:

** 数据转换工具:Sqoop

** 文件收集库框架:Flume

** 任务调度框架:Oozie

** 大数据Web工具:Hue

这些框架为什么成为主流,请自行百度谷歌,此处不再赘述。

* CDH版本框架

Cloudera公司发布的CDH版本,在国内,很多大公司仍在使用,比如:一号店,京东,淘宝,百度等等。Cloudera公司发布的每一个CDH版本,其中一个最大的好处就是,帮我们解决了大数据Hadoop 2.x生态系统中各个框架的版本兼容问题,我们直接选择某一版本,比如CDH5.3.6版本,其中hadoop版本2.5.0,hive版本0.13.1,flume版本1.4.5;还有一点就是类似Sqoop、Flume、Oozie等框架,在编译的时候都要依赖对应的Hadoop 2.x版本,使用CDH版本的时候,已经给我们编译好了,无需再重新配置编译。

传送门已开启:CDH5.x版本下载地址

分享地址:链接:http://pan.baidu.com/s/1bpIPhxH 密码:qes2

* 安装配置CDH版本Hadoop

** 这一点与之前配置安装apache的hadoop差不多,所以,直接写主体思路:

1、在modules中创建新目录cdh来解压hadoop-cdh

2、修改hadoop以下配置文件的JAVA_HOME

** hadoop-env.sh

** yarn-env.sh

** mapred-env.sh

3、继续修改以下配置文件

** core-site.xml

** hdfs-site.xml

** yarn-site.xml

** mapred-site.xml

** slaves

4、拷贝至其他服务器

* 安装配置CDH版本zookeeper

1、修改zoo.cfg

2、修改myid(zkData目录不变的话,就不用再次修改了)

3、格式化HDFS,初始化zookeeper,并开启服务

三台机器:

分别开启:

** zookeeper服务,以及journalnode节点服务

$ sh /opt/modules/zookeeper-xx.xx.xx/bin/zkServer.sh start

$ sbin/hadoop-daemon.sh start journalnode

** 接着格式化namenode节点

$ bin/hadoop namenode -format

** 然后在备用namenode机器上执行元数据同步

$ bin/hdfs namenode -bootstrapStandby

** 最后依次启动即可

$ sbin/start-dfs.sh

$ sbin/start-yarn.sh

$ sbin/mr-jobhistory-daemon.sh start historyserver

(尖叫提示:如果设置了日志聚合功能,请在yarn-site.xml中配置yarn.log.server.url,如下图)

(尖叫提示:如果重新制定了HDFS的Data目录,或者格式化了NameNode节点,请登录mysql删除metastore库,因为该库存储了hive数据仓库的元数据)

* 安装配置CDH版本Hive

** 修改如下配置文件:

** hive-env.sh

** hive-site.xml

** 拷贝JDBC驱动到hive的lib目录下

$ cp mysql-connector-java-5.1.27-bin.jar /opt/modules/cdh/hive-0.13.1-cdh5.3.6/lib/

** 启动mysql,设置用户,权限

忘记请翻阅前一篇文章

** 修改目录权限

确保HDFS正常运行,之后涉及命令:

$ bin/hadoop fs -chmod g+w /tmp

$ bin/hadoop fs -chmod g+w /user/hive/warehouse

以上配置完成后我的三台机器的JPS分别为:

z01:

z02:

z03:

* Sqoop

** 什么?这个英文单词的意思?只能这么解释:

SQL-TO-HADOOP

看加粗部分即可明白,这个东西其实就是一个连接传统关系型数据库和Hadoop的桥梁,有如下两个主要功能:

** 把关系型数据库的数据导入到Hadoop与其相关的系统(HBase和Hive)中

** 把数据从Hadoop系统里抽取并导出到关系型数据库里

在转储过程中,sqoop利用mapreduce加快数据的传输速度,以批处理的方式进行数据传输。

如图所示:

** 版本划分

** sqoop1(1.4.x+)和sqoop2(1.99.x+),注意这两个版本是完全不兼容的

** sqoop2的进化:

*** 引入了sqoop server,集中化管理Connector

*** 多种访问方式:CLI,Web UI,REST API

*** 引入基于角色的安全机制

** sqoop设计架构

** sqoop使用逻辑

基于上图,我们需要理解几个概念:

** import:

向HDFS、hive、hbase中写入数据

** export

向关系型数据库中写入数据

** 安装sqoop

*** 将sqoop压缩包解压至/opt/modules/cdh目录下

*** 拷贝sqoop-env-template.sh文件并命名为sqoop-env.sh文件

*** 配置sqoop-env.sh

根据里面的英文注释,应该也能够明白需要改些什么:没错,就是让sqoop去关联其他服务,hbase先不用管它。

配置好后如图:

*** 拷贝jdbc的驱动到sqoop的lib目录下

$ cp /opt/modules/apache-hive-0.13.1-bin/lib/mysql-connector-java-5.1.27-bin.jar lib/

** 开始玩耍sqoop

*** 查看sqoop帮助:

$ bin/sqoop help,如图:

*** 测试sqoop是否连接成功

$ bin/sqoop list-databases --connect jdbc:mysql://z01:3306/metastore --username root --password 123456

如图:

* 接下来我们写几个例子,功能用法便可一目了然

例子1:RDBMS->HDFS

利用sqoop将mysql中的数据导入到HDFS中

step1、在mysql中创建一张表,表里面弄点数据

开启mysql服务:

# systemctl start  mysqld.service

登入mysql服务:

# mysql -uroot -p123456

创建一个新的数据库:

mysql> create database db_demo;

创建完成后,显示一下,如图:

在db_demo下创建一张表:

mysql> use db_demo;

mysql> create table user(

-> id int(4) primary key not null auto_increment,

-> name varchar(255) not null,

-> sex varchar(255) not null

-> );

如图:

step2、向刚才创建的这张表中导入一些数据

mysql> insert into user(name, sex) values(‘Thomas‘,‘Male‘); 如果需要插入行数据,你知道怎么做。

最后我的表变成了这样:

step3、使用sqoop导入数据至HDFS

形式1:全部导入

$ bin/sqoop import \

--connect jdbc:mysql://z01:3306/db_demo \

--username root \

--password 123456 \

--table user \

--target-dir /user/hive/warehouse/user \

--delete-target-dir \

--num-mappers 1 \

--fields-terminated-by "\t"

解释:

** --target-dir /user/hive/warehouse/user: 指定HDFS输出目录

** --delete-target-dir \:如果上面输出目录存在,就先删除

** --num-mappers 1 \:设置map个数为1,默认情况下map个是4,默认会在输出目录生成4个文件

** --fields-terminated-by \t:指定文件的分隔符为 \t

成功后,HDFS对应目录中会产生一个part文件,如图所示:

查看该文件:

形式2:导入指定查询结果

$ bin/sqoop import \

--connect jdbc:mysql://z01:3306/db_demo \

--username root \

--password 123456 \

--target-dir /user/hive/warehouse/user \

--delete-target-dir \

--num-mappers 1 \

--fields-terminated-by "\t" \

--query ‘select id,name from user where id>=3 and $CONDITIONS‘

解释:

--query ‘select id,name from user where id>=3 and $CONDITIONS‘ :把select语句的查询结果导入

形式3:导入指定列

$ bin/sqoop import \

--connect jdbc:mysql://z01:3306/db_demo \

--username root \

--password 123456 \

--table user \

--target-dir /user/hive/warehouse/user \

--delete-target-dir \

--num-mappers 1 \

--fields-terminated-by "\t" \

--columns  id,sex

形式4:where指定条件

$ bin/sqoop import \

--connect jdbc:mysql://z01:3306/db_demo \

--username root \

--password 123456 \

--table user \

--target-dir /user/hive/warehouse/user \

--delete-target-dir \

--num-mappers 1 \

--fields-terminated-by "\t" \

--columns  id,name \

--where "id<=3"

例子2:Mysql -> Hive

利用sqoop将mysql里面的数据导入到Hive表

Step1、创建hive表(注:如果不创建,则自动生成表)

hive> create database db_hive_demo ;

create table db_hive_demo.user (

id int,

name string,

sex string

)

row format delimited fields terminated by "\t" ;

操作如图:

Step2、向hive中导入数据

$ bin/sqoop import \

--connect jdbc:mysql://z01:3306/db_demo \

--username root \

--password 123456 \

--table user \

--num-mappers 1 \

--hive-import \

--hive-database db_hive_demo \

--hive-table user \

--fields-terminated-by "\t" \

--delete-target-dir \

--hive-overwrite

完成后,查看:

例子3:Hive/HDFS -> RDBMS

从Hive或HDFS中把数据导入mysql

Step1、在mysql中创建一个待导入数据的表

mysql> use db_demo;

mysql> create table user_from_hadoop(

-> id int(4) primary key not null auto_increment,

-> name varchar(255) default null,

-> sex varchar(255) default null

-> );

如图:

Step2、将hive或者hdfs中的数据导入到mysql表中

$ bin/sqoop export \

--connect jdbc:mysql://z01:3306/db_demo \

--username root \

--password 123456 \

--table user_from_hadoop \

--num-mappers 1 \

--export-dir /user/hive/warehouse/db_hive_demo.db/user \

--input-fields-terminated-by "\t"

导入成功后,查看:

* Sqoop 其他用法

类似hive,sqoop也可以将语句保存在文件中,然后执行这个文件。

例如:

编写该文件:

$ mkdir opt/

vi opt/job_temp.opt,内容如图:

执行该文件:

$ bin/sqoop  --options-file opt/job_temp.opt,完成后查看该hive表,如图:

* 总结

本节讲解了如何在CDH中配置使用hadoop、hive、sqoop,以及学习了整个操作流程,大家可以自己试着练习一下,数据分析并把结果输出到Mysql数据库中以便于接口等服务。



个人微博:http://weibo.com/seal13

QQ大数据技术交流群(广告勿入):476966007


作者:Z尽际链接:https://www.jianshu.com/p/dd19e15a4de0來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文地址:https://www.cnblogs.com/wzlbigdata/p/8277680.html

时间: 2024-12-11 05:13:03

Sqoop框架基础的相关文章

HBase框架基础(四)

* HBase框架基础(四) 上一节我们介绍了如何使用HBase搞一些MapReduce小程序,其主要作用呢是可以做一些数据清洗和分析或者导入数据的工作,这一节我们来介绍如何使用HBase与其他框架进行搭配使用. * HBase与Hive 在开始HBase与Hive搭配使用前,我们复习一下这两个框架的特点: Hive: ** 数据仓库 ** 用于数据分析,数据清洗等等 ** 基于MapReduce ** 延迟高,离线使用 HBase: ** 面向列存储的非关系型数据库 ** 存储数据 ** 基于

Hive框架基础(二)

* Hive框架基础(二) 我们继续讨论hive框架 * Hive的外部表与内部表 内部表:hive默认创建的是内部表 例如: create table table001 (name string , age string) location '/input/table_data'; 此时:会在HDFS上新建一个table001表的数据存放地 接着执行: load data inpath'/input/data 'into table table001;(注意,load关键字后没有跟local关

框架基础:关于ajax设计方案(三)---集成ajax上传技术

之前发布了ajax的通用解决方案,核心的ajax发布请求,以及集成了轮询.这次去外国网站逛逛,然后发现了ajax level2的上传文件,所以就有了把ajax的上传文件集成进去的想法,ajax方案的level2的改进就不介绍了,不清楚的可到前几篇博客去看看.我们直接切入主题. 概念介绍: 1. js的FormData:js中在新的版本中已经支持了FormData对象,可以初始化一个空的form,或者初始化已经存在的form,浏览器测试代码. 2. 浏览器的支持:浏览器已支持input=file的

框架基础:ajax设计方案(三)---集成ajax上传技术

之前发布了ajax的通用解决方案,核心的ajax发布请求,以及集成了轮询.这次去外国网站逛逛,然后发现了ajax level2的上传文件,所以就有了把ajax的上传文件集成进去的想法,ajax方案的level2的改进就不介绍了,不清楚的可到前几篇博客去看看.我们直接切入主题. 概念介绍: 1. js的FormData:js中在新的版本中已经支持了FormData对象,可以初始化一个空的form,或者初始化已经存在的form,浏览器测试代码. 2. 浏览器的支持:浏览器已支持input=file的

框架基础:ajax设计方案(一)---集成核心请求

框架基础:ajax设计方案(一)---集成核心请求 框架基础:ajax设计方案(一)---集成核心请求 报告,我要说话!xp被历史淘汰了,IE6 say goodbye了,太TM开心了,从此不要兼容IE6了,哈哈哈哈哈哈 报告,我要说话!IE这sb为啥不早点被杀掉呢,找工作听说要兼容IE,立马软了,唉唉唉唉唉唉 报告,我要说话!Jquery太丰富了,老子只用了几个功能,妈的,太不划算了,啊啊啊啊啊啊 ...... 好了,言归正传.对于想到整理ajax设计方案,原因如下: 从资源合理利用的角度以及

(C/C++)基于SharpUI控件库的插件式框架开发--第三篇框架基础服务库

一个框架基础的东西,一般也是操作的最基础的类,比如char.int.bool等,有时出现内存泄露的问题导致错误的抛出,但是C++开发有的时候就算是抛出异常,那也是靠经验来积累才能非常快速准确的找出错误所在,这就需要在框架中需要添加日志管理的接口,日志管理的好处就是开发者自身在找异常时提供参考,另一个就是如果用户操作时出现问题,也可将日志反馈,帮助快速解决问题:总之了为了更好的扩展完善我的框架,我详细列一下这个基础服务库(XPCore)包含内容: 虽说sharpui控件库内封闭好string类,但

Hibernate框架基础

Hibernate框架基础 Hibernate框架 ORM概念 O, Object 对象 R, Realtion 关系 (关系型数据库: MySQL, Oracle-) M,Mapping 映射 ORM, 对象关系映射! ORM, 解决什么问题? 存储: 能否把对象的数据直接保存到数据库? 获取: 能否直接从数据库拿到一个对象? 想做到上面2点,必须要有映射! 总结: Hibernate与ORM的关系? Hibernate是ORM的实现! Hibernate HelloWorld案例 搭建一个H

深入浅出ExtJS(第三版) Ext框架基础

1 1.准备工作 2 >.深入浅出Ext JS(第3版) 3 >.随书代码(图灵社区) 4 >.ExtJS 4.1.1a 5 6 第2章 Ext框架基础 7 2.1 面向对象的基础架构 8 2.1.1 创建类 9 >.定义一个类: 10 Ext.define('demo.Demo',{ 11 name:'Lingo', 12 hello:function () { 13 return 'Hello'+this.name; 14 } 15 }); 16 //第一个参数是字符串类型的类

(转)Hibernate框架基础——一对多关联关系映射

http://blog.csdn.net/yerenyuan_pku/article/details/52746413 上一篇文章Hibernate框架基础——映射集合属性详细讲解的是值类型的集合(即集合元素是普通类型).现在从本文开始我们就要介绍实体类型的集合(即集合元素是另一个实体)了. 一对多关联关系映射 我们还是以一个活生生的例子来详解一对多关联关系映射吧!就以部门和员工的关系为例. 单向关联:仅仅建立从Employee到Department的多对一关联,即仅仅在Employee类中定义