(二)Sqoop使用教程

摘要:
1、 Sqoop简介Sqoop是一个开源工具,主要用于在Hadoop和传统数据库之间传输数据。它可以将数据从关系数据库导入Hadoop的HDFS,或将HDFS数据导入关系数据库。2、 Sqoop原理将导入或导出命令转换为mapuce程序以实现。在翻译的mapreduce中,输入平台和输出平台主要是定制的。4、 Sqoop4.1导入数据的简单用例在Sqoop中,“导入”是指将数据从非大数据集群传输到大数据集群。它被称为“importing”,即使用import关键字。

一.Sqoop简介

Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

二.Sqoop原理

将导入或导出命令翻译成mapduce程序来实现。在翻译出的mapreduce中主要是对inputformat和outputformat进行定制。

三.下载安装

参照此https://www.cnblogs.com/Agent9527/p/13195068.html进行安装。

四.Sqoop简单使用案例

4.1导入数据

在Sqoop中“导入”是指从非大数据集群(RDBMS)向大数据集群(HDFSHiveHBase)中传输数据,叫做:导入,即使用import关键字。与其相反称之为导出,即使用关键字“export”。

4.2从RDBMS到HDFS

确定Mysql服务开启正常;在Mysql数据库中新建一张表并插入数据。

Mysql建库建create database company;
create table company.staff(
id int(4) primary key not null auto_increment,
name varchar(255),
sex varchar(255));
插入测试数据
insert into company.staff(name,sex) values("Thcmas","Male");
insert into company.staff(name,sex) values(‘Catalina’,’ReMale’);

Mysql --> HDFS  注意:粘贴以下时把“#号”前面的空格以及“#号”后面的内容删掉。

1.全部导入
sqoop import   # 启动sqoop命令 导入 换行符
--connect jdbc:mysql://主机名:3306/库  # 连接(固定)
--username root  # 连接mysql的账号名
--password 密码  # 连接mysql的账号密码
--table 表  # 即将导入的表名
--target-dir /路径名/路径名  # 导入的路径(没有HFDS会创建)
--delete-target-dir  # 删除原先已有的表
--num-mappers 1  # map工作数(自己确定就行了)
--fields-terminated-by "	" # 指定分隔符不指定会粘到一块

2.查询select导入
sqoop import   # 启动sqoop导入 换行符
--connect jdbc:mysql://主机名:3306/库  # 连接(固定)
--username root  # 连接mysql的账号名
--password 密码  # 连接mysql的账号密码
--target-dir /路径名/路径名  # 导入的路径(没有HFDS会创建?)
--delete-target-dir  # 删除原先已有的表
--num-mappers 1  # map工作数(自己确定就行了)
--fields-terminated-by "	" # 指定分隔符
--query " 列1,列2,列3 from 表 where 列1 <=1 and $CONDITIONS;" # 保证在多个map任务时保证数据顺序前后一致

3.指定columns导入
sqoop import   # 启动sqoop导入 换行符
--connect jdbc:mysql://主机名:3306/库  # 连接(固定)
--username root  # 连接mysql的账号名
--password 密码  # 连接mysql的账号密码
--table 表  # 即将导入HDFS的表名
--columns 列1,列2  # 指定列名导出
--target-dir /路径名/路径名  # 导入的路径(没有HFDS会创建?)
--delete-target-dir  # 删除原先已有的表
--num-mappers 1  # map工作数(自己确定就行了)
--fields-terminated-by "	" # 指定分隔符

4.关键字where+columns筛选导入
sqoop import   # 启动sqoop导入 换行符
--connect jdbc:mysql://主机名:3306/库  # 连接(固定)
--username root  # 连接mysql的账号名
--password 密码  # 连接mysql的账号密码
--table 表  # 即将导入HDFS的表名
--columns 列1,列2  # 指定列名导入
--where 列1条件  # 指定列条件进行导入
--target-dir /路径名/路径名  # 导入的路径(没有HFDS会创建?)
--delete-target-dir  # 删除原先HDFS已有的表
--fields-terminated-by "	" # 指定分隔符
--num-mappers 1  # map工作数(自己确定就行了)

Mysql --> HDFS --> Hive

sqoop import   # 启动sqoop导入 换行符
--connect jdbc:mysql://主机名:3306/库  # 连接(固定)
--username root  # 连接mysql的账号名
--password 密码  # 连接mysql的账号密码
--table 表  # 即将导入HDFS的表名
--columns 列1,列2  # 指定列名导入
--where 列1条件  # 指定列条件进行导入
--hive-import  # 又从HDFS导入hive
--hive-database 库 # 导入的指定库名 
--hive-table 表  # 将要导入的hive表
--hive-overwrite  # 覆盖原先hive已有的表
--fields-terminated-by "	" # 指定分隔
--num-mappers 1  # map工作数(自己确定就行了)这放后面好看点 

