将相同的 EBS 快照附加到每个 EMR 卷?

Attach the same EBS snapshot to every EMR volume?

我想在 EMR 作业中使用 EBS 快照。因为映射器从快照中读取,所以我希望快照安装在每个节点上。除了登录到每个节点之外,有没有一种简单的方法可以做到这一点?我想我可以在 mapreduce 作业的第一步中安装它,但这似乎是错误的。有更简单的方法吗?

这是可能的,但您必须克服一些困难才能让它发挥作用。假设您有从 shell 脚本中的 EBS 快照创建 EBS 卷的方法。 EMR 提供 bootstrap 操作,它们只是您可以创建的 shell 脚本和 运行。 Bootstrap 操作是 运行 在允许任何作业(EMR 中的步骤)之前 运行。

以下是执行 shell 脚本所需的步骤:

  1. 根据您的快照创建一个新的 EBS 卷。 aws 二进制文件安装在所有 EMR 实例上,因此这是您最好的选择。假设您知道快照 ID,这应该很简单: http://docs.aws.amazon.com/cli/latest/reference/ec2/create-volume.html
    • 确保包含 DeleteOnTermination 附件。
    • 您需要解析响应以获取 EBS 卷 ID。
  2. 将您刚刚创建的卷(使用 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,然后将该脚本作为 bootstrap 操作添加到您的集群: http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-plan-bootstrap.html

另请注意,您需要为创建的每个 EBS 卷付费,因此请确保正确设置终止时删除逻辑!