如何高效地从 BigQuery 读取到 Spark? [已关闭]

问题描述 投票:0回答:3

当使用BigQuery Connector从BigQuery读取数据时,我发现它首先将所有数据复制到Google Cloud Storage。然后将这些数据并行读取到Spark中,但是当读取大表时,复制数据阶段需要很长时间。那么有没有更有效的方法将数据从 BigQuery 读取到 Spark 中?

另一个问题:从BigQuery读取由2个阶段组成(复制到GCS,从GCS并行读取)。复制阶段是否受 Spark 集群大小影响还是需要固定时间?

apache-spark google-bigquery google-cloud-dataproc google-hadoop
3个回答
11
投票

也许 Google 员工会纠正我,但据我所知,这是唯一的方法。这是因为它在底层还使用了 BigQuery Connector for Hadoop,根据 docs:

适用于 Hadoop 的 BigQuery 连接器会在运行 Hadoop 作业之前将数据下载到您的 Google Cloud Storage 存储桶中。

顺便说一句,使用 Dataflow 时也是如此 - 它也首先将 BigQuery 表导出到 GCS,然后并行读取它们。

WRT 复制阶段(本质上是 BigQuery 导出作业)是否受 Spark 集群大小影响,或者是否是固定时间 - 否。 BigQuery 导出作业是不确定的,BigQuery 使用自己的资源导出到 GCS,即不是您的 Spark 集群。


7
投票

替代选项是 BigQuery storage API,速度超快。

spark-bigquery-connector正在使用此API。


1
投票

我强烈建议您验证一下您是否真的需要将数据从 BQ 存储移动到 Spark 引擎。
BQ 具有计算和存储功能。是什么停止利用本机 BQ 的计算。如果您采用固定时段计费模式,则它是免费的。无论如何,本机 BQ 计算都可以激发计算能力。 如果您在 Spark 中有除摄取之外的管道,则更愿意将预聚合、浓缩、ETL 直接移至 BQ 中。它会表现更好、更具成本效益并且易于管理。 BQ 是无服务器服务,如果数据量突然变化,您无需预测处理数据所需的节点。

Spark 的另一个缺点是成本 -

  1. 如果您正在处理大型数据集,则存储 API 的使用会增加大量成本。Dataproc/Dataflow 使用存储 API 从大查询中读取数据
  2. Dataproc 节点成本
  3. Dataproc 服务成本
  4. 可选 - 如果 BQ 插槽成本会被浪费,因为您不会使用它。
© www.soinside.com 2019 - 2024. All rights reserved.