章节内容
上节我们完成了:
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,生成一些数据出来:
-- 用于在 Mysql 中生成测试数据 CREATE DATABASE sqoop; use sqoop; CREATE TABLE sqoop.goodtbl( gname varchar(50), serialNumber int, price int, stock_number int, create_time date );
移除函数
防止遇到干扰,先移除之前可能存在的函数:
DROP FUNCTION IF EXISTS `rand_string`; DROP PROCEDURE IF EXISTS `batchInsertTestData`; • 1 • 2
编写脚本
-- 替换语句默认的执行符号,将;替换成 // 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 全量导入
运行脚本
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 集群中查看数据,发现数据已经导入了: