当使用BigQuery Connector从BigQuery读取数据时,我发现它首先将所有数据复制到Google Cloud Storage。然后将这些数据并行读取到Spark中,但是当读取大表时,复制数据阶段需要很长时间。那么有没有更有效的方法将数据从 BigQuery 读取到 Spark 中?
另一个问题:从BigQuery读取由2个阶段组成(复制到GCS,从GCS并行读取)。复制阶段是否受 Spark 集群大小影响还是需要固定时间?
也许 Google 员工会纠正我,但据我所知,这是唯一的方法。这是因为它在底层还使用了 BigQuery Connector for Hadoop,根据 docs:
适用于 Hadoop 的 BigQuery 连接器会在运行 Hadoop 作业之前将数据下载到您的 Google Cloud Storage 存储桶中。
顺便说一句,使用 Dataflow 时也是如此 - 它也首先将 BigQuery 表导出到 GCS,然后并行读取它们。
WRT 复制阶段(本质上是 BigQuery 导出作业)是否受 Spark 集群大小影响,或者是否是固定时间 - 否。 BigQuery 导出作业是不确定的,BigQuery 使用自己的资源导出到 GCS,即不是您的 Spark 集群。
替代选项是 BigQuery storage API,速度超快。
spark-bigquery-connector正在使用此API。
我强烈建议您验证一下您是否真的需要将数据从 BQ 存储移动到 Spark 引擎。
BQ 具有计算和存储功能。是什么停止利用本机 BQ 的计算。如果您采用固定时段计费模式,则它是免费的。无论如何,本机 BQ 计算都可以激发计算能力。
如果您在 Spark 中有除摄取之外的管道,则更愿意将预聚合、浓缩、ETL 直接移至 BQ 中。它会表现更好、更具成本效益并且易于管理。
BQ 是无服务器服务,如果数据量突然变化,您无需预测处理数据所需的节点。
Spark 的另一个缺点是成本 -