多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Apache DolphinScheduler MapReduce(MR) 任务节点完全指南:参数详解、源码原理与 WordCount 实战

Apache DolphinScheduler MapReduce(MR) 任务节点完全指南:参数详解、源码原理与 WordCount 实战 Apache DolphinScheduler MapReduce(MR) 任务节点完全指南参数详解、源码原理与 WordCount 实战【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinschedulerMapReduce(MR) 任务节点是 Apache DolphinScheduler 中用于直接编排和调度 Hadoop MapReduce 作业的内置任务类型它让开发者可以在低代码 DAG 工作流中拖拽式接入批处理计算任务。本文围绕该节点的参数配置、底层命令拼装原理与 WordCount 完整实战展开帮助读者快速掌握如何在 DolphinScheduler 中安全、高效地运行 JAVA/SCALA/Python 三类 MapReduce 程序。综述DolphinScheduler 如何执行 MapReduce 任务MapReduce(MR) 任务类型用于执行 MapReduce 程序。其核心执行机制是当任务到达 Worker 后Worker 会通过 Hadoop 命令hadoop jar的方式将 MapReduce 作业提交到 YARN 集群。从源码角度看这一逻辑在任务插件的核心类中清晰可见。任务命令常量在 MapReduceTask.java 中定义为hadoop命令拼装模板为hadoop jar jar [mainClass] [GENERIC_OPTIONS] args...最终由getScript()方法将MapReduceArgsUtils.buildArgs(...)生成的参数列表拼接为一条完整的命令行字符串交给 Worker 执行。因此MapReduce 任务节点的本质是一个「参数化包装器」你在界面上填写的程序类型、主类、jar 包、命令行参数等内容最终都会被翻译为一条标准的hadoop jar命令。创建任务在 DolphinScheduler 中创建 MapReduce 任务的步骤如下进入「项目管理 → 项目名称 → 工作流定义」点击「创建工作流」按钮进入 DAG 编辑页面。从左侧工具栏中拖动MR任务节点到画板中然后按照下文参数说明完成配置。说明MR 节点的默认参数任务名称、运行标志、失败重试、超时告警等与其他任务类型一致详见 DolphinScheduler 任务参数附录 的「默认任务参数」一栏。任务参数详解MapReduce 任务节点的参数根据程序类型分为两大类JAVA/SCALA 程序与 Python 程序。JAVA/SCALA 程序当程序类型选择 JAVA 或 SCALA 时可配置的参数如下任务参数描述程序类型选择 JAVA/SCALA 语言主函数的 Class是 MapReduce 程序的入口 Main Class 的全路径主程序包执行 MapReduce 程序的 jar 包任务名称选填MapReduce 任务名称Yarn 队列设置 Yarn 队列默认使用 default命令行参数是设置 MapReduce 程序的输入参数支持自定义参数变量的替换其他参数支持–D、-files、-libjars、-archives格式自定义参数是 MapReduce 局部的用户自定义参数会替换脚本中以${变量}的内容从源码看以上字段与 MapReduceParameters.java 中的属性一一对应mainJar主程序包、mainClass主类、mainArgs命令行参数、others其他参数、appName任务名称、yarnQueueYarn 队列以及programType程序类型。参数校验逻辑要求主程序包与程序类型二者必填否则任务初始化时会抛出mapreduce task params is not valid异常。Python 程序当程序类型选择 Python 时可配置的参数如下任务参数描述程序类型选择 Python 语言主 jar 包是运行 MapReduce 的 Python jar 包其他参数支持–D、-mapper、-reducer、-input、-output格式这里可以设置用户自定义参数的输入。例如-mapper mapper.py 1 -file mapper.py -reducer reducer.py -file reducer.py –input /journey/words.txt -output /journey/out/mr/${currentTimeMillis}其中-mapper后的mapper.py 1是两个参数第一个参数是 mapper.py第二个参数是 1自定义参数是 MapReduce 局部的用户自定义参数会替换脚本中以${变量}的内容关于「其他参数」需要特别说明两点-mapper mapper.py 1中引号内的内容会被解析为两个独立参数mapper.py和1后者通常用作 Map 阶段的并发配置-output路径中可以使用${currentTimeMillis}这类时间变量确保每次运行输出目录唯一避免重跑时因目录已存在而失败。三种程序类型的枚举定义程序类型由 ProgramType.java 枚举定义取值含义为0 JAVA、1 SCALA、2 PYTHON。该枚举不仅用于界面选择还直接参与底层命令的拼装逻辑详见下节。源码级原理参数如何拼装成hadoop jar命令理解参数拼接顺序有助于排查命令执行问题。参数构建的核心逻辑位于 MapReduceArgsUtils.java 的buildArgs方法中拼装顺序如下主程序包添加jar关键字与主 jar 包在 Worker 本地资源目录中的绝对路径由资源中心分发到 Worker 后获得主类仅 JAVA/SCALA当程序类型不是 PYTHON 且主类非空时追加主类的全路径任务名称若填写了任务名称追加-D mapreduce.job.nameappNameYarn 队列若「其他参数」中未显式包含队列配置则追加-D mapreduce.job.queuenameyarnQueue默认 default若用户已在「其他参数」中自行指定则不再重复添加避免冲突其他参数原样追加-conf、-archives、-files、-libjars、-D等内容命令行参数最后追加mainArgs。上述两个-D选项对应的常量定义在 MapReduceTaskConstants.java 中public static final String MR_NAME mapreduce.job.name; // -D mapreduce.job.namename public static final String MR_YARN_QUEUE mapreduce.job.queuename; // -D mapreduce.job.queuenamequeuename此外MapReduceTask.java 的init()方法中还完成了参数预处理使用JSONUtils.parseObject将任务参数 JSON 反序列化为MapReduceParameters对象并执行必填校验调用ParameterUtils.convertParameterPlaceholders将任务参数中的${变量}占位符替换为全局参数、局部参数组合后的实际值仅当程序类型为PYTHON时「其他参数」字段也会执行同样的占位符替换而 JAVA/SCALA 的「其他参数」不参与替换——这是三种程序类型在参数处理上的一个重要差异配置时需注意。任务样例执行 WordCount 程序WordCount 是 MapReduce 应用中最常见的入门类型主要功能是统计输入文本中相同单词出现的次数。下面以 WordCount 为例演示在 DolphinScheduler 中配置并运行一个完整的 MapReduce 任务。在 DolphinScheduler 中配置 MapReduce 环境若生产环境中需要使用 MapReduce 任务类型则需先配置好 Worker 所需的环境。配置文件为bin/env/dolphinscheduler_env.sh即文档所述路径位于 DolphinScheduler 安装目录的bin/env/下。该文件需要确保 Worker 节点能够找到 Hadoop 相关命令通常需要配置类似如下的环境变量并确保安装了 Hadoop 客户端的机器上HADOOP_HOME指向正确的安装目录export HADOOP_HOME/opt/hadoop export PATH$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH环境配置完成后Worker 才能在执行hadoop jar命令时正确解析 hadoop 命令。上传主程序包在使用 MapReduce 任务节点时需要利用资源中心上传执行程序的 jar 包详细操作可参考资源中心。当配置完成资源中心之后直接使用拖拽的方式即可将所需的目标 jar 包如wordcount.jar上传到资源中心配置 MapReduce 节点回到 DAG 编辑页面双击 MR 节点根据前文参数说明配置所需内容。以运行 Hadoop 官方 WordCount 示例为例典型配置如下程序类型JAVA主函数的 Classorg.apache.hadoop.examples.WordCount主程序包选择资源中心中已上传的wordcount.jar任务名称选填wordcount-jobYarn 队列default默认值命令行参数/input/words.txt /output/wordcount输入路径与输出路径输出路径需为集群中不存在的目录其他参数选填如需指定提交队列可写-D mapreduce.job.queuenamedefault配置完成后保存并运行工作流即可在任务实例日志中看到 Worker 实际执行的hadoop jar命令以及作业在 YARN 上的运行状态。小结MapReduce 任务节点让 DolphinScheduler 的工作流可以直接编排 YARN 上的批处理作业其核心实现路径清晰界面参数 →MapReduceParameters对象 →MapReduceArgsUtils.buildArgs拼装参数 → Worker 执行hadoop jar命令。理解 MapReduceArgsUtils.java 中「主 jar → 主类 → 任务名 → 队列 → 其他参数 → 命令行参数」的固定拼装顺序以及 PYTHON 程序对「其他参数」额外做变量替换的差异即可在实际调度中对各类 MapReduce 作业进行灵活、准确的参数配置与问题排查。【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表