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表 ...
随机推荐
- java里面的方法。
java里面的方法. java方法是语句的组合,他们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建在其他地方被引用 方法类似于其他语言里面的函数 e ...
- .NET C#导出解决方案的NuGet依赖关系
前言 公司项目需要写DS设计文档,文档需要标识出来你的解决方案文件下的所有项目都使用了NuGet哪些第三方依赖,我们都知道sln下面的所有.csproj文件中的节点下会标识出对应的依赖,但一个一个对比 ...
- uniapp 微信支付,小程序支付,支付宝支付问题汇总
背景介绍 uni-app 可以转微信小程序或直接打包 APP ,支付模块使用统一方法 uni.requestPayment 但是不同平台参数不同容易出现混淆错乱. 相关网站 uni-app 统一支付: ...
- vue4 项目的创建
1,安装vue cli 脚手架,是全局安装npm install -g @vue/cli 可以在输出信息中看到安装位置,例如:C:\Users\xiaochangjian\AppData\Roamin ...
- 记一次U8的插件开发
在u8上开发一个winform的插件用来实现不同账套之间的单据协同,使用的方法是用存储过程走数据库.因为原账套的数据量会很大,如果直接在插件上用单线程传输,那肯定会造成传输过程,u8卡死的.一种方法是 ...
- 不关闭SELinux情况下使用ftp传输
在做搭建ftp服务器的作业时,整了一个活,在不关闭SELinux的情况下测试ftp服务器 使用的环境,虚拟机*2 (CentOS 7),Hyper-v,网卡已设为静态 需要安装的软件包: 服务器(下称 ...
- ModelScope初体验
使用环境:windows 11 前置条件:已安装 anaconda 参考文档:环境安装 step1:新建一个 conda 环境,命名为 modelscope conda create -n model ...
- Android 13 - Media框架(4)- MediaPlayerService
关注公众号免费阅读全文,进入音视频开发技术分享群! MediaPlayerService是android的多媒体框架的核心服务之一,该服务存储有android平台所支援的编解码器信息,管理所有通过Me ...
- 春松客服入驻Rainbond开源应用商店
"做好开源客服系统" 春松客服是拥有坐席管理.渠道管理.机器人客服.数据分析.CRM 等功能于一身的新一代客服系统.将智能机器人与人工客服完美融合,同时整合了多种渠道,结合 CRM ...
- 一个问题:六位八段数码管(Verilog)
[基本信息] 需求:verilog程序,显示任意六位字符或数值,包含点号,且能够按需点亮位数.(学习篇) 芯片型号:cyclone Ⅳ EP4CE10F17C8 数码管属性:六位.八段 [最终成果图] ...