dolphinscheduler配置之 master.properties/worker.properties及常见问题学习

master.properties

# master execute thread num
master.exec.threads=50

# master execute task number in parallel
master.exec.task.num=20


# master dispatch task number
master.dispatch.task.num = 3

# master heartbeat interval
#master.heartbeat.interval=10

# master commit task retry times
master.task.commit.retryTimes=5

# master commit task interval
master.task.commit.interval=1000


# only less than cpu avg load, master server can work.  default value -1 : the number of cpu cores * 2
#master.max.cpuload.avg=-1

# only larger than reserved memory, master server can work. default value : physical memory * 1/10, unit is G.
#master.reserved.memory=0.3

# master listen port
#master.listen.port=5678
 

worker.properties


# worker execute thread num
#worker.exec.threads=100

# worker heartbeat interval
#worker.heartbeat.interval=10

# only less than cpu avg load, worker server can work. default value -1: the number of cpu cores * 2
#worker.max.cpuload.avg= -1

# only larger than reserved memory, worker server can work. default value : physical memory * 1/6, unit is G.
#worker.reserved.memory=0.3

# worker listener port
#worker.listen.port: 1234

# default worker.group=default
worker.groups=worker01,default,node13

 

 我的电脑是 12核 32g 打印如下

 

# only less than cpu avg load, master server can work.  default value -1 : the number of cpu cores * 2
#master.max.cpuload.avg=-1

# only larger than reserved memory, master server can work. default value : physical memory * 1/10, unit is G.
#master.reserved.memory=0.3

这个配置=-1是什么意思呢?

默认-1 我们可以看到 master.max.cpuload.avg=default_maste_cpu_load=cpu_cores*2 

master.reserved.memory=0.3 其实就为系统预留了3G内存,意思是给其他应用留点活路。

以我们的机器为例 32G 12线程

/**
 * master cpu load
 */
public static final int DEFAULT_MASTER_CPU_LOAD = Runtime.getRuntime().availableProcessors() * 2;

/**
 * master reserved memory
 */
public static final double DEFAULT_MASTER_RESERVED_MEMORY = OSUtils.totalMemorySize() / 10;

 

我们看下哪里用到了这两个参数 此时以服务器为例128G 32core

 

/**
 * whether can submit task to queue
 * @return boolean
 */
private boolean canSubmitTaskToQueue() {     
        -- 前面的应该就是满cpu=32*2=64
    return OSUtils.checkResource(masterConfig.getMasterMaxCpuloadAvg(),
  --这个是预留的=0.3  其实就是3G(我不知道dolphin为啥要/10)
 masterConfig.getMasterReservedMemory());
}
/**
 * check memory and cpu usage
 * @param systemCpuLoad systemCpuLoad
 * @param systemReservedMemory systemReservedMemory
 * @return check memory and cpu usage
 */                                          64             0.3
public static Boolean checkResource(double systemCpuLoad, double systemReservedMemory){
  // system load average  //这个load 我本地跑了下是-1 可能是我啥也没干
  double loadAverage = OSUtils.loadAverage();
  // system available physical memory 注意这里啊没有/10 比如这里系统还有60G内存=60
  double availablePhysicalMemorySize = OSUtils.availablePhysicalMemorySize();
                     64                 60G <0.3 注意这里什么情况下会小于0.3呢??
  if(loadAverage > systemCpuLoad || availablePhysicalMemorySize < systemReservedMemory){
    logger.warn("load is too high or availablePhysicalMemorySize(G) is too low, it's availablePhysicalMemorySize(G):{},loadAvg:{}", availablePhysicalMemorySize , loadAverage);
    return false;
  }else{
    return true;
  }
}

看打印的日志 

我们的服务器是32核 128G 所以maxCPU=32*2=64 128/10=12.8 

load is too high or availablePhysicalMemorySize(G) is too low, it's availablePhysicalMemorySize(G):64.47,loadAvg:66.73 

 你看日志预警是为啥 可用内存是64G 那肯定不是内存的锅。 loadAvg=66 >systemCpuLoad=64

所以报错。

所以这里有个问题 就是cpu如果没跑满比如cpu=20 但是实际内存只有2G了 按道理应该是要预警的。但是不会 因为2 >0.3 所以这里是不是有问题呢?

