You need to enable JavaScript to run this app.
文档中心
E-MapReduce

E-MapReduce

复制全文
下载 pdf
集群高效管理
引导操作
复制全文
下载 pdf
引导操作

在火山引擎 E-MapReduce (EMR) 集群中,您可以通过添加引导操作来安装第三方软件、配置组件依赖或调整运行环境。本文将介绍如何添加、编辑、克隆和删除引导操作。

执行机制

触发场景

引导操作的执行分为以下两种情况:

  • 创建集群时添加:脚本会在当前集群的初始化过程中,根据您设定的执行范围和时机运行。
  • 创建集群后添加:保存配置后,脚本不会立即在现有节点上执行。它只会在后续扩容时,在符合执行范围的新增节点上,按照设定的时机执行。

执行范围与时机

执行范围决定了脚本在哪些节点上运行,而执行时机则决定了脚本在安装或启动流程中的具体执行阶段。

  • 对于集群和节点组范围,支持在 “组件安装前” 和 “组件启动后” 执行。
  • 对于服务组件范围,额外支持在 “组件安装后启动前” 执行。

您可以根据脚本的依赖关系,为服务组件范围选择最合适的执行时机:

  • 组件安装前:适用于需要提前准备安装依赖或配置运行环境的场景。
  • 组件安装后启动前:适用于脚本依赖已安装的组件文件,且需要在组件启动前完成的自定义操作。
  • 组件启动后:适用于需要访问已启动服务的后续操作。

使用限制
  • 您最多可以添加 10 个引导操作。脚本将按照添加顺序的倒序执行,即最后添加的脚本最先执行。
  • 脚本默认使用 root 账户执行。

添加引导操作

EMR 支持在创建集群时和创建集群后两种方式添加引导操作。

创建集群时添加

  1. 在创建集群时选择 自定义创建。
  2. 在第 3 步 其他设置 > 高级设置 中,单击 添加脚本。创建集群步骤,请参考:创建集群。
  3. 在 添加脚本 对话框中,将 脚本类型 设置为 引导操作,并填写相关配置项。

Image

参数

描述

脚本名称

引导操作的名称。

脚本位置

选择脚本所在 TOS 的位置,如您没开通 TOS 相关服务请先授权。

说明

  1. 登录用户单击界面右上角用户头像,进入访问控制 > 角色界面。
  2. 在搜索框中输入 VEECSforEMRRole,进行角色搜索。若没有该角色,您需单击新建角色按钮,完成角色创建。角色创建请参考角色管理。
  3. 单击 VEECSforEMRRole 角色名称,检查角色中是否已包含 ECS 和 TOS 相关的权限策略,以确保 EMR 能正常读取您在 TOS 中上传的脚本。

脚本路径格式必须为 tos://**/*.sh 格式。

执行参数

引导操作脚本的参数,指定脚本中所引用的变量的值。

脚本类型

选择 引导操作。

执行范围

  • 集群:此引导操作适用于整个集群。
  • 节点组:此引导操作适用于您选择的节点组,您可以选择 MasterGroup、CoreGroup 和 TaskGroup(若有)节点组名称。

执行时间

  • 组件安装前:组件部署前执行该脚本。
  • 组件启动后:组件部署后执行该脚本。

超时时间

脚本允许执行的最长时间,单位为分钟。达到超时时间后仍未完成的脚本按执行失败处理,并按照执行失败策略决定是否继续后续流程。建议根据脚本实际耗时设置,并预留一定余量。

执行失败策略

  • 继续执行:如果该脚本执行失败,继续执行下一个脚本。
  • 停止执行:如果该脚本执行失败,停止当前脚本。
  1. 确认配置后,单击 确定,继续完成集群创建。

创建集群后添加

说明

