StreamPark 构建指南(mac 版)

484 阅读4分钟

StreamPark 项目构建指南

一、环境准备

1.1 环境要求

  • JDK: 1.8+
  • Maven: 3.6+
  • Node.js: 14+

1.2 环境验证命令

# 验证 Java 版本
java -version

# 验证 Maven 版本
mvn -version

# 验证 Node.js 版本
node -v

二、获取源码

cd ~/IdeaProjects
git clone https://github.com/apache/incubator-streampark.git
cd incubator-streampark

三、构建过程

3.1 初始构建尝试

mvn clean install -DskipTests

3.2 遇到的问题

  1. Maven 依赖下载速度慢
    • 原因:默认使用 Maven 中央仓库,国外源访问速度慢
    • 解决方案:配置国内镜像源
    • 实施步骤:
      1. 备份原有配置:mv ~/.m2/settings.xml ~/.m2/settings.xml.bak
      2. 创建新的 Maven 配置文件

3.3 Maven 配置优化

~/.m2/settings.xml 中配置多个国内镜像源:

<mirrors>
    <!-- 阿里云仓库 -->
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云公共仓库</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    
    <!-- 华为云仓库 -->
    <mirror>
        <id>huaweicloud</id>
        <mirrorOf>*</mirrorOf>
        <url>https://mirrors.huaweicloud.com/repository/maven/</url>
    </mirror>
    
    <!-- 腾讯云仓库 -->
    <mirror>
        <id>nexus-tencentyun</id>
        <mirrorOf>*</mirrorOf>
        <name>Nexus tencentyun</name>
        <url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
    </mirror>
</mirrors>

3.4 优化后的构建命令

mvn clean install -DskipTests

四、构建加速技巧

  1. 跳过测试(-DskipTests)

    • 原因:测试执行需要额外时间,开发阶段可以跳过
    • 注意:正式环境部署前应执行完整测试
  2. 配置多个镜像源

    • 原因:单一镜像源可能存在不稳定或速度慢的情况
    • 好处:Maven 会自动选择响应最快的镜像源
  3. 使用 Maven 并行构建(可选)

    mvn clean install -DskipTests -T 1C
    
    • -T 1C 表示每个 CPU 核心运行一个线程
    • 适用于多模块项目的并行构建

五、项目结构说明

StreamPark 项目主要包含以下模块:

  • streampark-console:Web 控制台
  • streampark-flink:Flink 相关组件
  • streampark-spark:Spark 相关组件
  • streampark-common:公共工具类
  • streampark-shaded:项目依赖管理

六、部署运行

6.1 构建发行版

mvn clean package -Pscala-2.12,webapp,dist -DskipTests

命令解释:

  • mvn clean:清理之前的构建产物
  • package:打包但不安装到本地仓库
  • -P:指定构建 profile
    • scala-2.12:使用 Scala 2.12 版本
    • webapp:构建 Web 控制台
    • dist:生成发行版压缩包
  • -DskipTests:跳过测试以加快构建

构建过程分析:

  1. 首先清理旧的构建文件
  2. 编译并打包 Java/Scala 代码
  3. 构建前端 Web 控制台
  4. 最后打包成发行版压缩包

6.2 解压发行版

cd streampark-console/streampark-console-service/target
tar -zxf apache-streampark_2.12-2.1.2-incubating-bin.tar.gz
cd apache-streampark_2.12-2.1.2-incubating-bin

命令解释:

  • cd target:进入构建产物目录
  • tar -zxf:解压 gzip 压缩的 tar 包
    • -z:通过 gzip 过滤
    • -x:解压
    • -f:指定文件

6.3 修改配置

  1. 编辑 conf/application.yml,修改工作空间目录:
workspace:
  local: ~/streampark_workspace
  remote: ~/streampark_workspace

配置说明:

  • local:本地工作空间,用于存储项目文件
  • remote:远程工作空间,这里为了简化也使用本地路径
  1. 创建工作空间目录:
mkdir -p ~/streampark_workspace

命令解释:

  • mkdir:创建目录
  • -p:如果父目录不存在则创建

6.4 启动服务

./bin/startup.sh

启动过程分析:

  1. 脚本首先检查环境变量(JAVA_HOME 等)
  2. 设置必要的 Java 运行参数
  3. 加载配置文件
  4. 启动 Spring Boot 应用
  5. 将进程 ID 写入 PID 文件

6.5 访问控制台

验证步骤:

  1. 确认服务启动成功:检查日志文件 logs/streampark.out
  2. 验证端口可访问:curl -I http://localhost:10000
  3. 使用浏览器访问并登录

6.6 停止服务

./bin/streampark.sh stop

停止过程分析:

  1. 读取 PID 文件获取进程 ID
  2. 发送停止信号给进程
  3. 等待进程完全退出
  4. 清理 PID 文件

七、问题排查思路

7.1 构建问题排查

  1. 依赖下载失败

    • 检查 Maven 配置:cat ~/.m2/settings.xml
    • 验证网络连接:ping maven.aliyun.com
    • 查看详细日志:mvn -X clean package
    • 手动下载依赖:访问 Maven 仓库网站
  2. 编译错误

    • 检查 Java 版本:java -version
    • 查看编译日志:找到具体报错位置
    • 清理缓存:mvn clean
    • 更新 IDE 索引(如果使用 IDE)

7.2 运行问题排查

  1. 服务启动失败

    • 检查端口占用:lsof -i :10000
    • 查看启动日志:tail -f logs/streampark.out
    • 验证配置文件:
      cat conf/application.yml
      ls -l ~/streampark_workspace
      
    • 检查 Java 进程:jps -ml
  2. 无法访问控制台

    • 检查服务状态:./bin/streampark.sh status
    • 测试端口连通性:telnet localhost 10000
    • 查看系统日志:
      tail -f logs/streampark.out
      tail -f logs/error.log
      
  3. 数据库连接问题

    • 验证 H2 数据库文件权限
    • 检查数据库配置项
    • 查看数据库连接日志

7.3 调试技巧

  1. 开启调试模式

    ./bin/streampark.sh debug
    
  2. 查看完整日志

    tail -f logs/streampark.out | grep -i error
    tail -f logs/streampark.out | grep -i warn
    
  3. 检查系统资源

    # 查看内存使用
    free -h
    # 查看磁盘空间
    df -h
    # 查看 CPU 使用
    top -n 1
    
  4. JVM 问题排查

    • 使用 jstat 查看 GC 状态
    • 使用 jmap 导出堆内存
    • 使用 jstack 查看线程状态

这些排查步骤和命令可以帮助你快速定位和解决问题。记住要先收集足够的信息,再进行有针对性的排查。

八、参考资料