从 S3 读取超过 500GB 的数据并将 400GB 输出保存到 S3 是个好主意吗?
Is it a good idea to read over 500GB data from S3 and save the 400GB outputs to S3?
我的MR 作业从AWS S3 读取500GB 数据,同时将中间数据保存在S3 中,并将reducer 的输出(大约400GB)写入S3,这是一个好的设计吗?
有没有其他更便宜稳定的解决方案?谢谢!
HDFS 上的 map reduce 旨在获取输入并执行少量操作,然后写入。由于它是并行完成的,所以设计并没有你想象的那么糟糕。你能不能更详细点,关于便宜和稳定。 HDFS绝对稳定。
我们在 AWS 中完成了 ETL 作业 运行。我们使用 Oozie 进行工作流管理。
当您在 EMR (Elastic MapReduce) 中 运行 时,您可以选择写入 s3
或本地 HDFS
.
将数据存储在 s3
或 HDFS
中的决定取决于多种因素,例如:
- 数据的性质:临时(使用
HDFS
)或永久(使用s3
)
- 成本:存储在
s3
中会花费一些 cents/dollars
- 带宽:当您将数据上传到
s3
时,您会消耗一些带宽,AWS 会为此向您收费。
- 节流:Uploads/Downloads to/from
s3
已节流。如果您在短时间内 uploading/downloading 的数据过多,那么您的某些请求可能会失败。我记得在我们的一个工作流程中遇到过这个问题。
- 作业效率:将数据存储在本地
HDFS
比存储在 s3
更快。因此,如果您希望作业 运行 更快,将结果存储在 HDFS
中可能是个好主意
总的来说,我们遵循以下准则:
- 工作流中的一个作业完成后,如果数据要被工作流中的另一个作业消费,则存储在本地
HDFS
,消费后删除数据(这样就不用HDFS
中 space 中的 运行。
- 如果特定作业的数据不打算用于最终消费(临时数据),则将其存储在
HDFS
中。否则直接将输出写入s3
.
- 如果最终消费需要一个中间输出,那么直接将结果存入
s3
,集群宕机时不丢失数据
因为在本地 HDFS 中您可以很容易地 运行 出 space,您需要规划 HDFS 集群的容量。 AWS link 此处 [Calculate the HDFS Capacity of a Cluster] 提供了计算 HDFS 容量并相应地确定 EMR 集群大小的指南。
我的MR 作业从AWS S3 读取500GB 数据,同时将中间数据保存在S3 中,并将reducer 的输出(大约400GB)写入S3,这是一个好的设计吗?
有没有其他更便宜稳定的解决方案?谢谢!
HDFS 上的 map reduce 旨在获取输入并执行少量操作,然后写入。由于它是并行完成的,所以设计并没有你想象的那么糟糕。你能不能更详细点,关于便宜和稳定。 HDFS绝对稳定。
我们在 AWS 中完成了 ETL 作业 运行。我们使用 Oozie 进行工作流管理。
当您在 EMR (Elastic MapReduce) 中 运行 时,您可以选择写入 s3
或本地 HDFS
.
将数据存储在 s3
或 HDFS
中的决定取决于多种因素,例如:
- 数据的性质:临时(使用
HDFS
)或永久(使用s3
) - 成本:存储在
s3
中会花费一些 cents/dollars - 带宽:当您将数据上传到
s3
时,您会消耗一些带宽,AWS 会为此向您收费。 - 节流:Uploads/Downloads to/from
s3
已节流。如果您在短时间内 uploading/downloading 的数据过多,那么您的某些请求可能会失败。我记得在我们的一个工作流程中遇到过这个问题。 - 作业效率:将数据存储在本地
HDFS
比存储在s3
更快。因此,如果您希望作业 运行 更快,将结果存储在HDFS
中可能是个好主意
总的来说,我们遵循以下准则:
- 工作流中的一个作业完成后,如果数据要被工作流中的另一个作业消费,则存储在本地
HDFS
,消费后删除数据(这样就不用HDFS
中 space 中的 运行。 - 如果特定作业的数据不打算用于最终消费(临时数据),则将其存储在
HDFS
中。否则直接将输出写入s3
. - 如果最终消费需要一个中间输出,那么直接将结果存入
s3
,集群宕机时不丢失数据
因为在本地 HDFS 中您可以很容易地 运行 出 space,您需要规划 HDFS 集群的容量。 AWS link 此处 [Calculate the HDFS Capacity of a Cluster] 提供了计算 HDFS 容量并相应地确定 EMR 集群大小的指南。