因为我用的是老版本dolphin所以我专门查看了一下 3.0的dolphin 发现确实没有/10这个说法了。。

 

 无所谓了。 不管是0.3还是3G 反正就是一个预留值。

由此我们可以推断出什么呢?

我们为了让调度更好的运行 例如机器128G  32核

我们可以设置

master.max.cpuload.avg=63

master.reserved.memory=3   这个就是3G.

当然你不设置也无所谓了,都够用 只是你要明白这些参数是做什么的。

master.properties
设置 master 节点并发执行的最大工作流数
master.exec.threads=100

Control the number of parallel tasks in each workflow
设置每个工作流可以并发执行的最大任务数
master.exec.task.number=20

worker.properties
设置 worker 节点并发执行的最大任务数
worker.exec.threads=100

突然发现有文档。就不想研究了。

dolphinscheduler/faq.md at dev · apache/dolphinscheduler · GitHub

抄下文档的一些重要内容

Q:Master 或者 Worker 报如下告警

修改 conf 下的 master.properties master.reserved.memory 的值为更小的值,比如说 0.1 或者

worker.properties worker.reserved.memory 的值为更小的值,比如说 0.1

 其实就是一点活路也不留了。。

Q:工作流模板 DAG、工作流实例、工作任务及实例之间是什么关系 工作流模板 DAG、工作流实例、工作任务及实例之间是什么关系,一个 dag 支持最大并发 100,是指产生 100 个工作流实例并发运行吗?一个 dag 中的任务节点,也有并发数的配置,是指任务也可以并发多个线程运行吗?最大数 100 吗?

  master.properties
   设置 master 节点并发执行的最大工作流数
   master.exec.threads=100

   Control the number of parallel tasks in each workflow
   设置每个工作流可以并发执行的最大任务数
   master.exec.task.number=20

   worker.properties
   设置 worker 节点并发执行的最大任务数
   worker.exec.threads=100

这个注意了。其中master/worker.exec.threads=100 指的是该节点同时支持100个任务。比如我2

台worker 1台master 同时理想情况下支持300个任务。

master.exec.task.number=20 这个指的一个工作流同时只能只能运行20个。因为往往一个工作流可能会有几十 甚至上百个任务。

Q:Master 服务和 Worker 服务在运行几天之后停止了

会话超时时间太短了,只有 0.3 秒,修改 zookeeper.properties 的配置项:

zookeeper.session.timeout=60000
zookeeper.connection.timeout=30000

 Q:zk 中注册的 master 信息 ip 地址是 127.0.0.1,而不是配置的域名所对应或者解析的 ip 地址,可能导致不能查看任务日志

1、confirm hostname
$hostname
hadoop1
2、hostname -i
127.0.0.1 10.3.57.15
3、edit /etc/hosts,delete hadoop1 from 127.0.0.1 record
$cat /etc/hosts
127.0.0.1 localhost
10.3.57.15 ds1 hadoop1
4、hostname -i
10.3.57.15

hostname 命令返回服务器主机名,hostname -i 返回的是服务器主机名在 /etc/hosts 中所有匹配的 ip 地址。所以我把 /etc/hosts 中 127.0.0.1 中的主机名删掉,只保留内网 ip 的解析就可以了,没必要把 127.0.0.1 整条注释掉, 只要 hostname 命令返回值在 /etc/hosts 中对应的内网 ip 正确就可以,ds 程序取了第一个值,我理解上 ds 程序不应该用 hostname -i 取值这样有点问题,因为好多公司服务器的主机名都是运维配置的,感觉还是直接取配置文件的域名解析的返回 ip 更准确,或者 znode 中存域名信息而不是 /etc/hosts。

Q:当使用 mysql 作为 ds 数据库需要如何配置

A:1,修改项目根目录 maven 配置文件,移除 scope 的 test 属性,这样 mysql 的包就可以在其它阶段被加载

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>${mysql.connector.version}</version>
	<scope>test<scope>
</dependency>

​ 2,修改 application-dao.properties 和 quzrtz.properties 来使用 mysql 驱动 默认驱动是 postgres 主要由于许可证原因。

 Q:shell 任务是如何运行的

