【问题标题】:How does spark processing work on data from outside the cluster like azure blob storage?Spark 处理如何处理来自集群外部的数据(如 azure blob 存储)?
【发布时间】:2020-07-15 15:48:12
【问题描述】:

我的问题类似于:

Standalone Spark cluster on Mesos accessing HDFS data in a different Hadoop cluster

虽然上面的问题是关于使用 spark 处理来自不同 hadoop 集群的数据,但我也想知道 spark 如何处理来自 azure blob 存储容器的数据。

来自 azure 文档 (https://docs.microsoft.com/en-us/azure/databricks/data/data-sources/azure/azure-storage),以下代码用于将数据直接加载到数据帧中:

val df = spark.read.parquet("wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<directory-name>")

当对数据帧应用 udf 等操作时,是否将完整的数据传输到驱动程序内存,然后在执行程序之间拆分?

位置是否在处理过程中发挥作用?例如,如果 spark 集群和数据(在 azure blob 存储容器或不同的 hadoop 集群上)位于不同的数据中心,如何处理?

【问题讨论】:

    标签: azure apache-spark apache-spark-sql azure-databricks


    【解决方案1】:

    当对数据帧应用 udf 等操作时,是否将完整的数据传输到驱动程序内存,然后在执行程序之间拆分?

    是的,完整的数据已传输,但未传输到驱动程序。执行器并行读取数据。如果文件很多,则在执行器之间进行分割,大文件由多个执行器并行读取(如果文件格式是可拆分的)。

    val df = spark.read.parquet("wasbs://@.blob.core.windows.net/")

    了解该行代码不会加载任何内容这一点至关重要。稍后当您调用 df.write 或评估 Spark SQL 查询时,将读取数据。如果数据是分区的,查询可能能够消除查询不需要的整个分区。

    位置是否在处理过程中发挥作用?

    在 Azure 中,真正快速的网络弥补了数据和计算分离的问题。

    当然,您通常希望 Blob/Data Lake 与 Spark 集群位于同一 Azure 区域。跨区域的数据移动速度较慢,并且按数据出站收费,略低于 0.01 美元/GB。

    【讨论】:

      猜你喜欢
      • 2017-12-11
      • 1970-01-01
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 2021-07-31
      • 2019-02-18
      • 2017-02-10
      相关资源
      最近更新 更多