我通过电子病历启动了一个d2.2xlarge
实例。这些实例应该有12 to,但是在下载几GB之后,我得到了一个“设备上没有空间”错误。我以为所有的存储空间都在根驱动器上,而不是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
发布于 2017-09-05 23:10:32
目前还不清楚何时会遇到空间外问题,但听起来似乎是在手动下载某些内容时发生的,而不是在使用Hadoop时。因此,我将用它作为解释的基础。
每个Hadoop节点总是有一个10根容量。此外,根据实例类型和配置,它可能有短暂的卷和/或EBS卷来增加存储空间。这些卷不会增加根分区的大小,而是被挂载到不同的路径!
正如您提到的,您的d2.2xlarge
附带了6x2TB的临时存储,这些存储被挂载到几个名为/mnt*
的挂载点,就像在df
-output中看到的那样。因此,如果您需要手动下载和存储大型数据,请将其存储在这些挂载点之一下。
请注意,AWS EMR中的所有存储卷(无论是短暂存储还是EBS卷)都是被认为是短暂的:
Amazon在Amazon中的工作方式与常规的Amazon实例不同。附加到EMR集群的Amazon卷是短暂的:在集群和实例终止时(例如,当实例组缩小时),卷被删除,所以重要的是不要期望数据会持续存在。
因此,无论您计划如何使用EMR中的可用存储,如果您手动将数据保存到其中一个卷中,它迟早会丢失!
由于EMR是一个托管Hadoop解决方案,它当然需要提供一种可靠存储数据的方法。有Hadoop的HDFS,作为一个分布式文件系统,它利用可用的卷,并通过保存数据的多个副本来确保数据可用。在EMR上,HDFS使用可用的临时存储卷以及附加到实例的EBS卷。即使使用HDFS,一旦您拆除EMR集群,您也会丢失数据!
数据的真正持久存储可以通过将数据存储在S3 (即由上游Hadoop支持 )中,或者使用由上游Hadoop支持专有的解决方案来实现,这种解决方案只包含在电子病历中,称为EMRFS,这比上游解决方案具有一些优势。
因此,通常的过程是只在Hadoop节点的卷上手动存储数据,以供您设置Hadoop环境所需的工具使用,对输入数据使用S3或某种流解决方案,在Hadoop处理数据期间使用S3作为中间位置,使用S3来持久化已完成的结果。
发布于 2017-09-05 13:49:09
https://stackoverflow.com/questions/46063718
复制