zoukankan      html  css  js  c++  java
  • 在 M1 下搭建 DolphinScheduler 开发调试环境

    Apache DolphinScheduler 是一个分布式去中心化,易扩展的可视化 DAG 工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用

    M1 因为架构的原因,目前还存在比较多的问题,但是开发者都在积极适配。目前全网还没有搜索到任何在 M1 下搭建 DolphinScheduler 开发调试环境的资料,所以就有了这篇博客,希望能给大家提供思路,这篇博客之前是发布在我的 CSDN

    环境情况

    • macOS Big Sur 11.3
    • OpenJDK 64-Bit Server VM (Zulu 8.52.0.23-CA-macos-aarch64)
    • IntelliJ IDEA Version: 2021.1
    • Docker version 20.10.6
    • Node v14.17.0

    M1 部署时遇到的问题

    1. 数据库及其驱动

    使用 Docker 安装 mysql-server,简化安装流程,需要配套使用 8.0 的驱动连接

    2. Zookeeper

    使用 Docker 部署,简化安装流程

    3. Node

    推荐使用 Node v14.17.0

    v16.2.0 安装依赖时会提示:“node-sass: Command failed ” 的错误

    按照官网指导,使用下面的命令单独安装 node-sass 依赖还是会有问题

    npm install node-sass --unsafe-perm # 单独安装node-sass依赖
    

    4. ARM 架构导致的问题

    启动 MasterServer 和 WorkerServer 后会提示错误:

    2021-06-04 10:03:13.410 ERROR 2097 --- [tBeatExecutor_1] o.a.d.server.registry.HeartBeatTask      : error write heartbeat info
    
    java.lang.NoClassDefFoundError: Could not initialize class oshi.jna.platform.mac.SystemB$XswUsage
        at oshi.hardware.platform.mac.MacGlobalMemory.<init>(MacGlobalMemory.java:46) ~[oshi-core-3.9.1.jar:3.9.1]
        at oshi.hardware.platform.mac.MacHardwareAbstractionLayer.getMemory(MacHardwareAbstractionLayer.java:65) ~[oshi-core-3.9.1.jar:3.9.1]
        at org.apache.dolphinscheduler.common.utils.OSUtils.availablePhysicalMemorySize(OSUtils.java:100) ~[classes/:na]
        at org.apache.dolphinscheduler.server.registry.HeartBeatTask.run(HeartBeatTask.java:93) ~[classes/:na]
    

    原因就是 DolphinScheduler 使用了 OSHI,OSHI 是一个基于 JNA 的获取操作系统和硬件信息的 Java 库,而 JNA 是从 5.7.0 开始支持 AArch64

    所以 DolphinScheduler 目前依赖的 OSHI 版本还不支持 M1 硬件,相关的 Issue:

    Apple M1 hardware incompatibility for JNA Native class #1462

    解决方法就是 将 OSHI 依赖换成 5.7.4,并指定 JNA 版本为 5.8.0

    <properties>
        <oshi.core.version>5.7.4</oshi.core.version>
        <jna.version>5.8.0</jna.version>
        <!-- 省略其他 properties -->
    </properties>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>${jna.version}</version>
        </dependency>
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna-platform</artifactId>
            <version>${jna.version}</version>
        </dependency>
        <!-- 省略其他 dependency -->
    
        </dependencies>
    </dependencyManagement>
    

    新版的 OSHI 对比旧版本,API 有变动,所以需要修改 OSUtils 和 OshiTest,这里给出我的代码,仅供参考,同时需要注意时效性

    feat: add Apple M1 support

    M1 部署 DolphinScheduler 完整流程

    参考官方的 环境搭建文档操作,简化了部分步骤

    1. 克隆仓库

    git clone https://github.com/apache/dolphinscheduler.git
    

    2. 切换到 dev 分支

    git checkout dev #切换到dev分支
    git pull #同步分支
    

    3. 安装 Node

    安装 Node v14.17.0

    4. 安装 Zookeeper

    使用 Docker 简单部署一下

    docker run -d --name zookeeper -p 2181:2181 zookeeper
    

    5. 安装数据库

    使用 Docker 安装 mysql-server

    # 启动 MySQL 容器,设置默认密码为:1234
    docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 -d mysql/mysql-server
    
    这时使用宿主机连接没有授权访问,需要进入mysql修改mysql访问权限
    # 进入容器
    docker exec -it mysql bash
    
    # 登录 MySQL
    mysql -u root -p
    # 输入 MySQL 密码
    
    # 授权
    CREATE USER 'root'@'%' IDENTIFIED BY 'root';
    GRANT ALL ON *.* TO 'root'@'%';
    # 刷新权限
    flush privileges;
    
    # 更改默认的身份认证插件,“1234” 为默认密码
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1234';
    # 刷新权限
    flush privileges;
    

    创建 DolphinScheduler 数据库

    CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
    

    6. 前端依赖

    # 进入项目 UI 目录
    cd dolphinscheduler-ui
    
    # 下载依赖
    npm install
    

    7. 搭建后端

    1. 将项目导入IDEA,更新相关的依赖

    2. dolphinscheduler-dao 的 resource 目录下 datasource.properties 数据库相关的配置

      注释掉 PostgreSQL 相关的配置,并根据实际配置修改 MySQL 相关配置

      # datasource configuration
      # spring.datasource.driver-class-name=org.postgresql.Driver
      # spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/dolphinscheduler
      # spring.datasource.username=root
      # spring.datasource.password=root
      
      # mysql
      spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
      spring.datasource.url=jdbc:mysql://127.0.0.1:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&useSSL=false
      spring.datasource.username=root
      spring.datasource.password=1234
      
    3. 修改根 pom.xml

      修改 MySQL Connector 版本号,并修改 OSHI 版本号

      <properties>
          <mysql.connector.version>8.0.11</mysql.connector.version>
          <oshi.core.version>5.7.4</oshi.core.version>
          <!-- 省略其他 properties -->
      </properties>
      

      添加 JNA 依赖,并将 mysql-connector-java 依赖的 scope 修改为 compile

      <dependencyManagement>
          <dependencies>
              <dependency>
                  <groupId>net.java.dev.jna</groupId>
                  <artifactId>jna</artifactId>
                  <version>${jna.version}</version>
              </dependency>
              <dependency>
                  <groupId>net.java.dev.jna</groupId>
                  <artifactId>jna-platform</artifactId>
                  <version>${jna.version}</version>
              </dependency>
      
              <dependency>
                  <groupId>mysql</groupId>
                  <artifactId>mysql-connector-java</artifactId>
                  <version>${mysql.connector.version}</version>
                  <scope>compile</scope>
              </dependency>
      
              <!-- 省略其他 dependency -->
      
          </dependencies>
      </dependencyManagement>
      
      

      刷新 Maven 依赖

      运行 org.apache.dolphinscheduler.dao.upgrade.shell.CreateDolphinScheduler 的 main 方法,自动插入项目所需的表和数据

    8. 修改

    由于使用了新版的 OSHI,所以需要修改 OSUtils 和 OshiTest:

    feat: add Apple M1 support

    9. 启动项目

    1. 保证依赖的 MySQL、Zookeeper 处于启动状态
    2. 依此配置 VM Options 并启动:MasterServer、WorkerServer、ApiApplicationServer,其他模块这里暂不启动
    // MasterServer main 位置:org.apache.dolphinscheduler.server.master.MasterServer
    // MasterServer VM Options
    -Dlogging.config=classpath:logback-master.xml -Ddruid.mysql.usePingMethod=false
    
    // WorkerServer main 位置:org.apache.dolphinscheduler.server.worker.WorkerServer
    // WorkerServer VM Options
    -Dlogging.config=classpath:logback-worker.xml -Ddruid.mysql.usePingMethod=false
    
    // ApiApplicationServer main 位置:org.apache.dolphinscheduler.api.ApiApplicationServer
    // ApiApplicati onServer VM Options
    -Dlogging.config=classpath:logback-api.xml -Dspring.profiles.active=api
    

    10. 启动前端 UI 模块

    cd dolphinscheduler-ui
    npm run start
    

    访问 http://localhost:8888
    登录 DolphinScheduler

    管理员默认账号: admin
    管理员默认密码: dolphinscheduler123

    参考资料:

    DolphinScheduler 环境搭建

    Mac M1,node-sass兼容问题

    Mac m1 docker 安装mysql

  • 相关阅读:
    JS放在head和放在body中的区别
    模板模式(Template Pattern)
    原型模式
    Linux下的头文件搜索路径
    How to Change the Default Theme Appearance [editing with no theme]
    版本控制
    What is libacl.so.1 ?
    交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别
    mount --bind 的妙用
    mount的bind选项
  • 原文地址:https://www.cnblogs.com/aaronlinv/p/15029004.html
Copyright © 2011-2022 走看看