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系统,多表关联导出案例的更多相关文章

  1. 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 ...

  2. sqoop:mysql和Hbase/Hive/Hdfs之间相互导入数据

    1.安装sqoop 请参考http://www.cnblogs.com/Richardzhu/p/3322635.html 增加了SQOOP_HOME相关环境变量:source ~/.bashrc  ...

  3. Sqoop使用,mysql,hbase,hive等相互转换

    Sqoop 是一款用来在不同数据存储软件之间进行数据传输的开源软件,它支持多种类型的数据储存软件. 安装 Sqoop 1.下载sqoop并加mysql驱动包 http://mirror.bit.edu ...

  4. 使用sqoop从Oracle或mysql抽取数据到HDFS遇到的报错及解决

    一.参考文档: 1.https://www.rittmanmead.com/blog/2014/03/using-sqoop-for-loading-oracle-data-into-hadoop-o ...

  5. 完美转换MySQL的字符集 Mysql 数据的导入导出,Mysql 4.1导入到4.0

    MySQL从4.1版本开始才提出字符集的概念,所以对于MySQL4.0及其以下的版本,他们的字符集都是Latin1的,所以有时候需要对mysql的字符集进行一下转换,MySQL版本的升级.降级,特别是 ...

  6. Hive三种不同的数据导出的方式

    转自:http://blog.chinaunix.net/uid-27177626-id-4653808.html Hive三种不同的数据导出的方式,根据导出的地方不一样,将这些方法分为三类:(1)导 ...

  7. Hive的两种表

    1.内部表 内部表Load数据有两种方式:① Load data ***:②hdfs dfs -put ****.这是因为在Metastore文件,即mysql的hive数据库的“SDS”表中,保存着 ...

  8. Oracle中如何实现Mysql的两表关联update操作

    在看<MySQL 5.1参考手册>的时候,发现MySQL提供了一种两表关联update操作.原文如下: UPDATE items,month SET items.price=month.p ...

  9. 面试官:为什么mysql不建议执行超过3表以上的多表关联查询?

    概述 前段时间在跟其他公司DBA交流时谈到了mysql跟PG之间在多表关联查询上的一些区别,相比之下mysql只有一种表连接类型:嵌套循环连接(nested-loop),不支持排序-合并连接(sort ...

  10. sqoop用法之mysql与hive数据导入导出

    目录 一. Sqoop介绍 二. Mysql 数据导入到 Hive 三. Hive数据导入到Mysql 四. mysql数据增量导入hive 1. 基于递增列Append导入 1). 创建hive表 ...

随机推荐

  1. 【web安全】修改和配置tomcat版本信息

    场景 目前网络安全的越来越受重视,tomcat作为重要的web容器被广泛应用,如何隐藏信息保证.在开放网络世界中,不易被攻击. 操作思路 1.进入Tomcat文件中的lib文件夹,将catalina. ...

  2. 01.Markdown 语法

    标题 # 一级标题 ## 二级标题 ### 三级标题 ...(最多六级标题) 字体 **hello**:粗体 *hello*:斜体 三个*:粗体+斜体 ~~hello~~:删除线 引用 > 引用 ...

  3. python—CSV的读写

    目录 csv文件 打开模式 1.写入数组类型数据 2.写入字典序列类型数据 3.csv的读取 csv文件 CSV是一种以逗号分隔数值的文件类型,在数据库或电子表格中,常见的导入导出文件格式就是CSV格 ...

  4. IPv6 — 路由方式

    目录 文章目录 目录 前文列表 IPv6 的路由 前文列表 <IPv6 - 网际协议第 6 版> <IPv6 - 地址格式与寻址模式> <IPv6 - 协议头> & ...

  5. C#老码农的职业生涯

    开头白 大家好,我是tibos,19年10月1号由深圳回武汉的码农,目前入职武汉福禄网络,最近刷到的年终总结也比较多,赶在这最后一天,我也来凑个热闹 心路历程 -> 菜鸟入江湖 13年开启码农的 ...

  6. GitHub SSH 快速配置

    每次更换系统或者电脑时,都需要重新配置一番 Github SSH 的验证,记性不太好,写了一个快速部署的辅助脚本,直接安装脚本提示使用即可,经测试,Linux 和 Windows 下均能使用. 脚本功 ...

  7. C#的奇技淫巧:利用WinRM来远程操控其他服务器上的进程

      前言:有时候远程服务器的进程你想偷偷去围观一下有哪些,或者对一些比较调皮的进程进行封杀,或者对一些自己研发的服务进行远程手动启动或者重启等,又不想打开远程桌面,只想悄咪咪地执行,那也许下面的文章会 ...

  8. PHP 有哪些常用的魔术变量 ?

    引言 PHP 向它运行的任何脚本提供了大量的预定义常量. 魔术变量 __LINE__ 文件中的当前行号. __FILE__ 文件的完整路径和文件名. 如果用在被包含文件中,则返回被包含的文件名. __ ...

  9. 滴滴面试:谈谈你对Netty线程模型的理解?

    Netty 线程模型是指 Netty 框架为了提供高性能.高并发的网络通信,而设计的管理和利用线程的策略和机制. Netty 线程模型被称为 Reactor(响应式)模型/模式,它是基于 NIO 多路 ...

  10. 未来5年,只有这种产品团队才能开启上帝视角【玩转IPD】

    一家企业如何在波涛汹涌的市场浪潮中站稳脚跟?一个团队如何快速识别风险发现机遇,成为行业的标杆?市场瞬息万变,如何准确地响应市场动向,紧跟用户需求?这些问题,已成为企业发展乃至生存的重要保障.尽管市场和 ...