在aws上运行hdfs集群而不使用emr

ruoxqz4g  于 2021-05-31  发布在  Hadoop
关注(0)|答案(2)|浏览(425)

我想在aws上运行hdfs集群,在那里我可以存储需要使用在ec2示例上运行的自定义应用程序处理的数据。aws emr是我在aws上创建hdfs集群的唯一方法。web上提供了使用ec2示例创建hdfs集群的教程。但是,如果我使用ec2示例,当我关闭示例时,我会有丢失数据的风险。
我需要的是:
1不使用时可以关闭的hdfs群集。
2关闭时,数据应保持持久性。
有一个解决方案说我可以将数据保存在s3 bucket中,并且每次启动emr集群时都加载它。然而,这是重复的,并且是一个巨大的开销,特别是如果数据是巨大的。
在gcp中,我使用了满足上述两个条件的dataproc集群。关闭集群至少节省了vms的成本,而且我只在不使用hdfs集群时支付了存储费用。我想知道是否有一些类似的方式在美国焊接学会。

tzdcorbm

tzdcorbm1#

您可以利用efs弹性文件系统,它将把您的所有数据保存到s3,并且每当您重新启动ec2示例时,它都将对您可用。
另外,如果需要,您可以与多个ec2示例共享这个efs。因此,在您的用例中,将efs创建为hdfs是一个不错的选择。
更多细节在这里。

6rqinv9w

6rqinv9w2#

我想你可能有x-y问题。您几乎肯定不希望在emr上有一个远程hdfs文件系统。
emr为hadoop和spark本机提供了两个hdfs兼容的文件系统:
1) 临时文件系统,通过hdfs://. 这主要用于临时数据。它的持续时间和集群的持续时间一样长,并且由ebs支持。
2) 通过s3:///访问的持久文件系统。这在文档中称为emrfs。它由s3支持。
例如,如果你在spark,你习惯于做spark.read.parquet(“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后端之外,您将有效地运行第二个hdfs后端。我想你可以,但那会有点奇怪。在emr集群上,emr的hdf必须有namenodes(在emr中称为核心节点),而efs支持的hdf必须有单独的namenodes(我猜,这必须作为emr任务节点运行?)。对于 transient 数据,efs将比ebs支持的HDF慢,而对于永久数据,efs将比s3更昂贵。
如果您出于某种原因(我不知道为什么)不想使用emrfs,那么最好不要使用emr,而是使用自己的集群,因为此时您需要自定义hdfs的安装方式,而emr的目的就是为您这样做。

相关问题