基于Hadoop3.3.4+Flink1.17.0+FlinkCDC3.0.0+Iceberg1.5.0整合,实现数仓实时同步mysql数据

一、安装部署Hadoop 3.3.4

1. 基础环境准备(两台都做)

1. 服务器假设

主机名 IP地址 角色
master 192.168.1.10 NameNode, ResourceManager
slave 192.168.1.11 DataNode, NodeManager

2. 前置依赖安装(两台机器都执行)

① 安装 JDK(建议 JDK 8)
复制代码
yum install -y java-1.8.0-openjdk-devel

验证:

复制代码
java -version

② 配置主机名和 hosts(两台都做)
复制代码
# 修改主机名(分别执行)
hostnamectl set-hostname master   # 在 master 执行
hostnamectl set-hostname slave    # 在 slave 执行

# 编辑 hosts 文件(两台都加)
vim /etc/hosts

添加如下内容:

复制代码
192.168.1.10 master
192.168.1.11 slave

③ 配置 SSH 免密(只在 master 上操作)
复制代码
ssh-keygen -t rsa
ssh-copy-id master
ssh-copy-id slave

验证:

复制代码
ssh master
ssh slave

3. 下载并解压 Hadoop

在两台机器都执行:

复制代码
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
tar -zxvf hadoop-3.3.4.tar.gz -C /opt/
ln -s /opt/hadoop-3.3.4 /opt/hadoop

4. 配置环境变量(两台都配置)

复制代码
vim /etc/profile

添加:

复制代码
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

# 启动权限设置
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export HDFS_DATANODE_SECURE_USER=hdfs
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

执行使其生效:

复制代码
source /etc/profile

2. Hadoop 配置(在 Master 上操作,配置完成后拷贝到 Slave)

假设 Hadoop 安装目录是 /opt/hadoop,配置文件在 $HADOOP_HOME/etc/hadoop/ 下。


1. core-site.xml

复制代码
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
</configuration>

2. hdfs-site.xml

复制代码
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value> <!-- 两台机器,只设一个副本 -->
    </property>

    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/opt/hadoop/tmp/dfs/name</value>
    </property>

    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/opt/hadoop/tmp/dfs/data</value>
    </property>
</configuration>

3. mapred-site.xml

复制模板:

复制代码
cp mapred-site.xml.template mapred-site.xml

内容如下:

复制代码
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

4. yarn-site.xml

复制代码
<configuration>
    <!-- ResourceManager 设置 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>

    <!-- NodeManager 使用 shuffle 服务 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

5. 修改workers

编辑 $HADOOP_HOME/etc/hadoop/workers

复制代码
vim workers

内容:

复制代码
master
slave

3. 将 Hadoop 分发到 Slave

在 Master 上执行:

复制代码
scp -r /opt/hadoop-3.3.4 slave:/opt/
scp -r /opt/hadoop slave:/opt/
scp /etc/profile slave:/etc/profile

然后在 slave 上:

复制代码
source /etc/profile

4. 格式化 HDFS(仅第一次在 Master 上做)

复制代码
hdfs namenode -format

5. 启动 Hadoop 集群(在 master 上)

1. 启动 HDFS

复制代码
start-dfs.sh

后台会启动:

  • master:NameNode + DataNode

  • slave:DataNode

验证:

复制代码
jps
  • master:NameNode, DataNode

  • slave:DataNode

浏览器访问:http://master:9870


2. 启动 YARN

复制代码
start-yarn.sh

后台会启动:

  • master:ResourceManager

  • slave:NodeManager

验证:

复制代码
jps
  • master:ResourceManager

  • slave:NodeManager

浏览器访问:http://master:8088


6. 验证集群是否成功运行

1. 查看 Web UI


2. 测试上传文件

复制代码
hdfs dfs -mkdir /test
echo "hello hadoop" > hello.txt
hdfs dfs -put hello.txt /test
hdfs dfs -ls /test

7. 总结启动/停止命令

