sqoop导入导出到mysql,hbase,hive,hdfs系统,多表关联导出案例
Sqoop工具
1、协助 RDBMS 与 Hadoop 之间进行高效的大数据交流。
把关系型数据库的数据导入到 Hadoop 与其相关的系统 (如HBase和Hive)
同时也可以把数据从 Hadoop 系统里抽取并导出到关系型数据库里。
Sqoop中一大亮点就是可以通过hadoop的mapreduce把数据从关系型数据库中导入数据到HDFS。
Sqoop就是一个转换工具,用于在关系型数据库与HDFS之间进行数据转换。
项目使用场景:
1.业务数据存放在关系数据库中。如果数据量达到一定规模后需要对其进行分析或同统计,
单纯使用关系数据库可能会成为瓶颈,这时可以将数据从业务数据库数据导入(import)
到Hadoop平台进行离线分析。
2.对大规模的数据在Hadoop平台上进行分析以后,可能需要将结果同步到关系数据库中作
为业务的辅助数据,这时候需要将Hadoop平台分析后的数据导出(export)到关系数据库。
一、Sqoop与MySQL
1.列出mysql数据库中的所有数据库
sqoop list-databases -connect jdbc:mysql://hdp-qm-01:3306 \
-username hadoop -password hadoop
2.列出数据库hivedb1711中的所有数据表
sqoop list-tables -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711 \
-username hadoop -password hadoop
3.通过Sqoop执行SQL语句
sqoop eval -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711 \
-username hadoop -password hadoop -query 'select * from EMP'
二、Sqoop与HDFS(MySQL数据库与HDFS)
1.将hivedb1711.EMP表中的数据导入HDFS的/sqfs目录下
sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711 \
-username hadoop -password hadoop -table EMP -m 1 -target-dir /sqfs/emp1
解释:
(1)-table EMP 表示要导出的EMP表
(2) -m 1 表示使用一个maptask操作
(3) -target-dir /sqfs/emp1 数据导到/sqfs/emp1位置
注意:执行过程走mapreduce,所以要保证每一个集群节点都能访问hivedb1711数据库!
grant all privileges on hivedb1711.* to 'hadoop'@'%' identified by 'hadoop';
使用sql语句过滤满足条件的数据,将其导入hdfs系统(注意:and $CONDITIONS)
sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711 \
-username hadoop -password hadoop -query 'select * from EMP where emgr=10 and $CONDITIONS' \
-m 2 --split-by eNo -target-dir /sqfs/emp3;
没有过滤,使用sql语句导入所有数据到hdfs(注意:where $CONDITIONS)
sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711 \
-username hadoop -password hadoop -query 'select * from EMP where $CONDITIONS' \
-m 2 --split-by eNo -target-dir /sqfs/emp4;
注意:这种方式和1里面的操作是一个效果
2.将HDFS上/sqfs目录下的数据导入的hivedb1711.emp2表中
(1).hivedb1711.emp2表结构必须存在
CREATE TABLE IF NOT EXISTS emp2(
eNo int(25) not null primary key,
eName varchar(45),
eJob varchar(45),
emgr int(25),
eHiredate date,
eSal int(45),
ecomm int(45),
dp_no int(25)
);
(2).导出数据到emp2表的命令:
sqoop export -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711 \
-username hadoop -password hadoop -table emp2 \
-m 1 -export-dir /sqfs/emp3
三、Sqoop与Hive
1.将关系型数据的emp表结构复制到Hive中(复制表结构)
sqoop create-hive-table -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711 \
-username hadoop -password hadoop -table emp2 -hive-table demo_log.emp \
-fields-terminated-by "|" -lines-terminated-by "\n"
2.将关系数据库中的emp表的数据导入文件到Hive表中
sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711 \
-username hadoop -password hadoop -table emp2 -hive-table demo_log.emp -m 3 \
-fields-terminated-by "|" -hive-import
3.将Hive中的表 demo_log.emp数据导入到mysql数据库emp3表中
(1)先在MySQL数据库中简历表的结构
CREATE TABLE IF NOT EXISTS emp3(
eNo int(25) not null primary key,
eName varchar(45),
eJob varchar(45),
emgr int(25),
eHiredate date,
eSal int(45),
ecomm int(45),
dp_no int(25)
);
(2).导出数据到emp3表:
sqoop export -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711 \
-username hadoop -password hadoop -table emp3 \
-export-dir /user/hive/warehouse/demo_log.db/emp/* \
-input-fields-terminated-by '|'
说明:-input-fields-terminated-by '|' 分隔符是根据export-dir 指定
目录下文件内容的分割符号来确定的
四、Sqoop与->HBase
1. MySQL 中的EMP表中的数据导入数据到 HBase的qm170701:mysql_emp表中
(1)先在HBase表中创建HBase表:
create 'qm170701:mysql_emp','cf'
(2).导入数据到HBase的qm170701:mysql_emp表
sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711 \
-username hadoop -password hadoop \
-table EMP \
-hbase-table qm170701:mysql_emp \
-column-family 'cf' \
-hbase-row-key eNo -m 1
2.将Mysql数据库emp表不同列的数据添加到emp3表中不同列族中
(1)先在HBase表中创建HBase表:
create 'qm170701:mysql_emp2','cf1','cf2'
(2).导入数据到HBase的qm170701:mysql_emp2表
A.先将EMP表的eName,eJob列中的数据到cf1列族中
sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711 \
-username hadoop -password hadoop \
-table EMP \
-hbase-table qm170701:mysql_emp2 \
-column-family 'cf1' \
-hbase-row-key eNo -m 1 -columns eNo,eName,eJob
B.将EMP表的emgr,eHiredate,eSal,ecomm,dp_no列中的数据到cf2列族中
sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711 \
-username hadoop -password hadoop \
-table EMP \
-hbase-table qm170701:mysql_emp2 \
-column-family 'cf2' \
-hbase-row-key eNo -m 1 -columns eNo,emgr,eHiredate,eSal,ecomm,dp_no
===========================================================
多表关联导出!!!!!!
===========================================================
【2】.JONES领导谁。(谁向JONES报告)
sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711 \
-username hadoop -password hadoop \
-query 'select e2.eNo,e2.eName as name from(select eNo from EMP where eName="JONES")e1 left join EMP e2 on e1.eNo=e2.emgr where $CONDITIONS' \
-m 2 --split-by e2.eNo -target-dir /sqfs/emp122
没有问题:
【3】 各个部门中工资大于1500的员工人数及部门名称!!!!!!!!
sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711 \
-username hadoop -password hadoop \
-query 'select d1.dp_name as dname,e2.nums as nums from(select e1.dp_no,count(e1.eNo) as nums from EMP e1 where e1.eSal>1500 group by dp_no) e2 left join dept d1 on d1.dp_no=e2.dp_no where $CONDITIONS' \
-m 1 --split-by e2.dname -target-dir /sqfs/emp122
sqoop导入导出到mysql,hbase,hive,hdfs系统,多表关联导出案例的更多相关文章
- Sqoop导入数据到mysql数据库报错:ERROR tool.ExportTool: Error during export: Export job failed!(已解决)
问题描述: Container killed by the ApplicationMaster. Container killed on request. Exit code is 143 Conta ...
- sqoop:mysql和Hbase/Hive/Hdfs之间相互导入数据
1.安装sqoop 请参考http://www.cnblogs.com/Richardzhu/p/3322635.html 增加了SQOOP_HOME相关环境变量:source ~/.bashrc ...
- Sqoop使用,mysql,hbase,hive等相互转换
Sqoop 是一款用来在不同数据存储软件之间进行数据传输的开源软件,它支持多种类型的数据储存软件. 安装 Sqoop 1.下载sqoop并加mysql驱动包 http://mirror.bit.edu ...
- 使用sqoop从Oracle或mysql抽取数据到HDFS遇到的报错及解决
一.参考文档: 1.https://www.rittmanmead.com/blog/2014/03/using-sqoop-for-loading-oracle-data-into-hadoop-o ...
- 完美转换MySQL的字符集 Mysql 数据的导入导出,Mysql 4.1导入到4.0
MySQL从4.1版本开始才提出字符集的概念,所以对于MySQL4.0及其以下的版本,他们的字符集都是Latin1的,所以有时候需要对mysql的字符集进行一下转换,MySQL版本的升级.降级,特别是 ...
- Hive三种不同的数据导出的方式
转自:http://blog.chinaunix.net/uid-27177626-id-4653808.html Hive三种不同的数据导出的方式,根据导出的地方不一样,将这些方法分为三类:(1)导 ...
- Hive的两种表
1.内部表 内部表Load数据有两种方式:① Load data ***:②hdfs dfs -put ****.这是因为在Metastore文件,即mysql的hive数据库的“SDS”表中,保存着 ...
- Oracle中如何实现Mysql的两表关联update操作
在看<MySQL 5.1参考手册>的时候,发现MySQL提供了一种两表关联update操作.原文如下: UPDATE items,month SET items.price=month.p ...
- 面试官:为什么mysql不建议执行超过3表以上的多表关联查询?
概述 前段时间在跟其他公司DBA交流时谈到了mysql跟PG之间在多表关联查询上的一些区别,相比之下mysql只有一种表连接类型:嵌套循环连接(nested-loop),不支持排序-合并连接(sort ...
- sqoop用法之mysql与hive数据导入导出
目录 一. Sqoop介绍 二. Mysql 数据导入到 Hive 三. Hive数据导入到Mysql 四. mysql数据增量导入hive 1. 基于递增列Append导入 1). 创建hive表 ...
随机推荐
- Go pprof 认知到实践
快速开始 测试环境:go version go1.22.2 windows/amd64,源代码开源在 https://github.com/oldme-git/teach-study/tree/mas ...
- 在Deepin 20.2系统中换源并全新图解安装MySQL数据库
在Deepin 20.2系统中换源并全新图解安装MySQL数据库 https://www.ywnz.com/linuxysjk/9249.html ubuntu下apt-get彻底卸载mysql 删除 ...
- OpenVoiceV2本地部署教程,苹果MacOs部署流程,声音响度统一,文字转语音,TTS
最近OpenVoice项目更新了V2版本,新的模型对于中文推理更加友好,音色也得到了一定的提升,本次分享一下如何在苹果的MacOs系统中本地部署OpenVoice的V2版本. 首先下载OpenVoic ...
- Mark Lee:Splashtop 如何成为最新的 10 亿美元估值技术独角兽
从左至右:Splashtop联合创始人Rob.Philip.Mark和Thomas Splashtop 刚刚完成了由我们的长期投资者 Sapphire Ventures 领投的 5000 万美元的新融 ...
- C 语言编程 — 宏定义与预处理器指令
目录 文章目录 目录 前文列表 宏 预处理器 预处理器指令 预处理器指令示例 预定义宏 预处理器指令运算符 宏延续运算符 字符串常量化运算符 标记(Token)粘贴运算符 defined() 运算符 ...
- linux分区规划
一般来说,对系统进行分区,需要提前规划好: 系统分区:如果资源允许的话,建议300G(该分区只存放操作系统和一些配置文件等): /boot分区:是引导分区(该分区损坏,系统就启动不了了),在b ...
- Fastapi获取其他第三方回调
flask.django获取第三方回调数据,可以用request.data直接获取全部参数.而很多同学不知道fastapi如何获取回调的全部参数,其实可以通过request.body(). 如: @p ...
- RTMP 直播 H265 推流适配总结
1.在iOS11的系统之上,苹果逐渐放开H265硬编硬解的能力,硬解码的能力只要升级到iOS11之后,iPhone6+以上的机型就支持了(印象中): H265硬编码的能力对设备要求较高,不仅要求系统版 ...
- js 判断手机号格式
大江东去,浪淘尽,千古风流人物.故垒西边,人道是,三国周郎赤壁.乱石穿空,惊涛拍岸,卷起千堆雪.江山如画,一时多少豪杰.遥想公瑾当年,小乔初嫁了,雄姿英发.羽扇纶巾,谈笑间,樯橹灰飞烟灭.故国神游,多 ...
- 绘图与可视化--matplotlib API入门
matplotlib API函数都位于matplotlib.pyplot模块中. 本节代码中引入的约定为:import matplotlib.pyplot as plt 另外,numpy库也会用到,约 ...