刘俊凯 发表于 2024-7-15 05:33:49

Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL天生数据 HDFS集群 Sqoop impor

章节内容

上节我们完成了:


[*]Sqoop 先容
[*]Sqoop 下载配置环境等
[*]Sqoop 环境依靠:Hadoop、Hive、JDBC 等环境补全
配景先容

这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。
之前已经在 VM 假造机上搭建过一次,但是没留下条记,这次趁着前几天薅羊毛的3台机器,赶紧实验在公网上搭建体验一下。


[*]2C4G 编号 h121
[*]2C4G 编号 h122
[*]2C2G 编号 h123
https://i-blog.csdnimg.cn/direct/0402d7dbb41f4d4888ef8787f4fd1c22.png
注意事项

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
);

https://i-blog.csdnimg.cn/direct/33c0b6827fa34ae399de0a9d93809f00.png
移除函数

防止遇到干扰,先移除之前大概存在的函数:
DROP FUNCTION IF EXISTS `rand_string`;
DROP PROCEDURE IF EXISTS `batchInsertTestData`;
https://i-blog.csdnimg.cn/direct/8b18bcfde6bd4585b3a84bca9ef2cea7.png
编写脚本


-- 替换语句默认的执行符号,将;替换成 //
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);
执行脚本

运行脚本后:
https://i-blog.csdnimg.cn/direct/07433eee4051432a90efa921bebf34ec.png
检察数据

使用 SQL 检察,或者可视化检察,如下图:
https://i-blog.csdnimg.cn/direct/40bdada1d92240fdbe0e462f0bacb5e4.png
依靠服务

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


[*]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中数据的分隔符
分配任务

观察任务的分配过程
https://i-blog.csdnimg.cn/direct/20814c82491f4467be548fa8c6818d25.png
等待执行

可以观察到 Map -> Reduce 的过程
https://i-blog.csdnimg.cn/direct/422f72dd450c41b9baf700b60586253b.png
需要等待好一段时间,执行完成后结果如下图:
https://i-blog.csdnimg.cn/direct/f3e138ec2f1b4468ae7f2f0c4a138f37.png
检察结果

到 HDFS 集群中检察数据,发现数据已经导入了:
https://i-blog.csdnimg.cn/direct/d755501545ac486c8189cfd22c65c97d.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL天生数据 HDFS集群 Sqoop impor