功能 命令
启动 HDFS start-dfs.sh
停止 HDFS stop-dfs.sh
启动 YARN start-yarn.sh
停止 YARN stop-yarn.sh

8. 注意事项

  1. NameNode 格式化只能执行一次,重复会导致元数据丢失。

  2. 所有路径(如 dfs.name.dir)需确保存在或能自动创建,权限正确。

  3. 如果端口冲突(9000、9870、8088),可以在配置中修改。

  4. 所有节点时间应同步(可配置 NTP)。

1. 组件依赖关系简图

复制代码
Flink 1.17.0
├── 集成 Flink CDC 3.0.0(从 MySQL/Postgres 等采集变更数据)
└── 集成 Iceberg 1.5.0(用于将结果写入 HDFS 格式的表)
       └── 基于 Hadoop Catalog(不使用 Hive)

2. 已具备条件

软件/组件 状态
Hadoop 3.3.4 ✔ 已部署(HDFS + YARN)
Java 8 ✔ 已安装
SSH 免密登录 ✔ 已配置
Master:192.168.1.10,Slave:192.168.1.11

复制代码
wget https://archive.apache.org/dist/flink/flink-1.17.0/flink-1.17.0-bin-scala_2.12.tgz
tar -zxvf flink-1.17.0-bin-scala_2.12.tgz -C /opt/
ln -s /opt/flink-1.17.0 /opt/flink

2. 配置环境变量(两台)

复制代码
vim /etc/profile

添加:

复制代码
export FLINK_HOME=/opt/flink
export PATH=$PATH:$FLINK_HOME/bin
export HADOOP_CLASSPATH=`hadoop classpath`

source /etc/profile

3. 配置 Flink(仅在 master 上配置好后分发)

编辑 $FLINK_HOME/conf/flink-conf.yaml

复制代码
jobmanager.rpc.address: master

taskmanager.numberOfTaskSlots: 2

# 添加Hadoop类路径
env.hadoop.conf.dir: /path/to/hadoop/etc/hadoop

4. 设置 masters 和 workers

编辑 $FLINK_HOME/conf/masters:

复制代码
master:8081

编辑 $FLINK_HOME/conf/workers

复制代码
master
slave

复制代码
scp -r /opt/flink-1.17.0 slave:/opt/
scp -r /opt/flink slave:/opt/
scp /etc/profile slave:/etc/profile
ssh slave 'source /etc/profile'

Flink CDC 3.0.0 为 Table Store 模式 ,支持动态表更新流,可连接 MySQL、PostgreSQL、Oracle 等。需下载相关jar包,以下是 ​​Flink CDC 3.0.0​ ​ 与 ​​Flink JDBC Connector 3.1.0-1.17​​ 的官方下载地址及关键信息整理。

3. 关键注意事项​

  1. ​版本兼容性​
    • ​Flink CDC 3.0.0​ :需搭配 ​Flink 1.14+​​JDK 8+​,支持 MySQL 5.6/5.7/8.0。
    • ​JDBC Connector 3.1.0-1.17​ :专为 ​Flink 1.17.x​ 设计,需配合 ​MySQL JDBC 驱动 8.0.28​(推荐)。
  2. ​部署方式​
    • 将下载的 JAR 包放入 Flink 的 lib/ 目录。
    • ​重启 Flink 集群​ 生效(执行 stop-cluster.shstart-cluster.sh)。
  3. ​MySQL 驱动依赖​ (JDBC Sink 必需):

4. 依赖关系总结​

​组件​ ​版本​ ​下载地址​
Flink SQL MySQL CDC 3.0.0 Maven
Flink JDBC Connector 3.1.0-1.17 Maven
MySQL JDBC Driver 8.0.28 Maven

按需下载后放置于 $FLINK_HOME/lib/ 即可。

5. 集成 Iceberg 1.5.0

复制代码
mkdir -p /opt/flink/lib/iceberg

cd /opt/flink/lib/iceberg

wget https://repo1.maven.org/maven2/org/apache/iceberg/iceberg-flink-runtime-1.17/1.5.0/iceberg-flink-runtime-1.17-1.5.0.jar

