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