以高效的方式从BigQuery读入Spark?

时间:2017-01-04 10:57:26

标签: apache-spark google-bigquery google-cloud-dataproc google-hadoop

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

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

3 个答案:

答案 0 :(得分:8)

也许一个Google员工会纠正我,但AFAIK是唯一的方法。这是因为它还使用了适用于Hadoop的BigQuery Connector,它符合docs

  

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

作为旁注,使用Dataflow时也是如此 - 它也首先将BigQuery表导出到GCS,然后并行读取它们。

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

答案 1 :(得分:5)

spark-bigquery-connector使用了超快的BigQuery storage API。

答案 2 :(得分:0)

我强烈建议您验证您是否真的需要将数据从 BQ Storage 移动到 Spark 引擎。
BQ 具有计算和存储功能。什么是停止利用原生 BQ 的计算。如果您使用固定时段计费模式,则它是免费的。本机 BQ 计算在任何情况下都不会低于激发计算能力.. 如果您在 Spark 中有管道,除了摄取,更喜欢将预聚合、浓缩、ETL 移动到直接在 BQ 中。它将性能更好、成本效益更高且易于管理。 BQ 是无服务器服务,您无需预测在数据量突然变化时处理数据所需的节点。

Spark 的另一个缺点是成本-

  1. 如果您处理大型数据集,使用存储 API 会增加很多成本。Dataproc/Dataflow 使用存储 API 从大查询中读取数据
  2. Dataproc 节点成本
  3. Dataproc 服务费用
  4. 可选 - 如果 BQ 插槽成本会浪费,因为您不会使用它。