Dolphinscheduler 3.0 windows 部署手册

这篇具有很好参考价值的文章主要介绍了Dolphinscheduler 3.0 windows 部署手册。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Dolphinscheduler作为国人开源的一款分布式ETL调度工具在2022年4月发布了最新的3.0版本,在健壮性和功能的丰富度上相较之前的版本都有了较大的提高。工作和实际生产中从稳定性的角度我们一般采用基于centOS或者其他版本Linux的集群部署或者K8S部署。因为工作中缺少合适的Linux环境的原因,为了熟悉Dolphinscheduler功能和代码,我尝试在3台windows服务器(Server A, Server B, Server C)上进行了Dolphinscheduler集群的部署,现将部署过程分享如下:

  1. 部署准备:

  • 下载必备软件:

Dolphinscheduler 3.0 source code, 3.0版本对windows下shell(bat)的管理和进程管理上功能不全,如果直接用发布的binary版本部分功能不能支持。 另一方面,也可以通过源代码进行trouble shooting和学习Dolphinscheduler的调度原理。

OpenJDK 1.8.0, 我们采用的版本信息如下

openjdk version "1.8.0_342"
OpenJDK Runtime Environment Corretto-8.342.07.3 (build 1.8.0_342-b07)
OpenJDK 64-Bit Server VM Corretto-8.342.07.3 (build 25.342-b07, mixed mode)

MySQL社区版本,我们采用MySQL作为Dolphin元数据管理的数据库。 

Zookeeper, 作为Dolphinscheduler节点间同步管理的工具。

Cygwin,作为一款windows下模拟Linux环境非常棒的工具,采用cygwin可以更方便的完成ssh服务配置,集群信任主机配置以及规避部分windows命令和shell的差异。

Python 2.7,作为支持DataX的基础。 

DataX,作为跨平台的高效数据ETL工具。

  • 安装基础环境

a. 在三台服务器上分别安装jdk环境,例如将jdk安装在c:\java\jdk1.8下,并设置系统环境变量JAVA_HOME=c:\java\jdk1.8以及PATH=%PATH%;%JAVA_HOME%\bin

b. 在三台服务器上分别安装cygwin,并启动ssh服务和设置信任主机。

确保安装了ssh packages

Dolphinscheduler 3.0 windows 部署手册

安装完成后在系统服务中查看确保cygsshd服务已经启动并且作为系统服务可以自启动

Dolphinscheduler 3.0 windows 部署手册

 在三台机器的cygwin的home目录下执行ssh-keygen,生成id_rsa.pub公钥文件、authorized_keys等文件。将两台客户机(Server B, Server C)的公钥内容copy到master主机 (Server A) 的authorized_keys文件中 (网上有很多相关文章,不再赘述)。

c. 在master server(Server A)上解压并安装Zookeeper,  启动Zookeeper服务。

d. 在master server(不限制在master server,只要网络能够连通即可)上安装MySQL。参考Dolphinscheduler官方文档完成dolphinscheduler数据库的配置和用户的创建以及对文件dolphinscheduler_env.sh的修改。数据库的初始化在后续步骤进行。 

  • Dolphinscheduler代码修改

因当前Dolphinscheduler 3.0对windows并没有提供完整的支持,在shell执行过程中存在状态检测错误的情况。然而,Dolphinscheduler任务中的shell任务,Python任务都是以shell形式做嵌套执行的。所以,为了支持基本的任务执行需要对对应的代码进行修改并重新编译并将jar包部署到对应路径。主要修改的部分如下:

org.apache.dolphinscheduler.common.shell.AbstractShell.java的208行对执行状态的检测,跳过windows环境
if (!SystemUtils.IS_OS_WINDOWS && (exitCode != 0 || errMsg.length() > 0)) {
                throw new ExitCodeException(exitCode, errMsg.toString());
}

dolphinscheduler-common/src/main/resources/common.properties, 将sudo开关关闭:

sudo.enable=false

