Sqoop 从入门到精通

news/2024/12/1 5:04:01/

Sqoop

Sqoop 架构解析

概述

Sqoop是Hadoop和关系数据库服务器之间传送数据的一种工具。它是用来从关系数据库如:MySQL,Oracle到Hadoop的HDFS,并从Hadoop的文件系统导出数据到关系数据库。
传统的应用管理系统,也就是与关系型数据库的使用RDBMS应用程序的交互,是产生大数据的来源之一。这样大的数据,由关系数据库生成的,存储在关系数据库结构关系数据库服务器。
当大数据存储器和分析器,如MapReduce, Hive, HBase, Cassandra, Pig等,Hadoop的生态系统等应运而生图片,它们需要一个工具来用的导入和导出的大数据驻留在其中的关系型数据库服务器进行交互。在这里,Sqoop占据着Hadoop生态系统提供关系数据库服务器和Hadoop HDFS之间的可行的互动。
Sqoop:“SQL 到 Hadoop 和 Hadoop 到SQL”
Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
下图描述了Sqoop的工作流程。

sqoop工作流程

Sqoop导入
导入工具从RDBMS到HDFS导入单个表。表中的每一行被视为HDFS的记录。所有记录被存储在文本文件的文本数据或者在Avro和序列文件的二进制数据。
Sqoop导出
导出工具从HDFS导出一组文件到一个RDBMS。作为输入到Sqoop文件包含记录,这被称为在表中的行。那些被读取并解析成一组记录和分隔使用用户指定的分隔符。

sqoop1与sqoop2对比

两代之间是两个完全不同的版本,不兼容
sqoop1:1.4.x
sqoop2:1.99.x
sqoop2比sqoop1的改进
(1) 引入sqoop server,集中化管理connector等
(2) 多种访问方式:CLI,Web UI,REST API
(3) 引入基于角色 的安全机制

sqoop2与sqoop1区别对比

Sqoop1

sqoop1架构

Sqoop2

sqoop2架构

Sqoop1简单教程

wget http://archive.apache.org/dist/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop-1
vim /etc/profile
export HCAT_HOME=/opt/soft/hive3/hcatalog
export SQOOP_HOME=/opt/soft/sqoop-1export PATH=$PATH:$HCAT_HOME/bin:$SQOOP_HOME/bin
cd sqoop-1/conf/
cp sqoop-env-template.sh sqoop-env.sh
vim sqoop-env.sh
export HADOOP_COMMON_HOME=/opt/soft/hadoop3
export HADOOP_MAPRED_HOME=/opt/soft/hadoop3
export HIVE_HOME=/opt/soft/hive3
export ZOOKEEPER_HOME=/opt/soft/zookeeper
export ZOOCFGDIR=/opt/soft/zookeeper/conf
# 上传
commons-lang-2.6.jar
hive-common-3.1.3.jar
mysql-connector-j-8.0.33.jar 
protobuf-java-3.22.2.jar
# 到lib目录

使用Sqoop简单教程如下:

# 使用help 指令: sqoop help
# 查看指定MySQL8数据库涉及的库
sqoop list-databases --username root --password 'Lihaozhe!!@@1122' --connect jdbc:mysql://spark03:3306?characterEncoding=UTF-8
# 查看指定MySQL8数据库涉及的表
sqoop list-tables --username root --password 'Lihaozhe!!@@1122' --connect jdbc:mysql://spark03:3306/hive?characterEncoding=UTF-8
# MySQL 8 指定数据库中的表导入Hive中
sqoop import --connect jdbc:mysql://spark03:3306/quiz?characterEncoding=UTF-8 \
--username root --password 'Lihaozhe!!@@1122' --table region \
-m 1 \
--hive-import --create-hive-table --hive-table region# MySQL 8 指定数据库中的表导入Hive指定数据库中
sqoop import --connect jdbc:mysql://spark03:3306/quiz?characterEncoding=UTF-8 \
--username root --password 'Lihaozhe!!@@1122' --table region \
-m 1 \
--hive-import --create-hive-table --hive-table lihaozhe.region# MySQL 8 指定数据库中的表导入Hive指定数据库中
sqoop import --connect jdbc:mysql://spark03:3306/quiz?characterEncoding=UTF-8 \
--username root --password 'Lihaozhe!!@@1122' --table region \
-m 1 \
--hive-database lihaozhe \
--hive-import --create-hive-table --hive-table region \
--fields-terminated-by ','# Hive 指定数据库中的表导出 MySQL 8指定数据库中
sqoop export \
-Dsqoop.export.records.per.statement=10 \
-Dmapreduce.job.max.split.locations=2000 \
--connect jdbc:mysql:///quiz?characterEncoding=UTF-8 \
--username root \
--password 'Lihaozhe!!@@1122' \
--table person \
--columns id_card,real_name,mobile \
--update-mode allowinsert \
--batch \
--hcatalog-database lihaozhe \
--hcatalog-table partition_2 \
--hcatalog-partition-keys province_code \
--hcatalog-partition-values 22 \
--m 1 sqoop export \
-Dsqoop.export.records.per.statement=10 \
--connect jdbc:mysql:///quiz?characterEncoding=UTF-8 \
--username root \
--password 'Lihaozhe!!@@1122' \
--table category \
--update-mode allowinsert \
--batch \
--hcatalog-database lihaozhe \
--hcatalog-table category \
--m 1 
导入:sqoop import  --connect jdbc:mysql://ip:3306/databasename  #指定JDBC的URL 其中database指的是(Mysql或者Oracle)中的数据库名--table  tablename  #要读取数据库database中的表名           --username root      #用户名 --password  123456  #密码    --target-dir   /path  #指的是HDFS中导入表的存放目录(注意:是目录)--fields-terminated-by '\t'   #设定导入数据后每个字段的分隔符,默认;分隔--lines-terminated-by '\n'    #设定导入数据后每行的分隔符--m 1  #并发的map数量1,如果不设置默认启动4个map task执行数据导入,则需要指定一个列来作为划分map task任务的依据-- where ’查询条件‘   #导入查询出来的内容,表的子集--incremental  append  #增量导入--check-column:column_id   #指定增量导入时的参考列--last-value:num   #上一次导入column_id的最后一个值--null-string ‘’   #导入的字段为空时,用指定的字符进行替换以上导入到hdfs中--hive-import    #导入到hive--hive-overwrite   #可以多次写入--hive-database  databasename   #创建数据库,如果数据库不存在的必须写,默认存放在default中--create-hive-table   #sqoop默认自动创建hive表--delete-target-dir  #删除中间结果数据目录--hive-table tablename   #创建表名4. 导入所有的表放到hdfs中:sqoop import-all-tables  --connect jdbc:mysql://ip:3306/库名 --username 用户名  --password  密码  --target-dir 导入存放的目录5. 导出(目标表必须在mysql数据库中已经建好,数据存放在hdfs中):sqoop export--connect jdbs:mysql://ip:3600/库名 #指定JDBC的URL 其中database指的是(Mysql或者Oracle)中的数据库名--username用户名  #数据库的用户名--password密码     #数据库的密码--table表名        #需要导入到数据库中的表名--export-dir导入数据的名称    #hdfs上的数据文件--fields-terminated-by ‘\t’       #HDFS中被导出的文件字段之间的分隔符--lines-terminated-by '\n'    #设定导入数据后每行的分隔符--m 1  #并发的map数量1,如果不设置默认启动4个map task执行数据导入,则需要指定一个列来作为划分map task任务的依据--incremental  append  #增量导入--check-column:column_id   #指定增量导入时的参考列--last-value:num   #上一次导入column_id的最后一个值--null-string ‘’   #导出的字段为空时,用指定的字符进行替换6. 创建和维护sqoop作业:sqoop作业创建并保存导入和导出命令。A.创建作业:sqoop job --create作业名 -- import --connect jdbc:mysql://ip:3306/数据库 --username 用户名 --table 表名 --password 密码 --m 1 --target-dir  存放目录注意加粗的地方是有空格的B. 验证作业(显示已经保存的作业):sqoop job  --listC. 显示作业详细信息:sqoop  job --show作业名称D.删除作业:sqoop  job  --delete作业名E. 执行作业:sqoop  job --exec作业7. eval:它允许用户针对各自的数据库服务器执行用户定义的查询,并在控制台中预览结果,可以使用期望导入结果数据。A.选择查询:sqoop eval -connect jdbc:mysql://ip:3306/数据库 --username 用户名  --password 密码 --query ”select * from emp limit 1
  • FLume
  • Gobblin
  • DataX
sqoop import \
--connect jdbc:mysql:///quiz?characterEncoding=UTF-8 \
--username root \
--password 'Lihaozhe!!@@1122' \
--table region \
--delete-target-dir \
--input-fields-terminated-by ',' \
--input-lines-terminated-by '\n' \
--m 1 \
--target-dir /sqoopresult

