一、ETL工具概述
ETL(Extract-Transform-Load)是数据仓库建设中的核心环节,负责从源系统提取数据,进行转换和清洗,最后加载到目标数据仓库中。选择合适的ETL工具并正确配置对于数据仓库的建设至关重要。
学习交流加群风哥微信: itpux-com,在FGedu企业的数据仓库项目中,我们使用了多种ETL工具,构建了完整的数据集成平台。
1.1 ETL工具对比
工具名称 类型 特点 适用场景
——– —- —- ——–
Kettle/Pentaho 开源 功能强大,易于使用 中小型项目
Informatica 商业 企业级,功能全面 大型企业
Talend 开源/商业 开源版本功能丰富 中大型项目
SSIS 商业 与SQL Server集成 Microsoft技术栈
DataStage 商业 IBM产品,企业级 大型企业
Apache NiFi 开源 基于流处理,实时ETL 实时数据处理
# 功能对比
功能特性 Kettle Informatica Talend SSIS DataStage
——– —— ———— —— —- ——–
数据连接 丰富 非常丰富 丰富 一般 丰富
转换功能 强大 强大 强大 强大 强大
调度管理 基础 完善 完善 完善 完善
监控能力 基础 强大 强大 一般 强大
性能 良好 优秀 良好 良好 优秀
易用性 良好 一般 良好 良好 一般
社区支持 活跃 有限 活跃 有限 有限
# FGedu ETL架构
架构拓扑:
源系统
(业务系统)
│
▼
ETL工具
(Kettle/Informatica)
│
▼
数据仓库
(数据集市/ODS)
│
▼
BI工具
(PowerBI/Tableau)
# 数据流程
1. 提取(Extract)
– 从源系统读取数据
– 支持增量和全量抽取
– 处理源数据格式
2. 转换(Transform)
– 数据清洗
– 数据转换
– 数据聚合
– 数据验证
3. 加载(Load)
– 数据加载到目标系统
– 支持批量加载
– 处理加载异常
4. 调度(Schedule)
– 作业调度
– 依赖管理
– 错误处理
– 监控告警
二、Kettle安装配置
2.1 Kettle安装部署
# 1. 系统要求
– JDK 8或更高版本
– 内存:至少4GB
– 磁盘:至少10GB
– 操作系统:Linux/Windows
# 2. 安装JDK
$ yum install -y java-1.8.0-openjdk-devel
$ java -version
openjdk version “1.8.0_342”
OpenJDK Runtime Environment (build 1.8.0_342-b07)
OpenJDK 64-Bit Server VM (build 25.342-b07, mixed mode)
# 3. 下载Kettle
$ wget https://github.com/pentaho/pentaho-kettle/releases/download/9.3.0.0-428/pdi-ce-9.3.0.0-428.zip
# 4. 解压安装
$ unzip pdi-ce-9.3.0.0-428.zip -d /opt
$ ln -s /opt/data-integration /opt/kettle
# 5. 配置环境变量
$ cat >> /etc/profile << EOF
export KETTLE_HOME=/opt/kettle
export PATH=PATH:KETTLE_HOME
EOF
$ source /etc/profile
# 6. 验证安装
$ cd /opt/kettle
$ ./kitchen.sh -version
2026/04/03 10:00:00 - Kitchen - Pentaho Data Integration
2026/04/03 10:00:00 - Kitchen - Version 9.3.0.0-428, build 9.3.0.0-428, timestamp: 2026-01-01 00:00:00
# 7. 启动Spoon(图形界面)
$ ./spoon.sh
# 8. 配置数据库连接
# 创建数据库连接配置文件
$ cat > /opt/kettle/.kettle/repositories.xml << EOF
FORCE_IDENTIFIERS_TO_LOWERCASE
SUPPRESS_EMPTY_STRINGS
ENABLE_QUOTED_IDENTIFIERS
EOF
# 9. 配置资源库数据库
$ mysql -u root -p
CREATE DATABASE kettle_repo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER ‘kettle’@’%’ IDENTIFIED BY ‘Fgedu@Kettle123’;
GRANT ALL PRIVILEGES ON kettle_repo.* TO ‘kettle’@’%’;
FLUSH PRIVILEGES;
# 10. 启动Carte(Web服务器)
$ ./carte.sh fgedudb 8080
# 访问Carte界面
# http://fgedudb:8080/kettle/
2.2 Kettle基本配置
# 1. 内存配置
$ cat /opt/kettle/spoon.sh
if [ -z “$PENTAHO_DI_JAVA_OPTIONS” ]; then
PENTAHO_DI_JAVA_OPTIONS=”-Xms2048m -Xmx4096m -XX:MaxPermSize=256m”
fi
# 2. 日志配置
$ cat /opt/kettle/.kettle/kettle.properties
KETTLE_HOME=/opt/kettle
KETTLE_LOG_LEVEL=Basic
KETTLE_MAX_LOG_SIZE=10000
# 3. 资源库配置
$ cat /opt/kettle/.kettle/repositories.xml
# 如前面所示
# 4. 环境变量配置
$ cat /opt/kettle/.kettle/kettle.properties
DB_HOST=192.168.1.20
DB_PORT=3306
DB_USER=etl_user
DB_PASS=Encrypted 2be98afc86aa7f2e4cb79ce73984345e
# 5. 插件管理
# 安装MySQL驱动
$ cp mysql-connector-java-8.0.28.jar /opt/kettle/lib/
# 安装PostgreSQL驱动
$ cp postgresql-42.3.3.jar /opt/kettle/lib/
# 6. 安全配置
# 加密密码
$ ./encr.sh -kettle “Fgedu@Password123”
Encrypted 2be98afc86aa7f2e4cb79ce73984345e
# 7. 性能优化
# 配置文件:/opt/kettle/.kettle/kettle.properties
KETTLE_INITIAL_POOL_SIZE=10
KETTLE_MAX_POOL_SIZE=50
KETTLE_POOL_TIMEOUT=30
KETTLE_POOL_VALIDATION_TIMEOUT=5
# 8. 集群配置
# 创建集群配置文件
$ cat > /opt/kettle/cluster.xml << EOF
EOF
# 启动从服务器
$ ./carte.sh 192.168.1.101 8081
$ ./carte.sh 192.168.1.102 8081
三、Kettle作业设计
3.1 数据抽取作业
# 1. 创建转换(Transformation)
# 步骤1:表输入
# 配置源数据库连接
– 连接:FGedu_DB
– SQL语句:
SELECT * FROM source_table WHERE last_updated > ?
– 替换变量:${last_updated}
# 步骤2:字段选择
# 选择需要的字段
– id, name, value, last_updated
# 步骤3:数据清洗
# 过滤空值
– 条件:name IS NOT NULL AND value IS NOT NULL
# 步骤4:表输出
# 配置目标数据库连接
– 连接:FGedu_DW
– 目标表:staging_table
– 提交记录数:1000
– 批量插入:是
# 2. 创建作业(Job)
# 步骤1:设置变量
– 变量名:last_updated
– 值:SELECT MAX(last_updated) FROM staging_table
# 步骤2:执行转换
– 转换文件:/opt/kettle/transformations/extract.ktr
# 步骤3:发送邮件
– 收件人:etl@fgedu.net.cn
– 主题:ETL作业完成通知
– 内容:数据抽取作业已完成,处理记录数:${Internal.Entry.Current.Processed}
# 3. 作业配置文件
$ cat /opt/kettle/jobs/extract_job.kjb
VARIABLE_NAME
VARIABLE_VALUE
FILENAME
TO
SUBJECT
MESSAGE
# 4. 执行作业
$ ./kitchen.sh -file=/opt/kettle/jobs/extract_job.kjb -level=Basic
# 5. 调度作业
# 使用crontab
$ crontab -l
0 2 * * * /opt/kettle/kitchen.sh -file=/opt/kettle/jobs/extract_job.kjb -level=Basic > /var/log/kettle/extract_job.log 2>&1
# 6. 监控作业
# 查看作业日志
$ tail -f /var/log/kettle/extract_job.log
2026/04/03 02:00:00 – Kitchen – Start of job execution
2026/04/03 02:00:01 – Extract Job – Start of job execution
2026/04/03 02:00:02 – Set Variables – Set variable last_updated to value 2026-04-02 23:59:59
2026/04/03 02:00:03 – Run Transformation – Starting transformation
2026/04/03 02:05:15 – Run Transformation – Transformation finished successfully
2026/04/03 02:05:16 – Send Email – Sending email to etl@fgedu.net.cn
2026/04/03 02:05:17 – Extract Job – Job finished successfully
四、Informatica配置
4.1 Informatica安装配置
# 1. 系统要求
– 操作系统:RHEL 7/8
– 内存:至少16GB
– CPU:至少8核
– 磁盘:至少100GB
– 数据库:Oracle/PostgreSQL
# 2. 安装准备
# 创建用户和组
$ groupadd infa
$ useradd -g infa infa
$ passwd infa
# 创建安装目录
$ mkdir -p /opt/informatica
$ chown -R infa:infa /opt/informatica
# 3. 安装Informatica
$ su – infa
$ cd /opt/informatica
$ unzip Informatica_10.4.0_Linux-x86-64.zip
$ ./install.sh
# 安装过程
Choose Install Type:
1. Install Informatica Services
2. Install Informatica Client Tools
3. Install Informatica Server Tools
Enter your choice: 1
Enter the installation directory: /opt/informatica
Enter the domain name: FGedu_Domain
Enter the node name: FGedu_Node
Enter the database type for domain configuration:
1. Oracle
2. PostgreSQL
3. SQL Server
Enter your choice: 2
Enter the database connection details:
Hostname: 192.168.1.20
Port: 5432
Database: infa_domain
Username: infa
Password: Fgedu@Infa123
# 4. 启动服务
$ cd /opt/informatica/10.4.0/server
$ ./infaservice.sh start
# 5. 访问管理控制台
# http://fgedudb:6005/adminconsole
# 6. 配置集成服务
# 登录管理控制台
– fgedu:admin
– 密码:Admin123
# 创建集成服务
1. 点击”Create PowerCenter Integration Service”
2. 名称:FGedu_Integration_Service
3. 节点:FGedu_Node
4. 数据库:infa_repo
5. fgedu:infa_repo
6. 密码:Fgedu@Repo123
# 7. 配置存储库服务
# 创建存储库服务
1. 点击”Create PowerCenter Repository Service”
2. 名称:FGedu_Repository_Service
3. 节点:FGedu_Node
4. 数据库:infa_repo
5. fgedu:infa_repo
6. 密码:Fgedu@Repo123
# 8. 配置连接
# 创建数据库连接
1. 登录PowerCenter Designer
2. 点击”Connections” -> “Relational”
3. 点击”New”
4. 名称:FGedu_Source
5. 类型:Oracle
6. fgedu:source_user
7. 密码:Fgedu@Source123
8. 连接字符串://192.168.1.10:1521/orcl
# 9. 配置映射
# 创建源定义
1. 点击”Sources” -> “Import from Database”
2. 选择连接:FGedu_Source
3. 选择表:SOURCE_TABLE
4. 点击”Import”
# 创建目标定义
1. 点击”Targets” -> “Import from Database”
2. 选择连接:FGedu_Target
3. 选择表:TARGET_TABLE
4. 点击”Import”
# 创建映射
1. 点击”Mappings” -> “Create”
2. 名称:FGedu_Mapping
3. 拖放源和目标到映射画布
4. 添加转换:Sorter、Aggregator、Expression
5. 连接转换和目标
# 10. 配置工作流
# 创建会话
1. 点击”Tasks” -> “Create”
2. 类型:Session
3. 名称:FGedu_Session
4. 映射:FGedu_Mapping
# 创建工作流
1. 点击”Workflows” -> “Create”
2. 名称:FGedu_Workflow
3. 拖放会话到工作流画布
4. 配置工作流属性
# 11. 执行工作流
1. 右键点击工作流:FGedu_Workflow
2. 选择”Start Workflow”
3. 查看执行结果
五、Talend配置
5.1 Talend安装配置
# 1. 系统要求
– JDK 8或更高版本
– 内存:至少4GB
– 磁盘:至少10GB
– 操作系统:Linux/Windows
# 2. 下载Talend
$ wget https://www.talend.com/download/talend-open-studio-for-data-integration/
# 3. 安装Talend
$ unzip Talend-Open-Studio-20211207_1352-V8.0.1.zip -d /opt
$ ln -s /opt/TOS_DI-20211207_1352-V8.0.1 /opt/talend
# 4. 启动Talend
$ cd /opt/talend
$ ./TOS_DI-linux-gtk-x86_64
# 5. 配置项目
# 创建项目
1. 点击”Create Project”
2. 名称:FGedu_Project
3. 点击”Create”
# 6. 配置连接
# 创建数据库连接
1. 点击”Metadata” -> “Db Connections”
2. 右键点击”Db Connections” -> “Create Connection”
3. 名称:FGedu_Source
4. 类型:MySQL
5. 主机:192.168.1.10
6. 端口:3306
7. 数据库:source_db
8. fgedu:source_user
9. 密码:Fgedu@Source123
10. 点击”Test Connection”
11. 点击”Save”
# 7. 创建作业
# 创建作业
1. 点击”Job Designs” -> “Create Job”
2. 名称:extract_data
3. 点击”Create”
# 配置作业
1. 从Palette拖放”tMysqlInput”到画布
2. 配置tMysqlInput:
– 数据库连接:FGedu_Source
– SQL查询:SELECT * FROM source_table
3. 拖放”tMap”到画布
4. 连接tMysqlInput到tMap
5. 配置tMap:
– 映射字段
– 添加转换规则
6. 拖放”tMysqlOutput”到画布
7. 连接tMap到tMysqlOutput
8. 配置tMysqlOutput:
– 数据库连接:FGedu_Target
– 表:target_table
– 操作:Insert
# 8. 执行作业
1. 点击”Run” -> “Run”
2. 查看执行日志
# 9. 调度作业
# 导出作业
1. 右键点击作业:extract_data
2. 选择”Export Job”
3. 选择”OS Command”
4. 点击”Next”
5. 选择导出目录:/opt/talend/jobs
6. 点击”Finish”
# 执行导出的作业
$ cd /opt/talend/jobs/extract_data
$ ./extract_data_run.sh
# 配置crontab
$ crontab -l
0 2 * * * /opt/talend/jobs/extract_data/extract_data_run.sh > /var/log/talend/extract_data.log 2>&1
# 10. 监控作业
# 查看作业日志
$ tail -f /var/log/talend/extract_data.log
2026-04-03 02:00:00,000 INFO [main] – Starting job extract_data
2026-04-03 02:00:01,000 INFO [main] – Connecting to database: FGedu_Source
2026-04-03 02:00:02,000 INFO [main] – Executing query: SELECT * FROM source_table
2026-04-03 02:05:30,000 INFO [main] – Processing 100000 records
2026-04-03 02:05:31,000 INFO [main] – Writing to database: FGedu_Target
2026-04-03 02:10:45,000 INFO [main] – Job extract_data finished successfully
六、ETL最佳实践
6.1 ETL设计最佳实践
# 1. 数据抽取最佳实践
– 使用增量抽取,减少数据量
– 建立合适的增量标识(如时间戳、自增ID)
– 对大表使用分区抽取
– 合理设置抽取批次大小
– 监控抽取性能,及时调优
# 2. 数据转换最佳实践
– 建立数据质量规则
– 处理空值和异常值
– 使用缓存提高性能
– 合理使用并行处理
– 记录转换日志
# 3. 数据加载最佳实践
– 使用批量加载提高性能
– 合理设置提交频率
– 使用事务确保数据一致性
– 实现数据加载监控
– 建立加载失败回滚机制
# 4. 作业调度最佳实践
– 建立作业依赖关系
– 设置合理的调度时间
– 实现作业重试机制
– 建立作业监控告警
– 定期清理作业日志
# 5. 性能优化
# 数据库优化
– 为源表和目标表建立适当的索引
– 使用分区表提高查询性能
– 优化SQL语句
– 合理设置数据库参数
# ETL工具优化
– 增加内存配置
– 使用并行处理
– 合理设置缓冲区大小
– 优化转换步骤
# 系统优化
– 增加网络带宽
– 使用SSD存储
– 优化服务器配置
– 合理分配系统资源
# 6. 监控与告警
# 建立监控体系
– 作业执行状态监控
– 数据质量监控
– 系统资源监控
– 性能监控
# 告警机制
– 邮件告警
– SMS告警
– 监控系统集成
– 告警级别设置
# 7. 错误处理
# 错误分类
– 数据错误:数据格式错误、数据一致性错误
– 系统错误:网络错误、数据库错误、磁盘空间不足
– 逻辑错误:业务规则错误、转换逻辑错误
# 错误处理策略
– 错误记录:记录错误数据和错误原因
– 错误重试:对可恢复错误进行重试
– 错误通知:及时通知相关人员
– 错误分析:定期分析错误原因,优化ETL流程
# 8. 文档管理
# 建立ETL文档
– 数据字典:源数据和目标数据的定义
– 转换规则:数据转换的详细规则
– 作业说明:作业的功能和依赖关系
– 调度计划:作业的执行计划
# 版本控制
– 使用版本控制系统管理ETL代码
– 记录代码变更历史
– 建立代码发布流程
– 定期备份ETL代码
# 9. 测试策略
# 测试类型
– 单元测试:测试单个转换步骤
– 集成测试:测试整个ETL流程
– 性能测试:测试ETL性能
– 数据质量测试:测试数据质量
# 测试环境
– 开发环境:开发和调试
– 测试环境:功能测试
– 预生产环境:性能测试
– 生产环境:实际运行
# 10. 运维管理
# 日常运维
– 监控作业执行状态
– 处理作业失败
– 优化作业性能
– 维护ETL系统
# 定期维护
– 清理历史数据
– 更新ETL工具版本
– 优化ETL流程
– 培训新运维人员
# 应急处理
– 建立应急预案
– 定期演练应急流程
– 快速响应故障
– 确保业务连续性
总结
ETL工具是数据仓库建设的核心组件,掌握Kettle、Informatica、Talend等ETL工具的使用和配置对于数据集成工作至关重要。本教程详细介绍了ETL工具概述、Kettle安装配置、Kettle作业设计、Informatica配置、Talend配置和ETL最佳实践。
更多学习教程www.fgedu.net.cn,在实际工作中,建议根据项目需求选择合适的ETL工具,并遵循最佳实践进行设计和实施。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
