在 d2.2xlarge 上 space 中的 运行

Running out of space on d2.2xlarge

我通过 EMR 启动了一个 d2.2xlarge 实例。这些实例应该有 12TB,但我在下载几 GB 后收到 "No space left on device" 错误。我认为所有这些存储 space 都在根驱动器上,而不是 EBS,所以我不确定发生了什么。

这是我看到的:

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs         30G   92K   30G   1% /dev
tmpfs            30G     0   30G   0% /dev/shm
/dev/xvda1      9.8G  9.7G     0 100% /
/dev/xvdb1      5.0G   44M  5.0G   1% /emr
/dev/xvdb2      1.9T  231M  1.9T   1% /mnt
/dev/xvdc       1.9T   34M  1.9T   1% /mnt1
/dev/xvdd       1.9T   34M  1.9T   1% /mnt2
/dev/xvde       1.9T   34M  1.9T   1% /mnt3
/dev/xvdf       1.9T   34M  1.9T   1% /mnt4
/dev/xvdg       1.9T   34M  1.9T   1% /mnt5

来自Now available: D2 instances, the latest generation of Amazon EC2 Dense-storage instances

存储是实例存储(当你停止实例时它们被挂载并消失)。整个 12TB 不在 root 上,它被挂载为 6 个磁盘。

不清楚您何时遇到 space 问题,但听起来像是您手动下载某些东西时发生的,而不是在使用 Hadoop 时发生的。所以我将以此为基础进行下面的解释。

每个 Hadoop 节点将始终有一个 10GB root volume。此外,根据实例类型和配置,它可能具有临时卷 and/or EBS 卷以增加存储空间 space。这些卷不会增加根分区的大小,而是挂载到不同的路径!

正如您所提到的,您的 d2.2xlarge 带有 6x 2TB 的临时存储,这些临时存储被安装到多个名为 /mnt* 的安装点,如您的 df- 输出所示.所以如果你需要手动下载和存储大数据,请将其存储在这些挂载点之一下。

请注意,AWS EMR 中的所有存储卷,无论是临时存储还是 EBS 卷,are considered ephemeral

Amazon EBS works differently within Amazon EMR than it does with regular Amazon EC2 instances. Amazon EBS volumes attached to EMR clusters are ephemeral: the volumes are deleted upon cluster and instance termination (for example, when shrinking instance groups), so it's important that you not expect data to persist.

因此无论您打算如何使用 EMR 中的可用存储空间,如果您手动将数据保存到其中一个卷,迟早会丢失!

由于 EMR 是一种托管的 Hadoop 解决方案,因此它当然需要提供一种可靠地存储数据的方法。有Hadoop的HDFS,它作为一个分布式文件系统,利用可用的卷,通过保存数据的多个副本来保证数据可用。在 EMR 上,HDFS 使用可用的临时存储卷以及附加到实例的 EBS 卷。即使使用 HDFS,一旦拆除 EMR 集群,您也会丢失数据!

真正的数据持久化存储可以通过将数据存储在S3中来实现,supported by upstream Hadoop, or with a proprietary solution by AWS only included in EMR called EMRFS相对于上游解决方案有一些优势。

所以通常的过程是仅手动将数据存储在 Hadoop 节点的卷上,以获得设置 Hadoop 环境所需的工具,使用 S3 或一些流式解决方案来处理输入数据,在处理您的数据时使用 HDFS数据由 Hadoop 作为中间位置,S3 用于保存完成的结果。