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
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Sqoop框架基础的更多相关文章
- Hive框架基础(二)
* Hive框架基础(二) 我们继续讨论hive框架 * Hive的外部表与内部表 内部表:hive默认创建的是内部表 例如: create table table001 (name string , ...
- HBase框架基础(四)
* HBase框架基础(四) 上一节我们介绍了如何使用HBase搞一些MapReduce小程序,其主要作用呢是可以做一些数据清洗和分析或者导入数据的工作,这一节我们来介绍如何使用HBase与其他框架进 ...
- Hibernatel框架基础使用
Hibernatel框架基础使用 1.简介 1.1.Hibernate框架由来 Struts:基于MVC模式的应用层框架技术 Hibernate:基于持久层的框架(数据访问层使用)! Spring:创 ...
- Struts2框架基础
Struts2框架基础 1.Java的框架 1.1.框架简介 在大型项目开发过程中,经常会使用到一些框架,这样做好的好处是能够提高工作效率,在java中最常用的的框架就是SSH,这其实是三个框架的简称 ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- 框架基础之Hibernate简介
框架基础之Hibernate简介 1.什么是Hibernate? Hibernate是一个开发源代码的对象关系映射框架,它对JDBC进行非常轻量级的对象封装,使得程序员可以随心所欲地使用对象编程思维来 ...
- ThinkPHP框架基础
ThinkPHP 一.php框架基础介绍 真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维 ...
- Python云端系统开发入门——框架基础
Django框架基础 这是我学习北京理工大学嵩天老师的<Python云端系统开发入门>课程的笔记,在此我特别感谢老师的精彩讲解和对我的引导. 1.Django简介与安装 Django是一个 ...
- 如何基于Winform开发框架或混合框架基础上进行项目的快速开发
在开发项目的时候,我们为了提高速度和质量,往往不是白手起家,需要基于一定的基础上进行项目的快速开发,这样可以利用整个框架的生态基础模块,以及成熟统一的开发方式,可以极大提高我们开发的效率.本篇随笔就是 ...
随机推荐
- 蚁视新家show,小伙伴们快来增加有范儿有爱的蚁视大家庭吧!
蚁视搬新家啦.新家在学院路上,离中关村非常近.离宇宙的中心非常近,离好多同学也非常近有木有! 新家绝对是超级创客范儿,绝对理想中的工作环境有木有!愿意增加蚁视的小伙伴们.快快来吧! 以下是蚁视新办公室 ...
- 【Java】【Flume】Flume-NG启动过程源代码分析(一)
从bin/flume 这个shell脚本能够看到Flume的起始于org.apache.flume.node.Application类,这是flume的main函数所在. main方法首先会先解析sh ...
- Opencv Mat矩阵中data、size、depth、elemSize、step等属性的理解
data: uchar类型的指针,指向Mat数据矩阵的首地址.可以理解为标示一个房屋的门牌号: dims: Mat矩阵的维度,若Mat是一个二维矩阵,则dims=2,三维则dims=3,大多数情况下处 ...
- [JZOJ 5910] [NOIP2018模拟10.18] DuLiu 解题报告 (并查集+思维)
题目链接: https://jzoj.net/senior/#contest/show/2530/0 题目: LF是毒瘤出题人中AK IOI2019,不屑于参加NOI的唯一的人.他对人说话,总是满口垃 ...
- jqGrid的editrules参数
原文链接:http://blog.csdn.net/mengtianyalll/article/details/13502841 editrules editrules是用来设置一些可用于可编辑 ...
- ES6 | 关于class类 继承总结
子类必须在constructor方法中调用super方法,否则新建实例时会报错.这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工.如果不调用super方法,子类就得不到 ...
- SVN Commit报错 svn: E155037: Previous operation has not finished; run 'cleanup' if it was interrupted
svn commit 文件出错 svn: E155037: Commit failed (details follow): svn: E155037: Previous operation has n ...
- 【算法】Bellman-Ford算法(单源最短路径问题)(判断负圈)
单源最短路问题是固定一个起点,求它到其他所有点的最短路的问题. 算法: 设 d[i] 表示 起点 s 离点 i 的最短距离. [1.初始化] 固定起点s,对所有的点 , 如果 i = s , ...
- SSH框架下的多表增删改查
下载地址:SSH框架下的多表增删改查 点击进入码云Git下载 点击进入CSDN下载 项目结构: 项目代码就不全部贴出来了,只贴下核心代码.需要项目的自己可以去下载. package com.atgui ...
- HTML基础——网站图片显示页面
1.图片标签 <img /> 属性: src:指的是图片显示的路径(位置) 绝对路径:D:\Pictures\Saved Pictures 相对路径: ①同一级:直接写文件名称或者./文件 ...