在没有EMR的情况下在AWS上运行HDFS集群



我想在AWS上运行一个HDFS集群,在那里我可以使用在EC2实例上运行的自定义应用程序存储需要处理的数据。AWS EMR是我在AWS上创建HDFS集群的唯一方法。网上有使用EC2实例创建HDFS集群的教程。但是,如果我使用EC2实例,当我关闭这些实例时,我会面临丢失数据的风险。

我需要的是:
1。一个HDFS集群,在不使用时可以关闭
2。关闭时,数据应保持持久化。

有一个解决方案说,我可以将数据保存在S3存储桶中,并在每次启动EMR集群时加载它。然而,这是重复的,并且是巨大的开销,特别是在数据巨大的情况下。

在GCP中,我使用了DataProc集群,它满足了以上两个标准。关闭集群至少节省了虚拟机的成本,而且我只在不使用HDFS集群时支付了存储费用。我想知道AWS中是否有类似的方法。

您可以利用EFS弹性文件系统,它将把您的所有数据保存到s3,并且每当您重新启动ec2实例时,它都可以使用。

此外,如果需要,您可以与多个EC2实例共享此EFS。所以在您的用例中,将EFS创建为HDFS是一个不错的选择。

更多详细信息请点击此处。

我认为您可能有X-Y问题。您几乎肯定不希望在EMR上拥有远程HDFS文件系统。

EMR为Hadoop和Spark提供了两个HDFS兼容的文件系统:

1( 一个临时文件系统,通过hdfs://访问。这主要用于暂存/临时数据。它的持续时间与集群的持续时间一样长,并且由EBS支持。

2( 一个持久的文件系统,通过s3://访问。这在文档中被称为EMRFS。它由S3支持。

例如,如果你在Spark,并且你习惯于做类似Spark的事情hdfs://mydata/somepartition/"(.doWork((.write.parquet("hdfs://mynewdata/somepartition/"(

你现在就这么做spark.read.parquet("s3://mybucket/mydata/somepartition/"(.doWork((.write.parquet("s3//mybucket/mynewdata/somepartition/"(

一切都很正常。s3://由EMR人员针对速度进行了优化,因为他们知道您的EMR集群与s3数据共享一个数据中心。

根据Shubham Jain的回答,EFS可能会导致EMR出现问题,因为除了EMR提供的瞬态后端之外,您将有效地运行第二个HDFS后端。我想你可以,但这会有点奇怪。在您的EMR集群上,您必须为EMR的HDFS(在EMR中称为核心节点(提供NameNodes,并为EFS支持的HDFS提供单独的NameNodes(我想,它们必须作为EMR任务节点运行?(。EFS对于瞬态数据将比EBS支持的HDFS慢,并且对于永久数据将比S3贵。

如果您出于某种原因(我不知道为什么(不想使用EMFS,您可能最好推出自己的集群,而不使用EMR,因为在这一点上,您希望自定义HDFS的安装方式,而EMR的目的就是为您做到这一点。

最新更新