RDBMS --> HDFS --> HBase

sqoop import   # 启动sqoop导入 换行符
--connect jdbc:mysql://主机名:3306/库  # 连接(固定)
--username root  # 连接mysql的账号名
--password 密码  # 连接mysql的账号密码
--table 表  # 即将导入HDFS的表名
--columns 列1,列2  # 指定列名导入
--where 列1条件  # 指定列条件进行导入
--hbase-create-table  # 是否创建表?
--hbase-table "表名"  # 指定要导入的HBase中的表名
--column-family "hbase列族"  # 指定要导入的HBase表的列族
--hbase-row-key "mysql列"  # 指定mysql中的某一列作为HBase表中的rowkey
--split-by id  # 指定mysql中的某一列作为分区导入。默认是主键
--num-mappers 1  # map工作数(自己确定就行了) 

4.3(从HDFS/Hive导出到RDBMS) HDFS与Hive语法一样

sqoop export   # 启动sqoop导出 换行符
--connect jdbc:mysql://主机名:3306/库  # 连接(固定)导出到mysql的库名
--username root  # 连接mysql的账号名
--password 密码  # 连接mysql的账号密码
--table 表  # 导出到mysql的表名
--export-dir /路径名/路径名/路径名  # 从hdfs&hive导出的hive/hdfs文件路径
--input-fields-terminated-by "	"  # 从hdfs&hive导出的指定切割符
--num-mappers 1  # map工作数

五. Shell拓展

可利用shell编写脚本实现;减少麻烦

# vim test.sh  Linux下编译名为test.sh的shell脚本。扩展名并不影响脚本执行,见名知意就好。添加以下内如。
#!/bin/bash  #告诉系统这个脚本需要什么解释器来执行
sqoop import   # 启动sqoop命令 导入 换行符
--connect jdbc:mysql://主机名:3306/库  # 连接(固定)
--username root  # 连接mysql的账号名
--password 密码  # 连接mysql的账号密码
--table 表  # 即将导入的表名
--target-dir /路径名/路径名  # 导入的路径(没有HFDS会创建)
--delete-target-dir  # 删除原先已有的表
--num-mappers 1  # map工作数(自己确定就行了)
--fields-terminated-by "	" # 指定分隔符不指定会粘到一块
:wq  保存退出
chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

免责声明:文章转载自《(二)Sqoop使用教程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android开发 -- Bootloader[2020牛客暑期多校训练营(第一场)虚树 Infinite Tree]下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

HDFS之五:Hadoop 拒绝远程 9000 端口访问

最近学习Hadoop 时发现在本机访问 hadoop 9000 端口没有问题,但是远程机器访问 9000端口时不能访问,通过telnet 命令诊断发现发现无法访问端口,经过网上搜索解决方案结合自己实践,总结解决办法一般有以下几点。 首先,利用netstat -tpnl查看的端口开放情况 下图中9000端口只能本机访问 下图中的9000端口可以通过192....

一、Hbase的安装

一、Hbase配置 这个是我从网上找的一个版本,网上说配置成功。 先决条件: (1)hadoop的版本与hbase的版本要对应,主要是hadoop目录下的hadoop-core-1.0.4.jar的版本与hbase的lib目录下的hadoop-core-1.0.4.jar一致。 做法:将hadoop中lib下的hadoop-core-1.0.2.jar...

大数据实时计算引擎 Flink

数据来源:系统中可以采集到的数据,如用户数据、业务数据等,也包含系统运行时产生的日志数据等。 数据采集:不同数据源生成数据类型格式存在差异,在数据采集前可能增加数据总线(如京东JBus)对业务进行解耦,Sqoop和Flume是常用的数据采集工具。 Sqoop:用于和关系型数据库进行交互,使用SQL语句在Hadoop和关系型数据库间传送数据,Sqoop...

HDP 3.1.0 集成 Sqoop2

HDP 3.1.0 集成 Sqoop2 本文原始地址:https://sitoi.cn/posts/65261.html 环境 由三台主机组成的 HDP 3.1.0 集群 配置好时间同步 步骤 下载 Sqoop2 的安装包 解压安装包到 /usr/lib 目录下 修改 sqoop.sh 环境变量 修改 sqoop.properties 配置 导入第三...

sqoop迁移

3.1 概述 sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。 导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统; 导出数据:从Hadoop的文件系统中导出数据到关系数据库 3.2 工作机制 将导入或导出命令翻译成mapreduce程序来实现 在翻译出的mapre...

大数据(2)---HDFS集群搭建

一、准备工作   1.准备几台机器,我这里使用VMware准备了四台机器,一个name node,三个data node。   VMware安装虚拟机:https://www.cnblogs.com/nijunyang/p/12001312.html   2.Hadoop生态几乎都是用的java开发的,因此四台机器还需要安装JDK。   3.集群内主机域名...