重新创建 EMR 集群后保持 HDFS 状态

Posted

技术标签:

【中文标题】重新创建 EMR 集群后保持 HDFS 状态【英文标题】:Persisting HDFS state after EMR cluster is recreated 【发布时间】:2020-03-20 22:41:03 【问题描述】:

重新创建后是否可以在 emr 集群上保持 HDFS 存储的状态?根据我的经验,本地存储的所有文件都丢失了。

是否可以选择使用已挂载的卷(例如 EFS)并将 EMR 集群挂载到该文件挂载? 例如:

  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///mnt/my/efs/location/</value>
  </property> 

如果集群被删除,正在寻找一种方法来找出集群上次停止的位置。任何帮助,将不胜感激。

【问题讨论】:

【参考方案1】:

EMR 集群将 EC2 实例的本地存储和挂载 EBS 用于 HDFS 磁盘区域(您可以检查 HDFS 的可用磁盘空间量或多或少挂载在 EMR 集群节点上的磁盘量)。据我所知,使用 EFS 不是一个选项,因为使用 EFS 和安全网关附加的 IAM 权限不是创建 EMR 集群时的选项。

我们可以使用S3DistCp (s3-dist-cp)从HDFS复制到S3。或者坚持使用 EMRFS 而不是 HDFS。

【讨论】:

如果可以通过 terraform 引导进程,EMR 会从现有文件系统中读取还是尝试创建新文件系统? 您可以从 Terraform 引导(aws_emr_cluster 资源具有 bootstrap_action 属性来指定要使用的脚本,您可以将其上传到 S3 并从 bootstrap_action 指向 S3)。我不确定“从现有内容中读取”是什么。 Bootstrap 是设置一个新的 EMR 集群,而不是现有的 EMR 集群。 如果您创建一个新的 EMR 集群,EMR 集群中 EC2 实例的文件/磁盘始终是新的。以前使用的 localstore 或 EBS 卷都已消失。你不能以某种方式神奇地回忆起它们并使用它们。很明显写在docs.aws.amazon.com/emr/latest/ManagementGuide/…。 “附加到 EMR 集群的 Amazon EBS 卷是短暂的:这些卷会在集群和实例终止时被删除(例如,在缩小实例组时),因此不要期望数据会持续存在,这一点很重要。” 正如文档中明确指出的那样,请放弃以某种方式附加到 EMR 集群的 EBS 或 Localstore 可以保存或重复使用的期望。 该文件称“EMRFS 可以帮助确保存储在 Amazon S3 中的 HDFS 数据存在持久的“真实来源”。”。这意味着一旦您的 EMR 集群消失,您就不能期望保留 HDFS 内容。

以上是关于重新创建 EMR 集群后保持 HDFS 状态的主要内容,如果未能解决你的问题,请参考以下文章

创建并运行 EMR on EKS 集群

阿里云EMR集群初始化后的开发准备工作

创建 EMR 集群时出错,EMR 服务角色无效

使用 S3DistCp 将文件从 HDFS 复制到 EMR 集群上的 S3

用于创建 EMR 集群的 Lambda 不会触发集群创建

EMR 集群创建在步骤中失败