修改shell解释执行代码,通过cygwin bash解释执行shell代码:

   private String buildCommand() throws Exception {
        // generate scripts
//        String fileName = String.format("%s/%s_node.%s",
//                taskExecutionContext.getExecutePath(),
//                taskExecutionContext.getTaskAppId(), OSUtils.isWindows() ? "bat" : "sh");
//Run shell under windows with Cygwin bash
        String fileName = String.format("%s/%s_node.sh",
                taskExecutionContext.getExecutePath(),
                taskExecutionContext.getTaskAppId());
        File file = new File(fileName);
        Path path = file.toPath();

        if (Files.exists(path)) {
            return fileName;
        }

        String script = shellParameters.getRawScript().replaceAll("\\r\\n", "\n");
        script = parseScript(script);
        shellParameters.setRawScript(script);

        logger.info("raw script : {}", shellParameters.getRawScript());
        logger.info("task execute path : {}", taskExecutionContext.getExecutePath());

        Set<PosixFilePermission> perms = PosixFilePermissions.fromString(RWXR_XR_X);
        FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);

        if (OSUtils.isWindows()) {
            Files.createFile(path);
        } else {
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
            try {
                Files.createFile(path, attr);
            } catch (FileAlreadyExistsException ex) {
                // this is expected
            }
        }

        Files.write(path, shellParameters.getRawScript().getBytes(), StandardOpenOption.APPEND);
        if (SystemUtils.IS_OS_WINDOWS){
            return "bash /cygdrive/c"+fileName;
        }else {
            return fileName;
        }
    }
  •  安装和启动Dolphinscheduler

a. 通过Intellij IDE完成对Dolphinscheduler源码的编译,将dolphinscheduler-dist\target路径下的apache-dolphinscheduler-3.0.1-SNAPSHOT-bin.tar.gz解压到目标路径。 

b. 修改配置文件和shell脚本

修改tools/bin/upgrade-schema.sh,支持cygwin下的classpath路径,将最后一句

java $JAVA_OPTS \
  -cp "$DOLPHINSCHEDULER_HOME/tools/conf":"$DOLPHINSCHEDULER_HOME/tools/libs/*":"$DOLPHINSCHEDULER_HOME/tools/sql" \
  -Dspring.profiles.active=upgrade,${DATABASE} \
  org.apache.dolphinscheduler.tools.datasource.UpgradeDolphinScheduler

改为:

java $JAVA_OPTS \
  -classpath `cygpath $DOLPHINSCHEDULER_HOME/tools/conf:$DOLPHINSCHEDULER_HOME/tools/libs/*:$DOLPHINSCHEDULER_HOME/tools/sql` \
  -Dspring.profiles.active=upgrade,${DATABASE} \
  org.apache.dolphinscheduler.tools.datasource.UpgradeDolphinScheduler

同样,修改master-server/bin、worker-server/bin、api-server/bin、alert-server/bin下的start.sh文件,支持cygwin下的classpath路径。

以master-server为例,修改成:

java $JAVA_OPTS \
  -classpath `cygpath -wp $DOLPHINSCHEDULER_HOME/conf:$DOLPHINSCHEDULER_HOME/libs/*` \
  org.apache.dolphinscheduler.server.master.MasterServer

参考前序两例修改bin/remove-zk-node.sh, 变更对应的classpath部分,支持cygwin路径。

c. 参考Dolphinscheduler集群安装文档,修改bin/env/dolphinscheduler_env.sh和bin/env/install_env.sh文件。

d. 运行tools/bin/upgrade-schema.sh初始化metadata数据库。

e. 修改bin/dolphinscheduler-daemon.sh文件,支持windows下进程状态的侦测和杀停。因变更内容较多,整体展示如下:

#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

usage="Usage: dolphinscheduler-daemon.sh (start|stop|status) <api-server|master-server|worker-server|alert-server|standalone-server> "