❗注意:该包自动包含 Flink Table 所需依赖,无需手动导入其他 flink-table jars。


2. 配置 Hadoop Catalog 模式(推荐方式)

确保 Hadoop 集群运行,然后 Flink 连接 Iceberg 时使用如下 SQL:

复制代码
CREATE CATALOG hadoop_catalog WITH (
  'type' = 'iceberg',
  'catalog-type' = 'hadoop',
  'warehouse' = 'hdfs://master:9000/iceberg/warehouse',
  'property-version' = '1'
);

在 Master 上执行:

复制代码
start-cluster.sh

默认会启动:

  • master:JobManager

  • slave:TaskManager

  • master:也作为一个 TaskManager(可选)

验证:

复制代码
jps
  • master:JobManager(StandaloneSessionClusterEntrypoint) + TaskManager

  • slave:TaskManager

Web UI 访问:http://master:8081


7. 验证 CDC + Iceberg 流任务

以下为示例 SQL 流任务(使用 sql-client):

1. 启动 SQL CLI

复制代码
./bin/sql-client.sh embedded

2. 注册 catalog & 数据表

复制代码
-- 注册 Iceberg catalog
CREATE CATALOG hadoop_catalog WITH (
  'type' = 'iceberg',
  'catalog-type' = 'hadoop',
  'warehouse' = 'hdfs://master:9000/iceberg/warehouse',
  'property-version' = '1'
);

USE CATALOG hadoop_catalog;
CREATE DATABASE demo;

USE demo;

-- 创建 CDC 源表(MySQL)
CREATE TABLE mysql_users (
  id INT,
  name STRING,
  age INT,
  update_time TIMESTAMP(3),
  PRIMARY KEY (id) NOT ENFORCED
) WITH (
  'connector' = 'mysql-cdc',
  'hostname' = '192.168.1.100',
  'port' = '3306',
  'username' = 'root',
  'password' = '123456',
  'database-name' = 'test',
  'table-name' = 'users'
);

-- 创建 Iceberg 目标表
CREATE TABLE iceberg_users (
  id INT,
  name STRING,
  age INT,
  update_time TIMESTAMP(3),
  PRIMARY KEY (id) NOT ENFORCED
);

-- 写入任务
INSERT INTO iceberg_users SELECT * FROM mysql_users;

8. 常用维护命令

操作 命令
启动 Flink start-cluster.sh
停止 Flink stop-cluster.sh
查看 Web UI http://master:8081
提交任务 flink run xxx.jar 或 SQL CLI
查看日志 $FLINK_HOME/log

9. 目录结构推荐

复制代码
/opt/
├── hadoop/
├── flink/
│   ├── lib/
│   │   ├── cdc/
│   │   └── iceberg/
└── iceberg/
    └── warehouse/ (HDFS 路径)
相关推荐
java叶新东老师6 小时前
git 提交时排除一个或多个文件
大数据·git·elasticsearch
阿里云大数据AI技术7 小时前
Hologres V3.1版本发布,Serverless型实例从零开始构建OLAP系统
大数据·人工智能·机器学习
秋难降8 小时前
一篇文章带你了解Pandassssssssssssssss
大数据·python·pandas
数据皮皮侠9 小时前
中国汽车能源消耗量(2010-2024年)
大数据·数据库·人工智能·物联网·金融·汽车·能源
TDengine (老段)9 小时前
TDengine 转化函数 TO_TIMESTAMP 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
cici1587410 小时前
Docker搭建Hadoop集群
hadoop·docker·eureka
时序数据说10 小时前
时序数据库IoTDB的优势场景分析
大数据·数据库·物联网·时序数据库·iotdb
Leo.yuan11 小时前
数据处理工具是做什么的?常见数据处理方法介绍
大数据·数据库·人工智能·python·信息可视化
阿里云大数据AI技术11 小时前
[VLDB 2025]面向云计算平台的多模态慢查询根因排序
大数据·数据库·人工智能