Sqoop数据迁移,导入数据至hdfs,hive,hbase,mysql

一、Sqoop概述

Sqoop是什么?

Sqoop是一个用于在Hadoop和关系数据库之间传输数据的工具。
将数据从RDBMS(Relational Database Management System)导入到HDFS、Hive、HBase
从HDFS导出数据到RDBMS
使用MapReduce导入和导出数据,提供并行操作和容错。
对于某些NoSQL数据库它也提供了连接器。Sqoop,类似于其他ETL工具,使用元数据模型来判断数据类型并在数据从数据源转移到Hadoop时,确保类型安全的数据处理。Sqoop专为大数据批量传输设计,能够分割数据集并创建Hadoop任务来处理每个区块。

二、Sqoop数据迁移

1.从RDB(Relational Database)导入数据到HDFS

准备工作:
素材下载:retail_db.sql脚本及customer.csv表数据
在这里插入图片描述

链接:https://pan.baidu.com/s/1GlFMDnN21kiIsKa1MyR5KQ
提取码:wmm1

  1. 首先将sql文件 retail_db.sql 上传至linux /opt/software/sqoop/ 目录下
    在这里插入图片描述

  2. mysql中建库建表:

//创建数据库
mysql> create database retail_db;
mysql> use retail_db;
//执行sql语句
mysql> source /opt/software/sqoop/retail_db.sql
mysql> show tables;

展示如下:
在这里插入图片描述

1.1全量导入数据(customers)

在linux命令行执行:

sqoop import \
--connect jdbc:mysql://localhost:3306/retail_db \
--driver com.mysql.jdbc.Driver \
--table customers \
--username root \
--password ok \
--target-dir /data/retail_db/customers \
-m 3

相关参数解析:\ 表示换行

sqoop import \
--connect jdbc:mysql://localhost:3306/retail_db \  #配置数据库连接为mysql数据库
--driver com.mysql.jdbc.Driver \     #加载jdbc驱动
--table customers \		#将customer表上传至hdfs中
--username root \		#mysql的用户名
--password ok \			#mysql用户名密码
--target-dir /data/retail_db/customers \       #指定hdfs上传的路径
-m 3      #设置Mapper的数量

注: -m 参数能够设置导入数据的 map 任务数量,m>1 表示导入方式为并发导入,这时我们必须同时指定 - -split-by (分割列 int)参数指定根据哪一列来实现哈希分片,从而将不同分片的数据分发到不同 map 任务上去跑,避免数据倾斜。

执行完成可以在hdfs web端50070端口 /data/retail_db/customers 路径下看到customers表信息,12435条数据被分成了3个分区存储
在这里插入图片描述

在linux上查看导入的customers表数据:

 hdfs dfs -cat /data/retail_db/customers/part-m-00000

如下:
在这里插入图片描述

1.2通过Where语句过滤导入表(orders)

where条件: order_id < 500

sqoop import \
 --connect jdbc:mysql://localhost:3306/retail_db \
 --driver com.mysql.jdbc.Driver \
 --table orders \
 --where "order_id < 500" \
 --username root \
 --password ok \
 --delete-target-dir \
 --target-dir /data/retail_db/orders \
 -m 3

注: 此处 delete-target-dir 表示删除hdfs目标路径的目录,因为之前1.1中已经创建过目标customers表文件,产生了数据,所以需先删除原先的目标路径文件,不然会起冲突报错

执行成功如图:
在这里插入图片描述

在linux上查看导入的orders表数据:

 hdfs dfs -cat /data/retail_db/orders/part-m-00002

如下:
在这里插入图片描述
可以看到order_id最大为499,满足where条件,导入执行成功

1.3通过COLUMNS过滤导入表(customers)

选择导入字段: customer_id,customer_fname,customer_lname

sqoop import \
 --connect jdbc
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值