# if no args specified, show usage
if [ $# -le 1 ]; then
  echo $usage
  exit 1
fi

startStop=$1
shift
command=$1
shift

echo "Begin $startStop $command......"

BIN_DIR=`dirname $0`
BIN_DIR=`cd "$BIN_DIR"; pwd`
DOLPHINSCHEDULER_HOME=`cd "$BIN_DIR/.."; pwd`
BIN_ENV_FILE="${DOLPHINSCHEDULER_HOME}/bin/env/dolphinscheduler_env.sh"

# Overwrite server dolphinscheduler_env.sh in path `<server>/conf/dolphinscheduler_env.sh` when exists
# `bin/env/dolphinscheduler_env.sh` file. User could only change `bin/env/dolphinscheduler_env.sh` instead
# of each server's dolphinscheduler_env.sh when they want to start the server
function overwrite_server_env() {
  local server=$1
  local server_env_file="${DOLPHINSCHEDULER_HOME}/${server}/conf/dolphinscheduler_env.sh"
  if [ -f "${BIN_ENV_FILE}" ]; then
    echo "Overwrite ${server}/conf/dolphinscheduler_env.sh using bin/env/dolphinscheduler_env.sh."
    cp "${BIN_ENV_FILE}" "${server_env_file}"
  else
    echo "Start server ${server} using env config path ${server_env_file}, because file ${BIN_ENV_FILE} not exists."
  fi
}

export HOSTNAME=`hostname`

export DOLPHINSCHEDULER_LOG_DIR=$DOLPHINSCHEDULER_HOME/$command/logs

export STOP_TIMEOUT=5

if [ ! -d "$DOLPHINSCHEDULER_LOG_DIR" ]; then
  mkdir $DOLPHINSCHEDULER_LOG_DIR
fi

pid=$DOLPHINSCHEDULER_HOME/$command/pid

cd $DOLPHINSCHEDULER_HOME/$command

if [ "$command" = "api-server" ]; then
  log=$DOLPHINSCHEDULER_HOME/api-server/logs/$command-$HOSTNAME.out
elif [ "$command" = "master-server" ]; then
  log=$DOLPHINSCHEDULER_HOME/master-server/logs/$command-$HOSTNAME.out
elif [ "$command" = "worker-server" ]; then
  log=$DOLPHINSCHEDULER_HOME/worker-server/logs/$command-$HOSTNAME.out
elif [ "$command" = "alert-server" ]; then
  log=$DOLPHINSCHEDULER_HOME/alert-server/logs/$command-$HOSTNAME.out
elif [ "$command" = "standalone-server" ]; then
  log=$DOLPHINSCHEDULER_HOME/standalone-server/logs/$command-$HOSTNAME.out
else
  echo "Error: No command named '$command' was found."
  exit 1
fi

osType=`uname -a`

case $startStop in
  (start)
    echo starting $command, logging to $DOLPHINSCHEDULER_LOG_DIR
    overwrite_server_env "${command}"
    nohup /bin/bash "$DOLPHINSCHEDULER_HOME/$command/bin/start.sh" > $log 2>&1 &
	echo $! > $pid
    ;;

  (stop)
      if [ -f $pid ]; then
		TARGET_PID=`cat $pid|tr -cd "[:print:]\n"`
		if [[ $osType =~ "WIN" ]];then
			echo "Stopping $command with PID $TARGET_PID"
			taskkill /F /T /PID $TARGET_PID
			PROCESS_ID=`wmic process where "name='java.exe' and commandline like '%dolphinscheduler%' and commandline like '%${command}%'" get processid|findstr -v "ProcessId"|sed s/[[:space:]]//g`
		else
			if kill -0 $TARGET_PID > /dev/null 2>&1; then
				echo stopping $command
				pkill -P $TARGET_PID
				sleep $STOP_TIMEOUT
				if kill -0 $TARGET_PID > /dev/null 2>&1; then
					echo "$command did not stop gracefully after $STOP_TIMEOUT seconds: killing with kill -9"
					pkill -P -9 $TARGET_PID
				fi
			else
				echo no $command to stop
			fi
			PROCESS_ID=`ps -ef | grep "$DOLPHINSCHEDULER_HOME" | grep "$CLASS" | grep -v "grep"`
		fi
		state="STOP"
		#  font color - red
		state="[ \033[1;31m $state \033[0m ]"
		if [ -n "$PROCESS_ID" ];then
			state="RUNNING"
			# font color - green
			state="[ \033[1;32m $state \033[0m ]"
		fi
		echo -e "$command  $state"
#        rm -f $pid
      else
        echo no $command to stop
      fi
      ;;

  (status)
    # more details about the status can be added later
	echo $CLASS
	if [[ $osType =~ "WIN" ]];then
		PROCESS_ID=`wmic process where "name='java.exe' and commandline like '%dolphinscheduler%' and commandline like '%${command}%'" get processid|findstr -v "ProcessId"|sed s/[[:space:]]//g`
		echo $PROCESS_ID > $pid
	else
		PROCESS_ID=`ps -ef | grep "$DOLPHINSCHEDULER_HOME" | grep "$CLASS" | grep -v "grep"|sed s/[[:space:]]//g`
	fi
    state="STOP"
    #  font color - red
    state="[ \033[1;31m $state \033[0m ]"
    if [ -n "$PROCESS_ID" ];then
      state="RUNNING"
      # font color - green
      state="[ \033[1;32m $state \033[0m ]"
    fi
    echo -e "$command  $state"
    ;;

  (*)
    echo $usage
    exit 1
    ;;

esac

echo "End $startStop $command."

至此,已可启动Dolphinscheduler集群,启动前需要注意确保Zookeeper已经启动,观察cygwin路径下Dolphinscheduler部署路径对应的master-server/logs, worker-server/logs, alert-server/logs, api-server/logs日志正常即可,登录观察各个节点启动正常。 

Dolphinscheduler 3.0 windows 部署手册

 文章来源地址https://www.toymoban.com/news/detail-461363.html

到了这里,关于Dolphinscheduler 3.0 windows 部署手册的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Windows环境本地部署Oracle11g r2实操手册

    前言:一直在做其他测试,貌似都忘了Windows环境oracle安装,这是一个很早很早的安装记录了,放上来做个备录给到大家参考。 环境: (都是常规系统及工具,官网度娘搜索即可下载测试学习) IOS:Windows Server 2016 SQL:Oracle Database 11g Release 2 SQL工具: 1、Oracle SQL Developer 2、

    2024年02月12日
    浏览(42)
  • StarRocks 3.0 集群安装手册

    本文介绍如何以二进制安装包方式手动部署最新版 StarRocks 3.0集群。 StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库。StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷。用户无需经过复杂的预处理,就可以用 StarRocks 来支持多种数据分析场景

    2023年04月25日
    浏览(87)
  • dolphinscheduler部署排错记录

    问题出现场景: ​ 在部署完ui, worker, master, api四个模块之后,随手建了一个工作流,点击运行的时候,在master节点上出现这个报错。 发送方发送的消息和接收方接收的消息格式不一致,导致报的这个错,但是程序在本地环境上打包成镜像是可以正常跑流程的,部署到K8S之后

    2024年01月21日
    浏览(34)
  • 【大数据进阶第三阶段之DolphinScheduler学习笔记】DolphinScheduler(海豚调度)的部署指南

    参考官网部署方式:https://dolphinscheduler.apache.org/zh-cn/docs/3.1.3/guide/installation/standalone 部署方式:单机部署,伪集群部署,集群部署。 如果是新手,想要体验 DolphinScheduler 的功能,推荐使用Standalone方式体检。如果你是在生产中使用,推荐使用 集群部署或者 kubernetes。 Standalone

    2024年01月22日
    浏览(45)
  • Kubernetes 部署DolphinScheduler 创建租户失败

    报错创建租户失败。后台日志如下 源代码跟踪 org.apache.dolphinscheduler.api.service.impl.TenantServiceImpl 需要将 resource.storage.type 置为 NONE, 因为我之前用的 1.3.6 版本的时候,即使资源文件存在本地文件也需要配置成 hdfs。 但是此时如果配置成 NONE, 租户创建成功了,但是无法创建资源文

    2024年02月13日
    浏览(44)
  • DolphinScheduler 3.1.0 海豚集群部署配置

    海豚框架官方文档 三台服务器都要安装 创建海豚用户并且给予sudo权限 免密配置:服务器各台节点之间要互相免密 生成当前用户的秘钥文件:ssh-keygen -t rsa 然后将生成的公钥文件内容写到目标机.ssh/authorized_keys文件中,OK 海豚所在每台节点之间都要互相免密 普通用户建立免

    2023年04月08日
    浏览(44)
  • Kubernetes(k8s)部署DolphinScheduler

    本次安装环境为:3台k8s+现有的mysql数据库+nfs DolphinScheduler-3.2.0官网:https://dolphinscheduler.apache.org/zh-cn/download/3.2.0 官网安装文档:https://dolphinscheduler.apache.org/zh-cn/docs/3.2.0/guide/installation/kubernetes#appendix-configurationr 默认k8s集群已经安装完成,本次已腾讯的TKE为例介绍 参考腾讯TK

    2024年01月19日
    浏览(66)
  • Apache DolphinScheduler-3.2.0集群部署教程

    Apache DolphinScheduler官网:https://dolphinscheduler.apache.org/zh-cn Apache DolphinScheduler使用文档:https://dolphinscheduler.apache.org/zh-cn/docs/3.2.0 截止2024-01-19,最新版本:3.2.0 部署版本:apache-dolphinscheduler-3.2.0-bin.tar.gz 主机名 ip 部署服务 hadoop31 192.168.0.31 MasterServer、WorkerServer、ApiServer hadoop32 19

    2024年03月11日
    浏览(51)
  • 开源任务调度平台dolphinscheduler部署及使用指南(未完)

    目录 一 dolphinsheduler调研 支持的任务类型: 1.1 dolphinsheduler集群部署 1.1.1 需要的环境 1.1.2 dolphinsheduler安装 可能的报错:zk正常,master或worker一段时间后挂掉 问题原因 解决办法 1.1.3 资源中心配置 1.2 参数 1.2.1 任务中可能出现的所有参数 1.2.2 内置参数 1.2.3 全局参数 1.2.4 本地参

    2023年04月19日
    浏览(49)
  • DolphinScheduler on k8s 云原生部署实践

    DolphinScheduler 的高效云原生部署模式,比原始部署模式节省了95%以上的人力资源和工作时间,提升了部署效率和成本效益。 通过集成 GitOps 技术,我们提升了 DolphinScheduler 的 DevOps 管理能力,改善了软件交付效率和安全审计能力。 通过集成新的云原生技术,我们为 DolphinSched

    2024年04月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包