|
| 1 | +# CLAUDE.md |
| 2 | + |
| 3 | +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. |
| 4 | + |
| 5 | +## 项目概述 |
| 6 | + |
| 7 | +这是TIS的官方插件仓库,一个基于Maven的多模块Java项目。项目包含多种数据同步插件,支持DataX、Flink CDC、Hudi、StarRocks等多种数据处理引擎。 |
| 8 | + |
| 9 | +## 常用构建命令 |
| 10 | + |
| 11 | +### 基础构建命令 |
| 12 | +- 完整构建:`mvn clean install` |
| 13 | +- 跳过测试构建:`mvn clean install -Dmaven.test.skip=true` |
| 14 | +- 部署:`mvn deploy` |
| 15 | + |
| 16 | +### 特定插件构建 |
| 17 | +项目提供了多个专用构建脚本: |
| 18 | + |
| 19 | +- **Hudi相关插件**:使用 `pkg.sh` 脚本 |
| 20 | + ```bash |
| 21 | + # 构建Hudi相关插件(包含MySQL CDC和Hudi sink) |
| 22 | + mvn install -Dmaven.test.skip=true -pl tis-datax/tis-datax-local-executor,tis-datax/tis-hive-flat-table-builder-plugin,tis-datax/tis-ds-mysql-v5-plugin,tis-datax/tis-datax-hudi-plugin,tis-incr/tis-flink-cdc-mysql-plugin,tis-incr/tis-sink-hudi-plugin -am -Dappname=all |
| 23 | + ``` |
| 24 | + |
| 25 | +- **部分模块构建**:使用 `build_partial.sh` |
| 26 | + ```bash |
| 27 | + mvn install -Dappname=all -pl tis-incr/tis-flink-chunjun-oracle-plugin,tis-incr/tis-flink-chunjun-mysql-plugin,tis-datax/tis-ds-mysql-v5-plugin -am |
| 28 | + ``` |
| 29 | + |
| 30 | +### Maven Profiles |
| 31 | +项目支持多个环境profile: |
| 32 | +- `default-emr`:默认EMR环境 (Spark 2.4.4, Hadoop 2.7) |
| 33 | +- `aliyun-emr`:阿里云EMR环境 (Spark 3.2.1, Hadoop 3.2) |
| 34 | +- `cdh`:Cloudera CDH环境 (Spark 3.2.1, Hadoop 3.0.0-cdh6.3.2) |
| 35 | + |
| 36 | +使用profile构建:`mvn clean install -P aliyun-emr` |
| 37 | + |
| 38 | +### 测试相关 |
| 39 | +- 运行单个测试:`mvn test -Dtest=ClassName` |
| 40 | +- 跳过测试:`mvn install -Dmaven.test.skip=true` |
| 41 | +- 项目使用JUnit 4.13进行单元测试,使用Testcontainers进行集成测试 |
| 42 | + |
| 43 | +## 项目架构 |
| 44 | + |
| 45 | +### 核心模块结构 |
| 46 | +- **tis-datax/**:DataX相关插件,包含各种数据源和数据目标的连接器 |
| 47 | + - MySQL、Oracle、PostgreSQL、StarRocks、Doris、Hudi等数据库插件 |
| 48 | + - 本地执行器和远程执行器 |
| 49 | +- **tis-incr/**:增量同步相关插件,主要基于Flink CDC |
| 50 | +- **tis-k8s-plugin/**:Kubernetes集成插件 |
| 51 | +- **tis-plugin-test/**:测试容器和测试工具 |
| 52 | +- **tis-e2e/**:端到端测试套件 |
| 53 | + |
| 54 | +### 插件系统 |
| 55 | +项目使用自定义的TPI(TIS Plugin Interface)插件系统: |
| 56 | +- 插件打包格式:`.tpi` 文件 |
| 57 | +- 插件基类:继承自TIS Plugin框架 |
| 58 | +- 插件配置:使用Maven TPI Plugin (`maven-tpi-plugin`) |
| 59 | + |
| 60 | +### 依赖管理 |
| 61 | +- 项目版本:4.3.0 |
| 62 | +- Java版本:1.8 |
| 63 | +- 主要外部依赖: |
| 64 | + - Hadoop 2.7.3/3.2.1(根据profile) |
| 65 | + - Hive 2.3.1/3.1.3 |
| 66 | + - Hudi 0.14.1 |
| 67 | + - Flink CDC 3.4.0 |
| 68 | + - PowerJob 4.3.6 |
| 69 | + - Testcontainers 1.18.3 |
| 70 | + |
| 71 | +## 开发指南 |
| 72 | + |
| 73 | +### 添加新插件模块 |
| 74 | +1. 在相应目录下创建新的Maven模块 |
| 75 | +2. 更新父pom.xml中的`<modules>`部分 |
| 76 | +3. 插件需要继承TIS插件框架的基类 |
| 77 | +4. 使用`maven-tpi-plugin`进行插件打包 |
| 78 | + |
| 79 | +### 测试策略 |
| 80 | +- 单元测试:使用JUnit和Mockito |
| 81 | +- 集成测试:使用Testcontainers启动真实数据库容器 |
| 82 | +- 端到端测试:在tis-e2e模块中进行 |
| 83 | + |
| 84 | +### 插件开发注意事项 |
| 85 | +- 插件依赖需要在父pom中的`dependencyManagement`中声明 |
| 86 | +- 避免在插件中包含TIS核心依赖(使用provided scope) |
| 87 | +- 注意classpath依赖排除配置:`maven-tpi-plugin.classpathDependentExcludes` |
| 88 | + |
| 89 | +## 部署和发布 |
| 90 | + |
| 91 | +### TPI文件部署 |
| 92 | +- 使用 `tisasm-maven-plugin` 进行插件打包和部署 |
| 93 | +- 插件文件扩展名:`.tpi` |
| 94 | +- 部署子目录:`tis-plugin` |
| 95 | + |
| 96 | +### 同步工具 |
| 97 | +- `syn-tpi.sh`:同步TPI文件的脚本 |
| 98 | +- `copy-2-remote-node.sh`:将插件复制到远程节点 |
| 99 | + |
| 100 | +## 环境兼容性 |
| 101 | + |
| 102 | +项目需要支持多种大数据环境: |
| 103 | +- **标准环境**:Spark 2.4.4 + Hadoop 2.7.3 |
| 104 | +- **阿里云EMR**:Spark 3.2.1 + Hadoop 3.2 |
| 105 | +- **Cloudera CDH**:Spark 3.2.1 + CDH 6.3.2 |
| 106 | + |
| 107 | +在开发时需要考虑不同版本的兼容性问题,特别是Hadoop和Spark的API差异。 |
0 commit comments