集群创建完成后(特别是包年包月集群),您可以通过集群脚本功能批量选择节点来运行指定脚本,以实现个性化需求。例如,安装第三方软件和修改集群运行环境。

背景信息

集群脚本适用于长期存在的集群,对按需创建的临时集群,应使用引导操作来完成集群初始化工作。集群脚本类似引导操作,在集群创建完成后,您可以通过集群脚本功能来安装集群尚未支持的软件和服务,例如:
  • 使用YUM安装已经提供的软件。
  • 直接下载公网上公开的软件。
  • 读取您OSS中的自有数据。
  • 安装并运行服务(例如,Flink或者Impala),但需要编写的脚本会复杂些。

前提条件

  • 已创建集群,详情请参见创建集群
  • 请确保集群状态是空闲或运行中,其他状态时集群不支持运行集群脚本。
  • 已开发或已获取集群脚本(示例),并上传到OSS。

注意事项

  • 一个集群同一时间只能运行一个集群脚本,如果有正在运行的集群脚本,则无法再提交执行新的集群脚本。每个集群最多保留10个集群脚本记录,如果超过10个,则需要您将之前的记录删除才能创建新的集群脚本。
  • 集群脚本可能在部分节点上运行成功,部分节点上运行失败。例如,节点重启导致脚本运行失败。在解决异常问题后,您可以单独指定失败的节点再次运行。当集群扩容后,您也可以指定扩容的节点单独运行集群脚本。

使用集群脚本

  1. 进入集群详情页面。
    1. 登录阿里云E-MapReduce控制台
    2. 在顶部菜单栏处,根据实际情况选择地域和资源组
    3. 单击上方的集群管理页签。
    4. 集群管理页面,单击相应集群所在行的详情
  2. 在左侧的导航栏,单击集群脚本
  3. 集群脚本页面,单击右上角的创建并执行
  4. 创建脚本对话框中,输入名称,选择脚本,选中执行节点
    说明 在使用集群脚本功能时,强烈建议您先在单个节点对集群脚本进行测试,在测试全部正常后,再在整个集群上操作。
  5. 完成上述参数配置后,单击确定
    集群脚本创建完成后,会显示在集群脚本列表中,并且脚本处于运行中状态。
    • 单击刷新,可以更新集群脚本的状态。
    • 单击详情,可以查看脚本在各个节点上的运行情况。
    • 单击删除,可以删除创建的集群脚本。

查看脚本执行日志

说明 建议您在脚本中关键位置增加日志打印逻辑,以便通过运行日志辅助您排查脚本运行情况。

您可以通过操作历史查看引导操作脚本对执行日志。具体步骤如下:

  1. 登录阿里云E-MapReduce控制台
  2. 在顶部菜单栏处,根据实际情况选择地域和资源组
  3. 单击上方的集群管理页签。
  4. 集群管理页面,单击目标集群的集群ID。
  5. 单击右上方的查看操作历史
  6. 在操作历史中找到执行脚本的操作,查看详情。
    • Hadoop、Data Science和EMR Studio集群:单击RUN_CLUSTER_SCRIPT操作类型,选择主机名,单击RUN_SCRIPT_HOST_**开头的任务,即可查看脚本执行日志。
    • DataLake、DataFlow、OLAP和DataServing集群:单击executeClusterScript操作类型,选择主机名,单击RUN_NORMAL_CLUSTER_SCRIPT_**开头的任务,即可查看脚本执行日志

示例

与引导操作的脚本相似,您可以在集群脚本中指定需要从OSS下载的文件,以下示例下载oss://yourbucket/myfile.tar.gz文件到本地,并解压到/yourdir目录下。
#!/bin/bash
osscmd --id=<yourAccessKeyId> --key=<yourAccessKeySecret> --host=oss-cn-hangzhou-internal.aliyuncs.com get oss://<yourBucketName>/<yourFile>.tar.gz ./<yourFile>.tar.gz
mkdir -p /<yourDir>
tar -zxvf <yourFile>.tar.gz -C /<yourDir>
说明 OSS地址有内网地址、外网地址和VPC网络地址之分。如果是经典网络,则需要指定内网地址(例如,杭州是oss-cn-hangzhou-internal.aliyuncs.com)。如果是VPC网络,则需要指定VPC内网可以访问的域名(例如,杭州是vpc100-oss-cn-hangzhou.aliyuncs.com)。
集群脚本也可以通过YUM安装额外的系统软件包。例如安装ld-linux.so.2
#!/bin/bash
yum install -y ld-linux.so.2

集群默认使用root账户来执行您指定的脚本。您也可以在脚本中使用su hadoop切换到hadoop账户。

常见问题

  • Q:EMR引导脚本执行中断,但日志内没有报错信息。

    A:建议您在脚本中的关键位置增加日志打印逻辑,以便通过运行日志辅助您排查脚本运行情况。目前集群脚本最为常见的报错原因有以下四类:
    • 网络连接性问题。例如,北京机器连接非北京OSS地址导致连接不上。
    • ECS获取AccessKey信息失败问题。这通常是由于ECS未绑定Role导致,可以登录ECS控制台查看是否绑定了AliyunECSInstanceForEMRRole。
    • 脚本中使用了nohup,但又未重定向输出,将导致Task长时间无法退出。正确用法为nohup ... >*** 2>&1
    • 脚本在Windows环境下编辑会带有Windows的换行符号,导致脚本在Linux环境下运行出错。您可以通过操作历史报错日志中是否有^M字样。建议在Linux环境下编辑并上传OSS。
  • Q:EMR引导脚本执行无YARN、HDFS等命令。

    A:目前EMR管控执行集群脚本时默认不带有任何profile信息,如果您需要使用YARN、HDFS等相关命令,请在脚本开头加入. /etc/profile加载,便可以使用上述命令。
    重要. /etc/profile中,./etc/profile之间有一个空格。