A:1,被执行的服务器在哪里配置,以及实际执行的服务器是哪台? 要指定在某个 worker 上去执行,可以在 worker 分组中配置,固定 IP,这样就可以把路径写死。如果配置的 worker 分组有多个 worker,实际执行的服务器由调度决定的,具有随机性。

​ 2,如果是服务器上某个路径的一个 shell 文件,怎么指向这个路径?服务器上某个路径下的 shell 文件,涉及到权限问题,不建议这么做。建议你可以使用资源中心的存储功能,然后在 shell 编辑器里面使用资源引用就可以,系统会帮助你把脚本下载到执行目录下。如果以 hdfs 作为资源中心,在执行的时候,调度器会把依赖的 jar 包,文件等资源拉到 worker 的执行目录上,我这边是 /tmp/escheduler/exec/process,该配置可以在 install.sh 中进行指定。

3,以哪个用户来执行任务?执行任务的时候,调度器会采用 sudo -u 租户的方式去执行,租户是一个 linux 用户。

Q:生产环境部署方式有推荐的最佳实践吗

A:1,如果没有很多任务要运行,出于稳定性考虑我们建议使用 3 个节点,并且最好把 Master/Worder 服务部署在不同的节点。如果你只有一个节点,当然只能把所有的服务部署在同一个节点!通常来说,需要多少节点取决于你的业务,海豚调度系统本身不需要很多的资源。充分测试之后,你们将找到使用较少节点的合适的部署方式

这里我说下 我看到我们的生产开发环境 都部署错了!!! 我们在master的机器也部署了worker了。 其实 master也可以看作一台worker。但是木已成舟,算球吧。

为什么不能这么做。 因为比如上面的worker task=100 master task=100 那你这台机器就可以跑150个task。

Q:dolphin上传比较大的文件卡住

A:1,编辑 ngnix 配置文件 vi /etc/nginx/nginx.conf,更改上传大小 client_max_body_size 1024m。

​ 2,更新 google chrome 版本到最新版本。

dolphinscheduler 在运行过程中,ip 地址获取错误的问题

master 服务、worker 服务在 zookeeper 注册时,会以 ip:port 的形式创建相关信息如果 ip 地址获取错误,请检查网络信息,如 Linux 系统通过 ifconfig 命令查看网络信息,

可以使用 dolphinscheduler 提供的三种策略,获取可用 ip:

  • default: 优先获取内网网卡获取 ip 地址,其次获取外网网卡获取 ip 地址,在前两项失效情况下,使用第一块可用网卡的地址
  • inner: 使用内网网卡获取 ip 地址,如果获取失败抛出异常信息
  • outer: 使用外网网卡获取 ip 地址,如果获取失败抛出异常信息

配置方式是在 common.properties 中修改相关配置:

# network IP gets priority, default: inner outer
# dolphin.scheduler.network.priority.strategy=default

另外,如果希望从指定的网卡获取 ip 地址,配置方式是在 common.properties 中设置配置项 dolphin.scheduler.network.interface.preferred。例如,如果希望从网卡 eth1 获取 ip 地址,配置方式是:

dolphin.scheduler.network.interface.preferred=eth1

以上配置修改后重启服务生效

如果 ip 地址获取依然错误,请下载 dolphinscheduler-netutils.jar 到相应机器,执行以下命令以进一步排障,并反馈给社区开发人员:

java -jar target/dolphinscheduler-netutils.jar

配置 sudo 免密,用于解决默认配置 sudo 权限过大或不能申请 root 权限的使用问题

配置 dolphinscheduler OS 账号的 sudo 权限为部分普通用户范围内的一个普通用户管理者,限制指定用户在指定主机上运行某些命令,详细配置请看 sudo 权限管理 例如 sudo 权限管理配置 dolphinscheduler OS 账号只能操作用户 userA,userB,userC 的权限(其中用户 userA,userB,userC 用于多租户向大数据集群提交作业)

