
任务调度大数据后端前端【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址https://gitcode.com/gh_mirrors/do/dolphinscheduler点击查看免费下载DolphinScheduler 工作流中的参数值可能来自项目级、工作流级、任务节点级、上游传递等多个来源当参数名重复时系统如何裁决取值直接影响任务执行结果。本文以官方文档「参数优先级」为骨架系统讲解五大参数来源的作用域、启动参数 本地参数 上游任务传递的参数 全局参数 项目级别参数的完整优先级链、上游多任务同名参数的取值规则并结合 Shell / SQL 任务实例与源码实现帮助你准确预测每一个参数在运行时的最终取值。一、参数的五大来源先分清参数从哪来在讨论优先级之前先明确 DolphinScheduler 中参数的五个定义位置。文档 参数优先级 将其归纳为五类每一类都有独立的作用域与定义入口参数类型定义位置作用域关联文档项目级别参数项目管理页面项目级别参数整个项目下的所有任务节点项目级别参数全局参数工作流保存页面整个工作流的所有任务节点全局参数启动参数工作流启动页面整个工作流的所有任务节点启动参数上游任务传递的参数上游节点通过setValue等机制输出有依赖关系的下游节点参数的引用本地参数任务定义页面的自定义参数默认仅当前节点配置为 OUT 后可向下游传递本地参数几个容易混淆的要点项目级别参数作用于整个项目即该项目下所有工作流、所有节点都能引用是范围最大的参数全局参数在工作流定义页面配置只对当前工作流生效配置方式为在工作流定义页面点击设置全局右侧加号填写变量名、值并选择类型参考 全局参数启动参数在工作流启动页面配置DolphinScheduler 会将其合并进全局参数中参与执行二者作用域相同、面向整个工作流参考 启动参数本地参数默认仅节点内可见只有方向为OUT时才允许被下游任务引用这与 本地参数 中IN / OUT的语义一致上游传递的参数是单向的仅能由上游传给有依赖关系的下游若节点之间没有依赖关系则局部参数无法通过上游传递参考 参数的引用。二、核心规则参数优先级从高到低因为参数存在多个来源当参数名相同时取值就会产生冲突。DolphinScheduler 的裁决规则从高到低为启动参数 本地参数 上游任务传递的参数 全局参数 项目级别参数理解这条链的关键在于启动参数优先级最高由于启动参数在每次运行时动态注入它天然覆盖工作流定义期设置的同名全局参数适合每次运行临时改变参数值的场景例如 启动参数 中的例子修改dt参数后再执行可输出不同日期本地参数高于全局参数与项目参数节点自定义参数可以屏蔽掉更大作用域的同名参数实现节点级个性化取值上游传递的参数高于全局参数、低于本地参数任务链传递的中间结果可以覆盖全局配置但无法覆盖下游节点自己显式定义的同名本地参数全局参数高于项目级别参数工作流级别的配置优先于项目级别的公共配置。关联佐证在 参数的引用 的完整示例中Node_A 脚本中为output赋值为 1但日志显示值为 100来自全局参数而在 Node_B 中按优先级规则输出为 1证明上游传递的参数 全局参数在实际运行中生效。三、上游多个任务传递同名参数时的取值规则除了跨作用域的优先级还存在同层级的冲突当上游存在多个任务向下游传递参数且传递的参数名相同时下游节点按以下规则取值优先使用值为非空的参数空值参数被自动过滤多个非空参数并存时按上游任务的完成时间排序选择完成时间最早的上游任务对应的参数。也就是说在多上游场景下先完成者胜出。这与任务实例的执行完成时间endTime强相关后完成的上游节点即使同名参数值更新也不会覆盖先完成者除非先完成者的值为空。四、实战示例一Shell 节点中本地参数如何压制上游参数下面通过文档给出的 Shell 节点示例直观理解本地参数 上游任务传递的参数这条规则。4.1 无依赖关系时上游参数不可见工作流中包含三个节点createParam产生参数的源头、useParam使用参数的下游、noUseParam无依赖的旁路节点节点useParam可以使用节点createParam中设置的变量而useParam与noUseParam之间没有依赖关系所以并不会获取到noUseParam的变量。上图中只是以 Shell 节点作为例子其他类型节点具有相同的使用规则——这正是 参数的引用 中强调的若节点之间没有依赖关系则局部参数无法通过上游传递。4.2 同名参数本地参数值覆盖上游传递值createParam节点在使用变量时直接使用即可。该节点设置了key和key1两个变量同时用户在useParam节点中定义了一个与上游传递的变量名相同的变量key1并赋值为12按照优先级规则由于本地参数key1的优先级高于上游任务传递的参数这里的值12会被最终使用而上游节点设置的变量值会被抛弃。五、实战示例二SQL 节点中本地参数与全局参数、多上游参数的裁决再用 SQL 节点解释另外两种冲突场景本地参数 vs 全局参数、多上游同名参数 vs 完成时间。节点use_create与上游节点createParam1、createParam2的依赖关系如下use_create节点的定义如下5.1status本地参数覆盖全局参数status是当前节点设置的节点的自有变量本地参数。但用户在保存工作流时同样设置了status变量全局参数并赋值为 -1。那么在该 SQL 执行时status的值取优先级更高的本地参数值2全局变量中的值 -1 被抛弃。这印证了规则本地参数 全局参数。5.2id多上游同名参数取最早完成者id是上游节点设置的变量用户在节点createParam1、节点createParam2中设置了相同参数名id的参数。而节点use_create中使用了最先结束的createParam1的值——即按照上游任务完成时间排序选择完成时间最早的上游任务对应的参数这一规则执行。六、源码视角优先级规则在代码中如何落地参数优先级的实现贯穿任务参数装配的全过程可以在 AbstractParameters.java 中看到关键支撑本地参数与 varPool 分离管理localParams保存节点自定义参数getLocalParametersMap()将其组织为Mapprop, PropertyvarPool保存节点运行后输出的参数池getVarPoolMap()同样按 prop 建立索引。二者通过LinkedHashMap保持定义顺序IN/OUT 方向决定参数能否外传getInputLocalParametersMap()只收集方向为 IN或未设置方向、默认按 IN 处理的参数用于节点内计算getOutProperty()只过滤出方向为 OUT 的参数并由dealOutParam()在任务输出参数taskOutputParams非空时把实际值注入 OUT 参数最终通过VarPoolUtils.mergeVarPool(...)合并进 varPool供下游任务读取——这正是上游任务传递的参数在运行时产生并流向下游的实现路径同名参数的覆盖语义由合并顺序决定从varPool中按 prop 取出同名参数时后 merge 的本地参数OUT 结果会覆盖先进入的作用域参数与文档所述本地参数 上游参数的优先级方向一致任务输出参数来源上游 Shell / SQL 等任务在执行日志中输出${setValue(keyvalue)}或#{(keyvalue)}格式内容DolphinScheduler 捕捉该输出后写入taskOutputParams再经由上述dealOutParam流程落地参考 参数的引用 中对 Shell、Python、Kubernetes 等任务类型参数捕捉格式的说明。从源码结构可以推断最终下发给任务节点的TaskExecutionContext中通过varPool字段见 TaskExecutionContext.java承载上游传递的参数 节点 OUT 参数的合并结果任务运行时再叠加全局参数、启动参数与本地参数完成最终取值从而在参数名冲突时体现出文档所述的整体优先级。七、工程实践建议结合上述规则与示例在实际编排工作流时可遵循以下要点参数命名做好规划避免不同作用域使用同名参数从源头减少冲突确需同名覆盖时明确利用优先级规则如用启动参数覆盖全局参数以实现运行期改参依赖关系决定参数可见性只有存在依赖关系的上下游之间才能传递参数设计 DAG 时需保证传递路径上的节点连线正确多上游同名参数以先完成者为准若业务要求以最后一个完成的上游为准应改用不同参数名或在下游通过自定义逻辑二次选择不能依赖默认规则OUT 参数必须显式声明上游节点需要在自定义参数中定义方向为 OUT 的变量Shell 用echo ${setValue(keyvalue)}SQL 用查询结果列名对齐参数名Python 用print(${setValue(key%s)} % value)否则即使脚本输出了setValue内容也无法传递到下游参考 参数的引用空值与完成时间是最后的裁决依据上游同名参数全部为空时下游取空值存在多个非空值时比较各上游任务实例的完成时间取最早者排查取值异常时可结合工作流实例→任务实例页面核对各上游节点的完成时间与输出值。赞分享任务调度大数据后端前端【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址https://gitcode.com/gh_mirrors/do/dolphinscheduler点击查看免费下载相关推荐InsForge 性能基准测试与竞品对比全解析单机实测下的 BaaS 选型参考InsForge 性能基准测试与竞品对比全解析单机实测下的 BaaS 选型参考 InsForge 是一个开源的一体化后端平台BaaS面向 AI 编程代理任务调度大数据后端前端Apache DolphinScheduler 参数优先级Parameter Priority详解六类参数的作用域与冲突裁决规则Apache DolphinScheduler 参数优先级Parameter Priority详解六类参数的作用域与冲突裁决规则 导读 本文以 Apac任务调度数据编排工作流自动化后端大数据Apache DolphinScheduler 参数优先级深度解析六类参数来源与同名覆盖规则实战Apache DolphinScheduler 参数优先级深度解析六类参数来源与同名覆盖规则实战 DolphinScheduler 中的参数值可能来自内置参数任务调度数据编排工作流自动化后端大数据创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考