使用BigQuery Connector从BigQuery读取数据时,我发现它首先将所有数据复制到Google云端存储。然后将这些数据并行读入Spark,但是在读取大表时,复制数据阶段需要很长时间。那么是否有更有效的方法将数据从BigQuery读入Spark?
另一个问题:从BigQuery读取由2个阶段组成(复制到GCS,从GCS并行读取)。复制阶段是否受Spark群集大小影响还是需要固定时间?
答案 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 的另一个缺点是成本-