Apache Spark输出压缩执行位置及本地到Azure数据传输量问询
Spark跨环境写入Azure Blob传输量问题解答
核心结论
你场景下从本地数据中心到Azure Blob的实际传输量为3GB(压缩后的文件大小),不存在先传输8GB原始数据到Azure再压缩的逻辑。
流程原理说明
Spark 2.3.x版本的写入&压缩逻辑遵循以下执行链路:
- 所有HDFS数据读取、数据转换、压缩操作全部在本地数据中心的Spark Executor/Worker节点完成,不会提前把未压缩的原始数据传输到远端存储
- 你在代码中通过
.option("compression", "com.explore.compress.CustomZipCodec")指定了压缩格式,Spark的写入逻辑会在数据写入目标存储的输出流之前,先在Executor本地内存中完成压缩计算 - 哪怕你通过
repartition(1)将数据合并为单分区,该合并操作也全部在本地集群的Executor节点完成,不会涉及跨环境的原始数据传输 - 最终仅会把压缩完成的二进制流传输到Azure Blob对应的存储路径,所以跨公网/专线传输的只有3GB压缩后数据
补充验证方式
如果需要自行确认该逻辑,可以通过两个维度验证:
- 观察作业运行阶段Executor节点的CPU占用:压缩执行阶段CPU会有明显升高,说明压缩计算在本地节点执行
- 查看本地数据中心的出口流量监控:作业写入阶段的出口流量总和和最终生成的压缩文件总大小基本一致,远小于8GB原始数据大小
内容的提问来源于stack exchange,提问作者Anoop Deshpande
相关产品推荐
相关产品推荐

