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. golang 中 strings 包的 Replace 用法介绍笔记

    函数申明: func Replace(s, old, new string, n int) string 官方描述为: 返回将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替换 ...

  2. C语言:对fgets进行封装

    因为fgets在赋值完字符后,在最后会加一个\n换行符,所以为了能够把数组当成字符串,就必须把\n改成\0 代码: #include<stdio.h> #include<stdlib ...

  3. saltstack web 平台开发

    运维平台参考: https://wrapbootstrap.com/

  4. yum install --downloadonly

    yum install --downloadonly --downloaddir=[directory] [package] https://www.cnblogs.com/wangbaobao/p/ ...

  5. Azure Service Principals ----- Azure 上最好保守的秘密的服务

    一,引言 Azure Service Principals 是 Azure Active Directory (AAD) 中的一种标识,代表应用程序,服务,自动化流程.Service Principa ...

  6. centos7系统的七个运行级别和设置默认运行级别

    一.系统七个运行级别概述 0 系统停机模式,系统默认运行级别不能设置为0,否则不能正常启动,机器关的 1 单用户模式,root权限,用于系统维护,禁止远程登陆,就像Windows下的安全模式登录 2 ...

  7. springcloud整合stream解决项目升级的多个消息中间件的收发问题

    cloud stream (一)简介Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架.它可以基于 Spring Boot 来创建独立的.可用于生产的 Spring ...

  8. .Net6 MiNiApi +EFCore6.0高B格操作的WebApi

    编辑器的选择项目运行雏形EFCore6.0的使用实体创建![在这里插入图片描述](https://img-blog.csdnimg.cn/abe224cea341434c9299e9643dbcd9e ...

  9. 鸿蒙HarmonyOS实战-Web组件(基本使用和属性)

    前言 Web是一种基于互联网的技术和资源的网络服务系统.它是指由许多互连的计算机组成的全球性计算机网络,使用户能够通过浏览器访问和交互式使用各种信息和资源,如网页.文档.图片.视频.音频等.通过Web ...

  10. java中以字符分隔的字符串与字符串数组的相互转换

    1.字符串数组拼接成一个以指定字符(包括空字符)分隔的字符串--String.join(),JDK8的新特性 String[] strArray = {"aaa","bb ...