Apache Spark 在哪里对输出进行压缩?
Where Apache Spark does the compression on output?
我们有一个 运行 独立集群模式下的 Spark 作业,它从 HDFS 读取数据并使用我们的自定义压缩器组件进行压缩,然后将 .zip
文件写入 Azure blob 存储。我们的 Spark 和 HDFS 托管在同一个数据中心(本地)。
例如,Spark 作业正在从本地 HDFS 读取 8 GB 文件并在 Azure blob 存储上创建 3 GB .zip
,在这种情况下,Spark 是否将 8 GB 文件复制到 Azure blob 存储并且然后将其压缩为 3 GB .zip
文件,或者压缩是否发生在 executor/worker 节点并且只有压缩数据 (3 GB) 将被发送到 Azure blob 存储?我想了解在我的案例中私有本地存储与 Azure 存储之间发生的数据传输量,是 3 GB 还是 8 GB?
下面是代码片段,
sparkSession
.read
.schema(getInputSchema)
.option("escape", "\"")
.option("quote", "\"")
.csv(hdfsPath)
.write
.repartition(1)
.option("escape", "\"")
.option("quote", "\"")
.option("header", "true")
.option("compression", "com.explore.compress.CustomZipCodec")
.partitionBy("colum1")
.csv(azureBlobPath)
补充一下,我们正在使用 apache-spark-2.3.x
。
压缩是程序化的,将通过 Executor 发生在 Worker 上。因此在 prem 和 3gb 转移到 azure。
我们有一个 运行 独立集群模式下的 Spark 作业,它从 HDFS 读取数据并使用我们的自定义压缩器组件进行压缩,然后将 .zip
文件写入 Azure blob 存储。我们的 Spark 和 HDFS 托管在同一个数据中心(本地)。
例如,Spark 作业正在从本地 HDFS 读取 8 GB 文件并在 Azure blob 存储上创建 3 GB .zip
,在这种情况下,Spark 是否将 8 GB 文件复制到 Azure blob 存储并且然后将其压缩为 3 GB .zip
文件,或者压缩是否发生在 executor/worker 节点并且只有压缩数据 (3 GB) 将被发送到 Azure blob 存储?我想了解在我的案例中私有本地存储与 Azure 存储之间发生的数据传输量,是 3 GB 还是 8 GB?
下面是代码片段,
sparkSession
.read
.schema(getInputSchema)
.option("escape", "\"")
.option("quote", "\"")
.csv(hdfsPath)
.write
.repartition(1)
.option("escape", "\"")
.option("quote", "\"")
.option("header", "true")
.option("compression", "com.explore.compress.CustomZipCodec")
.partitionBy("colum1")
.csv(azureBlobPath)
补充一下,我们正在使用 apache-spark-2.3.x
。
压缩是程序化的,将通过 Executor 发生在 Worker 上。因此在 prem 和 3gb 转移到 azure。