将hive计算结果保存到hdfs上

insert overwrite directory '/root/sort-result' row format delimited fields terminated by ','lines terminated by '\n'stored as textfileselect t2.category_id,t2.sku_id from (select sku.category_id,t1.sku_id,rank() over (partition by sku.category_id order by t1.total_sku_num desc ) rankingfrom(select sku_id,sum(sku_num) as total_sku_num from order_detail group by sku_id) t1left join sku on t1.sku_id = sku.sku_id) t2 where t2.ranking < 4;
insert overwrite directory '/root/sort-result' row format delimited fields terminated by ','lines terminated by '\n'stored as textfileselect id_card,real_name,mobile from partition_2;

将hdfs数据导出到MySQL数据表中

sqoop export \
--connect jdbc:mysql:///quiz?characterEncoding=UTF-8 \
--username root \
--password 'Lihaozhe!!@@1122' \
--table result \
--m 1 \
--export-dir /root/sort-result/
sqoop export \
--connect jdbc:mysql:///quiz?characterEncoding=UTF-8 \
--username root \
--password 'Lihaozhe!!@@1122' \
--table person \
--m 1 \
--export-dir /root/sort-result

http://www.ppmy.cn/news/52284.html

相关文章

干货 | 被抑郁情绪所困扰?来了解CBT吧!

Hello&#xff0c;大家好&#xff01; 这里是 壹脑云科研圈 &#xff0c;我是 喵君姐姐~ 我们的情绪就像是一组正弦波&#xff0c;有情绪很高涨的时刻&#xff0c;也会有情绪低落的瞬间&#xff0c;也会有情绪平稳的时候。 这种情绪上的变化非常正常&#xff0c;也正是因为这…

【音视频第20天】wireshark+tcpdump

tcpdump抓 wireshark分析 目录 tcpdumpwireshark tcpdump tcpdump参数详解 网上一搜一大堆。最全的不是用tcpdump -h而是man tcpdump来查询手册。 tcpdump -i eth0 -p udp -xx -Xs 0 -w /root/test2.cap -i 针对eth0网卡的&#xff0c;ifconfig是查看有几个网卡 -i eth0 表示…

UE5实现建筑剖切效果

文章目录 1.实现目标2.实现过程2.1 材质参数集2.2 材质遮罩函数2.3 更新Box3.参考资料1.实现目标 基于BoxMask材质节点,在UE5中实现建筑物的剖切效果,GIF动图如下: 2.实现过程 实现原理与之前“BoxMask实现建筑生长效果”的原理相同,都是基于BoxMask材质节点实现。 具体实…

第13届蓝桥杯国赛真题剖析-2022年5月29日Scratch编程初中级组

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第127讲。 第13届蓝桥杯Scratch国赛真题&#xff0c;这是2022年5月29日举办的全国总决赛&#xff0c;比赛仍然采取线上…

计算机视觉 | 八斗人工智能 (中)

目录 卷积&滤波1.一个没有任何效果的卷积核2.平均均值滤波3.图像锐化4.soble边缘检测 卷积的三种填充模式1.padding --> same模式 最常用的模式2.full和valid模式三通道卷积 canny边缘检测算法&#xff08;效果最好&#xff09;Sobel算子、Prewitt算子 相机模型畸变矫正…

app拉新充场代理

我认为您可能是想了解APP充值拉新软件的功能吧。通常&#xff0c;APP充值拉新软件会具有以下功能&#xff1a; 充值服务&#xff1a;提供多种支付方式&#xff0c;让用户方便快捷地进行充值操作。 活动推广&#xff1a;通过不同的方式&#xff0c;如折扣、优惠码等&…

使用@Bean注解指定初始化和销毁的方法

bean的生命周期 通常意义上讲的bean的生命周期&#xff0c;指的是bean从创建到初始化&#xff0c;经过一系列的流程&#xff0c;最终销毁的过程。只不过&#xff0c;在Spring中&#xff0c;bean的生命周期是由Spring容器来管理的。在Spring中&#xff0c;我们可以自己来指定be…

【香橙派+DHT11】香橙派(全志H616)+ DHT11温湿度传感器的驱动教程

目录 一、前言产品概述特点数据传送逻辑DHT11通信时序 二、代码GPIO初始化起始信号读取数据整体代码执行结果 一、前言 最近写DHT11的代码到香橙派&#xff08;全志H616&#xff09;上&#xff0c;发现网上案例基本上都是树莓派DHT11的居多&#xff0c;香橙派的少&#xff0c;…