echo 'dolphinscheduler  ALL=(userA,userB,userC)  NOPASSWD: NOPASSWD: ALL' >> /etc/sudoers
sed -i 's/Defaults    requirett/#Defaults    requirett/g' /etc/sudoers
<think>好的,我现在需要帮助用户了解DolphinScheduler中如何配置worker组。首先,我需要回忆一下DolphinScheduler的架构和配置相关的知识。DolphinScheduler是一个分布式的工作流调度系统,worker节点负责执行任务,而worker组则是用来对这些worker进行逻辑上的分组,便于任务分配和管理。 根据用户提供的引用,特别是引用[3]提到了Worker的负载均衡算法,这可能与worker组的配置有关。在配置worker组时,通常需要修改配置文件,比如`common.properties`或者`worker.properties`。用户可能需要知道如何指定worker组名称,如何配置多个worker组,以及如何让任务分配到特定的组。 接下来,我需要检查用户提供的引用内容是否有直接相关的配置步骤。引用[2]中提到了安装过程中的一些配置,如`yarnHaIps`和`singleYarnIp`,但这是关于Yarn的配置,可能与worker组无关。引用[4]涉及Hive的配置,也直接相关。引用[1]是faq文件,可能包含常见问题解答,但用户的问题是关于配置方法的,所以可能需要更具体的步骤。 我需要回忆DolphinScheduler的官方文档或常见配置方法。通常,配置worker组需要在每个worker节点的配置文件中设置`worker.groups`参数,指定该worker属于哪个组。如果有多个组,可以配置同的组名,然后在创建任务时选择对应的worker组。 可能的具体步骤包括:1. 修改worker配置文件中的`worker.groups`参数;2. 重启worker服务使配置生效;3. 在Web UI中查看或选择worker组。此外,可能还需要在Master节点配置中指定可用的worker组。 需要确保步骤准确,避免错误。比如,正确的参数名称和配置文件的位置,可能因版本同而有所变化。例如,在DolphinScheduler 1.3.9版本中,配置文件可能在`conf/config/install_config.conf`中,或者是在`common.properties`里。另外,需要注意是否需要所有worker节点都配置相同的组名,或者每个节点可以属于同的组。 还需要考虑用户的环境,例如是单机部署还是集群部署,同的部署方式可能配置方法略有同。如果用户使用的是集群模式,可能需要每个worker节点单独配置所属的组。 总结步骤应该是:1. 定位配置文件;2. 修改worker组参数;3. 重启服务;4. 验证配置。同时,可能需要提供示例配置代码块,例如修改`common.properties`中的`worker.groups=group1,group2`,但需要确认正确的配置项名称。 另外,用户可能想知道如何通过Web UI管理worker组,比如查看已配置的组,或者在任务定义中选择特定的worker组。这部分可能需要指导用户在创建任务时选择对应的worker组,确保任务被分配到正确的节点执行。 最后,生成相关问题时要围绕worker组的配置展开,比如性能影响、最佳实践、多租户配置等。</think>### DolphinSchedulerWorker 组的配置方法 在 DolphinScheduler 中,Worker 组用于对 Worker 节点进行逻辑分组,便于任务调度时按需分配资源。以下是配置步骤: --- #### **1. 修改 Worker 配置文件** - 定位到 Worker 节点的配置文件 `common.properties`(路径通常为 `conf/common.properties`)。 - 找到参数 `worker.groups`,设置所属的组名(支持多个组,用逗号分隔): ```properties # 示例:将当前 Worker 分配到 "group1" 和 "group2" worker.groups=group1,group2 ``` 若需新建组,直接定义新名称即可,例如 `worker.groups=backup_group`[^3]。 --- #### **2. 重启 Worker 服务** - 修改配置后,需重启 Worker 服务使配置生效: ```bash sh ./bin/dolphinscheduler-daemon.sh stop worker-server sh ./bin/dolphinscheduler-daemon.sh start worker-server ``` --- #### **3. 验证配置** - 登录 DolphinScheduler Web UI,进入 **监控中心 > Worker 服务器管理**,查看 Worker 节点的 `所属 Worker 组` 字段是否更新为配置的组名[^2]。 --- #### **4. 任务绑定 Worker 组** - 在创建工作流任务时,于 **任务配置** 界面选择指定的 Worker 组,任务将优先分配到该组的 Worker 节点执行。 --- #### **配置示例** 假设集群中有 3 个 Worker 节点,按场景划分: - **Worker1**:`worker.groups=online_group` - **Worker2**:`worker.groups=online_group` - **Worker3**:`worker.groups=batch_group` 此时,实时任务可绑定 `online_group`,批量任务绑定 `batch_group`,实现资源隔离。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值