创建集群后添加的引导操作不会因保存配置而立即在已有节点上执行。后续扩容新建节点时,会在符合执行范围的新增节点上,按照配置的执行时机执行。

  1. 登录 EMR 控制台。

  2. 在左侧导航栏中,单击 集群管理 > 集群列表,单击目标集群名称,进入集群详情页面。

  3. 在集群详情页面,单击 集群脚本 > 脚本管理,然后单击 添加集群脚本。

  4. 在 添加脚本 对话框中,将 脚本类型 设置为引导操作,完成参数配置,单击 确定。
    Image

    参数

    描述

    脚本名称

    引导操作的名称。

    脚本位置

    选择脚本所在 TOS 的位置,如您没开通 TOS 相关服务请先授权。

    说明

    1. 登录用户单击界面右上角用户头像,进入访问控制 > 角色界面。
    2. 在搜索框中输入 VEECSforEMRRole,进行角色搜索。若没有该角色,您需单击新建角色按钮,完成角色创建。角色创建请参考角色管理。
    3. 单击 VEECSforEMRRole 角色名称,检查角色中是否已包含 ECS 和 TOS 相关的权限策略,以确保 EMR 能正常读取您在 TOS 中上传的脚本。

    脚本路径格式必须为 tos://**/*.sh 格式。

    执行参数

    引导操作脚本的参数,用于指定脚本中引用的变量值。需要多个参数时,可通过添加值补充。参数填写及替换注意事项请参见常见问题。

    脚本类型

    选择 引导操作。

    执行范围

    选择引导操作的生效范围,支持以下三种粒度:

    • 集群:此引导操作适用于整个集群。
    • 节点组:此引导操作适用于所选节点组,需进一步选择 MasterGroup、CoreGroup 和 TaskGroup(若有)节点组。
    • 服务组件:此引导操作适用于所选服务组件,需进一步选择需要执行引导操作的组件,支持多选,可选组件以当前页面提供的列表为准。

    执行时机

    选择脚本执行的阶段,部分界面将该配置项显示为执行时间。

    • 集群、节点组范围:选择组件安装前或组件启动后。
    • 服务组件范围:选择组件安装前、组件安装后启动前或组件启动后。

    超时时间

    脚本允许执行的最长时间,单位为分钟。达到超时时间后仍未完成的脚本按执行失败处理,并按照执行失败策略决定是否继续后续流程。建议根据脚本实际耗时设置,并预留一定余量。

    执行失败策略

    • 继续执行:如果该脚本执行失败,继续执行下一个脚本。
    • 停止执行:如果该脚本执行失败,停止当前脚本。

查看执行记录与日志

您可以通过以下方式查看引导操作的执行情况:

  • 在 集群脚本 > 脚本管理 页面,单击目标脚本所在行的 执行记录;也可以切换到 执行记录 页签查看。
  • 登录主节点,在 /var/log/bootstap/<节点名称_IP> 路径查看执行日志。
  • 如果集群配置了 TOS 日志目录,运行日志也会上传到 tos-path/emr/clusterid/log/bootstrap/<节点名称_IP> 目录。

编辑引导操作
  1. 在 集群脚本 > 脚本管理 页面,找到脚本类型为引导操作的目标脚本,在 操作 列单击 编辑。
  2. 在 编辑脚本 对话框中,根据需要修改配置项,单击 确定。

克隆引导操作
  1. 在 集群脚本 > 脚本管理 页面,找到目标引导操作,在 操作 列单击 克隆。
  2. 在弹出的 添加脚本 对话框中,根据需要修改配置项,单击 确定。

删除引导操作
  1. 在 集群脚本 > 脚本管理 页面,找到目标引导操作,在 操作 列单击 删除。
  2. 在二次确认弹窗中,确认需要删除后,单击 确定。

示例

您可以在上传的 TOS 脚本中写入以下内容来创建文件夹、解压压缩包以及安装软件包等一系列操作。

#!/bin/bash
mkdir dir
tar -zxvf <myfile>.tar.gz -C /<yourdir>
yum install -y ld-linux.so.2

常见问题
  • Q1:EMR 引导脚本执行中断,但日志内没有报错信息。
    A1:建议您在脚本中的关键位置增加日志打印逻辑,以便通过运行日志辅助您排查脚本运行情况。目前集群脚本最为常见的报错原因有以下几类:
    • 网络连接性问题。ECS 实例和对应的 TOS 需要在同一地域下。例如,北京地域下的 ECS 实例连接不上非北京地域下的 TOS。
    • ECS 获取 AccessKey 信息失败问题。通常是由于 ECS 实例未绑定 VEECSForEMRRole 导致的。
    • 脚本中使用了 nohup,但又未重定向输出,将导致 Task 长时间无法退出。正确用法为nohup ... >*** 2>&1。
    • 脚本在 Windows 环境下编辑会带有 Windows 的换行符号,导致脚本在 Linux 环境下运行出错。您可以在操作历史报错日志中查看是否有^M字样。如果有的话建议您在 Linux 环境下重新编辑脚本并上传 TOS。
    • 使用 wget 命令下载程序包超时,请检查 ECS 节点是否连接公网。
    • 使用的指令未找到,请检查 ECS 节点是否安装了此命令。
  • Q2:EMR 引导脚本执行无 YARN、HDFS 等命令。
    A:目前 EMR 管控执行集群脚本时默认不带有任何 profile 信息,如果您需要使用 YARN、HDFS 等相关命令,请在脚本开头加入 . /etc/profile 加载,便可以使用上述命令。
  • Q3:输入的脚本参数未起作用。
    A3:输入的参数以空格分隔,我们会按顺序在您的脚本中替换字样为 $1、$2 以此类推等字符为您输入的参数。注意,如果您的脚本带有自定义函数,且函数内的参数如果含有 $1、$2 等字样也会一并替换,导致该函数不可用。
最近更新时间:2026.10.30 14:48:11
这个页面对您有帮助吗?
有用
有用
无用
无用