Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce

章节内容

上节我们完成了:

  • Sqoop 介绍
  • Sqoop 下载配置环境等
  • Sqoop 环境依赖:Hadoop、Hive、JDBC 等环境补全

背景介绍

这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。

之前已经在 VM 虚拟机上搭建过一次,但是没留下笔记,这次趁着前几天薅羊毛的3台机器,赶紧尝试在公网上搭建体验一下。

  • 2C4G 编号 h121
  • 2C4G 编号 h122
  • 2C2G 编号 h123

注意事项

Apache Sqoop 于 2021 年 6 月迁入 Attic。

Apache Sqoop 的使命是创建和维护与 Apache Hadoop 和结构化数据存储相关的大规模数据传输软件。

虽然项目已经可能过时,但是如果你的时间充裕的话,可以适当地学习一下,可能会对你有一定的帮助的!!!

生成数据

创建新库

连接我们的MySQL数据库,执行如下的SQL,生成一些数据出来:

sql 复制代码
-- 用于在 Mysql 中生成测试数据
CREATE DATABASE sqoop;
use sqoop;
CREATE TABLE sqoop.goodtbl(
  gname varchar(50),
  serialNumber int,
  price int,
  stock_number int,
  create_time date
);

移除函数

防止遇到干扰,先移除之前可能存在的函数:

sql 复制代码
DROP FUNCTION IF EXISTS `rand_string`;
DROP PROCEDURE IF EXISTS `batchInsertTestData`;

编写脚本

sql 复制代码
-- 替换语句默认的执行符号,将;替换成 //
DELIMITER //
CREATE FUNCTION `rand_string` (n INT) RETURNS VARCHAR(255)
CHARSET 'utf8'
BEGIN
  DECLARE char_str varchar(200) DEFAULT
  '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  DECLARE return_str varchar(255) DEFAULT '';
  DECLARE i INT DEFAULT 0;
  WHILE i < n DO
    SET return_str = concat(return_str,
    substring(char_str, FLOOR(1 + RAND()*36), 1));
    SET i = i+1;
  END WHILE;
  RETURN return_str;
END
//
CREATE PROCEDURE `batchInsertTestData` (m INT, n INT)
BEGIN
DECLARE i INT DEFAULT 0;
  WHILE i < n DO
    insert into goodtbl (gname, serialNumber, price,
    stock_number, create_time)
    values (rand_string(6), i+m, ROUND(RAND()*100),
    FLOOR(RAND()*100), now());
    SET i = i+1;
  END WHILE;
END
//
delimiter ;
call batchInsertTestData(1, 100);

执行脚本

运行脚本后:

查看数据

使用 SQL 查看,或者可视化查看,如下图:

依赖服务

请确保以下的服务都是正常运行的:

  • HDFS
  • YARN
  • MySQL

MySQL->HDFS 全量导入

运行脚本

shell 复制代码
sqoop import \
--connect jdbc:mysql://h122.wzk.icu:3306/sqoop \
--username hive \
--password hive@wzk.icu \
--table goodtbl \
--target-dir /root \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t"

参数解释

上述参数的解释:

  • target-dir 将数据导入HDFS的路径
  • delete-target-dir 如果目标文件夹在HDFS上已经存在,那么再次运行就会报错。
  • num-mappers 启动多少个MapTask,默认启动4个
  • fields-terminated-by HDFS中数据的分隔符

分配任务

观察任务的分配过程

等待执行

可以观察到 Map -> Reduce 的过程

需要等待好一段时间,执行完成后效果如下图:

查看结果

到 HDFS 集群中查看数据,发现数据已经导入了:

相关推荐
琅琊榜首20201 分钟前
AI+编程实操:小说高效改编短剧的全流程指南
大数据·人工智能
014-code31 分钟前
Redis 分布式锁:从 0 到 1 完整演变
数据库·redis·分布式
jiaozi_zzq38 分钟前
2026年大数据与财务管理专业就业岗位全解析与进阶指南
大数据·数据分析·证书·财务
海南java第二人38 分钟前
Flink运行时组件深度解析:Java工程师的架构设计与实战指南
java·大数据·flink
WJX_KOI41 分钟前
保姆级教程:Apache Flink CDC(standalone 模式)部署 MySQL CDC、PostgreSQL CDC 及使用方法
java·大数据·mysql·postgresql·flink
AI实战架构笔记43 分钟前
大数据预测分析在房地产行业的市场动态监测
大数据·ai
树码小子1 小时前
Mybatis(17)Mybatis-Plus条件构造器(2)& 自定义 SQL
数据库·sql·mybatis-plus
实时数据1 小时前
DPI深度数据包检测 监测用户浏览搜索行为 分析在线活动 频繁访问的购物网站或搜索的关键词 等判断其消费偏好
大数据·安全·big data
白太岁1 小时前
Redis:(5) 分布式锁实现:原子性设置锁与 Lua 释放锁
数据库·redis·分布式
IT枫斗者1 小时前
MyBatis批量插入性能优化:从5分钟到3秒的工程化实践
前端·vue.js·mysql·mongodb·性能优化·mybatis