amazon-emr - 将 Spark 处理的中间数据复制到目标 S3 时出现 AWS EMR 性能问题
问题描述
目前我正在使用 AWS EMR 进行数据处理。S3 被用作着陆区和最终处理数据。来自 S3 的最终处理数据正在加载到 Redshift 中,供客户运行分析。
每天我会收到 100 个小 KB 和 MB 的小文件(最大 2-3MB)。一旦源文件在着陆区可用,数据需要根据 SLA 在 15 分钟内出现在 Redshift 中。Orders 表的最终存储桶为 800GB。
实施 SCD 类型 1
pySpark 用于处理。数据清洗在 2-3 分钟内完成
Spark为数据处理创建了一个中间文件夹,我们将最终处理的数据从该文件夹中写入另一个 S3 存储桶
即使对于 KB 的小数据,此过程也需要将近 45 分钟。代码如下
spark.conf.set('spark.sql.sources.partitionOverwriteMode', 'dynamic')
检查正常数据复制在同一存储桶下的文件夹之间需要 3-4 分钟
正在使用 5 节点临时集群(r5.4x 大)
df.write.format("parquet").partitionBy("src", "hash_value").mode("append").save(path)
解决方案
以下是最近几天进行的调整。加载时间从 1.30 小时减少到 30 分钟
使用 R 类型实例。与同价位的 M 型实例相比,它提供了更多的内存
使用合并合并源中的文件有很多小文件。
检查映射器任务的数量。任务越多,性能越差
我们有一些不需要的数据。删除了相同的
在 emr 配置文件中使用了 EMRFS 6.used 下面。之前我们使用
{“分类”:“spark-env”,“属性”:{“spark.executor.memory”:“16g”,“spark.driver.memory”:“4g”,“spark.driver.cores”:“4 ”,“spark.driver.memoryOverhead”:“4g”,“spark.executor.cores”:“5”,“spark.executor.memoryOverhead”:“4g”}
现在我正在使用以下
{
"Classification": "spark",
"Properties": {
"maximizeResourceAllocation": "true"
}
}
推荐阅读
- python - 是否可以从查询集中生成哈希?
- css - 如何在 Less 中将两个变量连接为选择器
- c# - CsvHelper:数据验证异常未提供有关异常的足够信息以提供帮助
- javascript - 检查列中另一个工作表中的数据以引用行中的数据
- r - 如何为散点图对角线的选定部分着色?
- javascript - 在渲染从组件中的后端获取的数据时渲染问题
- javascript - 通过 Apps 脚本在 DocumentApp InlineImage 中设置宽度和高度比例?
- python - 导入 .csv 文件
- python - Python 中 Fire Store 的 on_snapshot() 函数执行两次。如何让它执行一次?
- javascript - 从 Nodejs 到 React Native 中的前端的音频流、blob 文件和播放,