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

在 M1 下搭建 DolphinScheduler 开发调试环境的更多相关文章

  1. Windows下搭建FFmpeg开发调试环境

    背景 如果你是一个FFmpeg的使用者,那么绝大部分情况下只需要在你的程序中引用FFmpeg的libav*相关的头文件,然后在编译阶段链接相关的库即可. 但是如果你想调试FFmpeg内部相关的逻辑,或 ...

  2. Linux下搭建FFmpeg开发调试环境

    背景 如果你是一个FFmpeg的使用者,那么绝大部分情况下只需要在你的程序中引用FFmpeg的libav*相关的头文件,然后在编译阶段链接相关的库即可.但是如果你想调试FFmpeg内部相关的逻辑,或者 ...

  3. golang在Windows下Sublime Text开发调试环境的配置

    一.前言 近期本人有工作调动,进入了一个全新的领域[golang]服务端开发.在此写下本文,希望给那些没接触过golang开发调试环境及还在犹豫选择那家golang IDE而纠结的朋友们一点点帮助,如 ...

  4. 基于Visual Studio Code搭建Golang开发调试环境【非转载】

    由于对Docker+kubernetes的使用及持续关注,要理解这个平台的原理,势必需要对golang有一定的理解,基于此开始利用业余时间学习go,基础语法看完之后,搭建开发环境肯定是第一步,虽然能g ...

  5. Win7 32位下cocos2dx android开发调试环境

    1.使用环境 win7 32位 + vs2010 2.软件准备(下方绿色文字带链接) cocos2dx-v2.2.2 jdk7 android sdk android ndk adt bundle a ...

  6. WIN10下搭建react-native开发Android环境

    最近公司要求使用react-native进行移动端开发,据说macOS上开发坑会少的多,但我们是windows,莫法,直接抗吧!周末配置环境遇到很多问题,谨以此文做个记录... 准备 安装Chocol ...

  7. PHP开发调试环境配置(基于wampserver+Eclipse for PHP Developers )

    1 软件准 WampServer 下载地址:http://www.wampserver.com/en/#download-wrapper    我下的是 里面包含了搭建PHP必须的4个软件:   1. ...

  8. PHP开发调试环境配置

    ——基于wamp和Eclipse for PHP Developers 引言 为了搭建PHP开发调试环境,我曾经在网上查阅了无数的资料,但没有一种真正能够行的通的.因为PHP开发环境需要很多种软件相互 ...

  9. windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境

    windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境   http://rongmayisheng.com/post/windows%E4%B8%8B%E7%94%A ...

  10. mac os 下搭建android开发环境

    mac os 下搭建android开发环境 周银辉 mac os 下搭建android环境比较方便, 如下几个步骤: 1,安装jdk 先搞清楚自己是否已经安装,在命令行下:java -version, ...

随机推荐

  1. NC208250 牛牛的最美味和最不美味的零食

    题目链接 题目 题目描述 牛牛为了减(吃)肥(好),希望对他的零食序列有更深刻的了解,所以他把他的零食排成一列,然后对每一个零食的美味程度都打了分,现在他有可能执行两种操作: eat k:吃掉当前的第 ...

  2. NC14700 追债之旅

    题目链接 题目 题目描述 小明现在要追讨一笔债务,已知有n座城市,每个城市都有编号,城市与城市之间存在道路相连(每条道路都是双向的),经过任意一条道路需要支付费用.小明一开始位于编号为1的城市,欠债人 ...

  3. 每月免费调用1000次API调用:实现PDF转档、页面编辑、OCR

    每月1000次免费PDF API调用: 使用ComPDFKit API充分发挥您PDF转换的全部潜力 您是否在寻找无需前期投资即可提升软件集成能力的途径?再也不用找了!我们先进的API为您的项目提供所 ...

  4. NVME(学习笔记_杂谈)

    NVME 协议中一些概念的理解: 1.Namespace :可以将Namespace 理解为一片Logic Block的区域,一个Controller可以支持多个Namespace,每个Namespa ...

  5. Event对象

    Event对象 Event对象表示在DOM中出现的事件,在DOM中有许多不同类型的事件,其主要使用基于Event对象作为主接口的二次接口,Event对象本身包含适用于所有事件的属性和方法. 描述 事件 ...

  6. Oracle 中UNDO与REDO的区别详解

    一 为了更清楚的看出2者区别,请看下表: UNDO                                                                   REDO Rec ...

  7. java generic 介绍

    一 介绍: 在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的"任意化","任意化"带来的缺点是要做显式的强制类型转换, ...

  8. 简单了解HTTP、Websocket和Netty

    前言 伴随着网络的快速发展,网络通讯越来越重要,通讯的快捷.安全.方便影响着用户的体验.本文将探讨这些技术的原理.特点以及在实际应用中的应用场景. 1.HTTTP(超文本传输协议) HTTP是一种传输 ...

  9. SpringBoot的自动装配原理及应用

    什么是SpringBoot自动装配 所谓的"SpringBoot自动装配"就是指:通过注解和一些简单的配置就能将某些组件载入Spring容器环境中,便于使用. 比如,很多sprin ...

  10. 案例分享:Qt激光加工焊接设备信息化软件研发(西门子PLC,mysql数据库,用户权限控制,界面设计,参数定制,播放器,二维图,rgv小车,期限控制,参数调试等)

    需求   1.键鼠控制,承担ui界面设计,布局兼容分辨率1024x768 ~ 1920x1080.  2.权限控制:三种权限,分为管理员(可以定制模块界面,修改产品名称等定制化软件和其他权限,同时具备 ...