添加引导操作,可以安装您需要的第三方软件或者修改集群运行环境。本文为您介绍如何添加引导操作及其示例。
背景信息
引导操作功能可以在集群扩容或弹性伸缩时自动在新增节点上运行指定脚本。手动执行功能可以批量选择在已有节点上运行指定脚本,以实现个性化需求,手动执行脚本的详情,请参见手动执行脚本。
引导操作类似手动执行,在集群创建时或者创建完成后,您可以通过引导操作功能,完成很多目前E-MapReduce集群尚未支持的操作,例如:
使用Yum安装已经提供的软件。
直接下载公网上的一些公开的软件。
读取OSS中您的自有数据。
安装并运行一个服务,例如Flink或者Impala。
使用限制
您最多可以添加10个引导操作。添加的引导操作会按照您指定的顺序执行。
您指定的脚本默认使用root账户执行,您也可以在脚本中使用
su - hadoop
命令,切换为hadoop用户执行。
添加引导操作
添加引导操作支持以下两种方式。
方式一:创建集群时添加引导操作
进入集群管理页面。
在顶部菜单栏处,根据实际情况选择地域和资源组。
在EMR on ECS页面,单击创建集群。
在基础配置的高级设置区域,单击引导操作所在行的添加引导操作。
填写以下配置项。
参数
描述
操作名称
引导操作的名称。
脚本地址
选择脚本所在OSS的路径。
脚本路径格式必须为oss://**/*.sh格式。
参数
引导操作脚本的参数,指定脚本中所引用的变量的值。
执行时间
组件安装前:组件安装前执行该脚本。
组件启动后:组件启动后执行该脚本。
执行失败策略
继续执行:如果该脚本执行失败,继续执行下一个脚本。
停止执行:如果该脚本执行失败,停止当前脚本。
执行范围
取值范围如下:
集群:此引导操作适用于整个集群。
节点组类型:此操作引导仅适用于您选择的节点组的类型。
引导操作示例请参见示例。
说明引导操作可能会执行失败,但引导操作失败并不会影响集群的创建。
创建集群详情,请参见创建集群。集群创建成功后,您可以在集群的脚本操作页面,查看是否有异常发生。如果有异常,请参见查看脚本执行日志。
方式二:创建集群后添加引导操作
进入脚本操作页面。
在顶部菜单栏处,根据实际情况选择地域和资源组。
单击目标集群的集群ID。
单击上方的脚本操作页签。
在引导操作页面,单击添加引导操作。
在添加引导操作对话框中,填写配置项。
参数
描述
名称
引导操作的名称。
脚本位置
选择脚本所在OSS的位置。
脚本路径格式必须为oss://**/*.sh格式。
参数
引导操作脚本的参数,指定脚本中所引用的变量的值。
执行范围
取值范围如下:
集群:此引导操作适用于整个集群。
节点组类型:此操作引导仅适用于您选择的节点组的类型。
指定节点组:此引导操作仅适用于您选择的节点组。
执行时间
组件安装前:组件安装前执行该脚本。
组件启动后:组件启动后执行该脚本。
执行失败策略
继续执行:如果该脚本执行失败,继续执行下一个脚本。
停止执行:如果该脚本执行失败,停止当前脚本。
单击确定。
引导操作示例请参见示例。
您可以对已有的引导操作进行以下操作:
编辑引导操作:单击目标引导操作所在行的编辑。
克隆引导操作:单击目标引导操作所在行的克隆。
删除引导操作:单击目标引导操作所在行的删除。
查看脚本执行日志
建议您在脚本中关键位置增加日志打印逻辑,以便通过运行日志辅助您排查脚本运行情况。
您可以通过操作历史查看引导操作脚本的执行日志。具体步骤如下:
进入集群服务页面。
在左侧导航栏,单击EMR on ECS。
在顶部菜单栏处,根据实际情况选择地域和资源组。
在EMR on ECS页面,单击目标集群操作列的集群服务。
单击右上方的操作历史。
在操作历史面板中,找到执行脚本的操作,查看详情。
DataLake、DataFlow、OLAP、DataServing和自定义集群:在创建集群(create)或扩容(increaseNodeGroup)操作记录中,单击查看任务详情。其中
RUN_BOOTSTRAP_CLUSTER_SCRIPT_<引导操作名称>_<引导操作ID>
开头的任务为执行引导操作的任务,可查看执行Stdout和Stderr日志。Hadoop、Data Science和EMR Studio集群:在创建集群(CREATE_CLUSTER)或扩容(RESIZE_CLUSTER)操作记录中,单击查看任务详情。pollDeployTaskStatusActivity下的RUN_SCRIPT_HOST_**开头的任务即为执行引导操作的任务,可查看执行Stdout和Stderr日志。
示例
引导操作需要指定引导操作的名称和执行脚本在OSS上的位置,根据需要指定脚本的参数。执行引导操作时各个节点会下载您指定的OSS脚本,直接执行或者附加上可选参数执行。引导操作示例如下:
示例1
您可以在脚本中指定需要从OSS下载的文件。例如,添加以下脚本,将oss://<yourBucket>/<myFile>.tar.gz文件下载到本地,并解压到/<yourDir>目录下。
重要OSS地址有内网地址、外网地址和VPC网络地址之分。如果使用经典网络,则需要指定内网地址,例如杭州是oss-cn-hangzhou-internal.aliyuncs.com。如果使用VPC网络,则需要指定VPC内网可访问的域名,例如杭州是vpc100-oss-cn-hangzhou.aliyuncs.com。
数据湖(DataLake)、实时数据流(DataFlow)、数据分析(OLAP)、数据服务(DataServing)和自定义场景的集群
#!/bin/bash ossutil64 cp oss://<yourBucket>/<myFile>.tar.gz ./ -e oss-cn-hangzhou-internal.aliyuncs.com -i <yourAccessKeyId> -k <yourAccessKeySecret> mkdir -p /<yourDir> tar -zxvf <myFile>.tar.gz -C /<yourDir>
旧版数据湖(Hadoop)集群
#!/bin/bash osscmd --id=<yourAccessKeyId> --key=<yourAccessKeySecret> --host=oss-cn-hangzhou-internal.aliyuncs.com get oss://<yourBucket>/<myFile>.tar.gz ./ mkdir -p /<yourDir> tar -zxvf <myFile>.tar.gz -C /<yourDir>
示例2
您可以通过Yum安装额外的系统软件包,例如安装ld-linux.so.2。
#!/bin/bash yum install -y ld-linux.so.2
常见问题
Q:EMR引导脚本执行中断,但日志内没有报错信息。
A:建议您在脚本中的关键位置增加日志打印逻辑,以便通过运行日志辅助您排查脚本运行情况。目前集群脚本最常见的报错原因有以下四类:
网络连接性问题。ECS实例和对应的OSS需要在同一地域下。例如,北京地域下的ECS实例连接不上非北京地域下的OSS。
ECS获取AccessKey信息失败问题。通常是由于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
之间有一个空格。