【问题标题】:How to download, transform and upload multiple files in parallel using Google Kubernetes Engine?如何使用 Google Kubernetes Engine 并行下载、转换和上传多个文件?
【发布时间】:2019-10-28 04:41:58
【问题描述】:

我有大量数据存储在谷歌存储桶中,结构如下: gs://project_garden/plant_logs/2019/01/01/humidity/plant001/hour.gz。我想要的是制作一个 Kubernetes 作业,它下载所有内容、解析它并将解析的文件并行上传到 BigQuery。到目前为止,我已经设法在没有任何并行性的情况下在本地完成它,方法是编写一个 python 代码,该代码将日期间隔作为输入,并在每个执行 gsutil -m cp -r 的植物上循环以供下载,gunzip 用于提取,pandas 用于转换。我想使用 Kubernetes 为每个工厂并行地做同样的事情。是否可以通过定义一个作业来为每个 pod 传递不同的植物 id 并为每个 pod 下载文件来并行化该过程?

【问题讨论】:

  • 使用 k8s 是强制要求吗?如果不是,我可能会通过编写 Cloud Dataflow 管道来执行此操作,该管道在 GCS 中读取您的文件,解析它们并直接写入 BigQuery。这样,Cloud Dataflow 将自动为您并行化工作。你不必担心它。

标签: python kubernetes google-cloud-platform google-bigquery google-cloud-storage


【解决方案1】:

无法从 Kubernetes 直接上传到 BigQuery,您只能通过以下方法将数据上传到 BigQuery [1]:

  • 来自云存储
  • 来自其他 Google 服务,例如 Google Ad Manager 和 Google Ads
  • 来自可读数据源(例如您的本地计算机)
  • 通过使用流式插入插入单个记录
  • 使用 DML 语句执行批量插入
  • 在 Cloud Dataflow 管道中使用 BigQuery I/O 转换将数据写入 BigQuery

如前一条评论中所述,最简单的解决方案是使用 DataFlow 上传数据,您可以在链接 [2] 中找到一个模板来将文本从 Google Cloud Storage (GCS) 上传到 BigQuery

如果您必须使用 Google Cloud Engine (GKE),则需要执行以下步骤:

  1. 使用 GKE 从 GCS 读取数据。您可以在下一个链接 [3] 中找到如何在容器中安装存储桶的示例
  2. 使用问题中提到的代码解析数据
  3. 将数据从 GCS 上传到 BigQuery,更多信息请参见链接 [4]

[1]https://cloud.google.com/bigquery/docs/loading-data

[2]https://cloud.google.com/dataflow/docs/guides/templates/provided-streaming#gcstexttobigquerystream

[3]https://github.com/maciekrb/gcs-fuse-sample

[4]https://cloud.google.com/bigquery/docs/loading-data-cloud-storage

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-23
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多