在 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM