将相同的 EBS 快照附加到每个 EMR 卷?
Posted
技术标签:
【中文标题】将相同的 EBS 快照附加到每个 EMR 卷?【英文标题】:Attach the same EBS snapshot to every EMR volume? 【发布时间】:2015-12-07 03:52:43 【问题描述】:我想在 EMR 作业中使用 EBS 快照。因为映射器从快照中读取,所以我希望将快照安装在每个节点上。除了登录到每个节点之外,有没有一种简单的方法可以做到这一点?我想我可以在我的 mapreduce 工作的第一步安装它,但这似乎是错误的。有没有更简单的方法?
【问题讨论】:
【参考方案1】:这是可能的,但您必须跳过一些障碍才能使其正常工作。假设您有从 shell 脚本中的 EBS 快照创建 EBS 卷的方法。 EMR 提供引导操作,它们只是您可以创建和运行的 shell 脚本。在允许运行任何作业(EMR 中的步骤)之前运行引导操作。
以下是执行 shell 脚本所需的步骤:
-
根据您的快照创建一个新的 EBS 卷。 aws 二进制文件安装在所有 EMR 实例上,因此这是您最好的选择。假设您知道快照 ID,这应该很简单:
http://docs.aws.amazon.com/cli/latest/reference/ec2/create-volume.html
确保包含 DeleteOnTermination 附件。
您需要解析响应以获取 EBS 卷 ID。
将刚刚创建的卷(使用 EBS 卷 ID)附加到当前实例:
http://docs.aws.amazon.com/cli/latest/reference/ec2/attach-volume.html
要获取当前实例 id,请使用元数据服务:
wget -q -O - http://instance-data/latest/meta-data/instance-id
获得 shell 脚本后,您需要将其上传到 S3,然后将该脚本作为引导操作添加到您的集群: http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-plan-bootstrap.html
另外请注意,您需要为您创建的每个 EBS 卷付费,因此请确保正确设置删除终止逻辑!
【讨论】:
谢谢。我还与 AWS 技术支持讨论过这个问题,他们说正确的做法是在创建节点时使用引导代码在每个节点上运行相同的脚本。以上是关于将相同的 EBS 快照附加到每个 EMR 卷?的主要内容,如果未能解决你的问题,请参考以下文章
Terraform - 创建 EBS 的快照,然后将快照转换为 EBS 并附加到 EC2