簡體   English   中英

數據流作業在 40 秒內失敗

[英]Dataflow Job is failing within 40 Seconds

我有一個簡單的 google could http trigger function,它負責觸發數據流運行器作業,將雲存儲上的數據從 CSV 加載到 BigQuery 表。

我的代碼如下所示:-

import apache_beam as beam
import argparse
from apache_beam.options.pipeline_options import SetupOptions, PipelineOptions

PROJECT = 'proj'
BUCKET='BUCKET'
SCHEMA = 'sr:INTEGER,abv:FLOAT,id:INTEGER,name:STRING,style:STRING,ounces:FLOAT,ibu:STRING,brewery_id:STRING'
DATAFLOW_JOB_NAME = 'jobname'


def execute(request):
    argv = [
      '--project={0}'.format(PROJECT),
      '--job_name={0}'.format(DATAFLOW_JOB_NAME),
      '--staging_location=gs://{0}/staging/'.format(BUCKET),
      '--temp_location=gs://{0}/staging/'.format(BUCKET),
      '--region=europe-west2',
      '--runner=DataflowRunner'
   ]

    #p = beam.Pipeline(argv=argv)
    pipeline_options = PipelineOptions(argv)
    pipeline_options.view_as(SetupOptions).save_main_session = True
    p = beam.Pipeline(options=pipeline_options)
    input = 'gs://{0}/beers.csv'.format(BUCKET)
    print ('step-222')

    (p | 'ReadData' >> beam.io.ReadFromText(input, skip_header_lines =1)
       | 'SplitData' >> beam.Map(lambda x: x.split(','))
       | 'FormatToDict' >> beam.Map(lambda x: {"sr": x[0], "abv": x[1], "ibu": x[2], "id": x[3], "name": x[4], "style": x[5], "brewery_id": x[6], "ounces": x[7]}) 
       | 'WriteToBigQuery' >> beam.io.WriteToBigQuery(
           table='data',
           dataset='sandbox',
           project=PROJECT
           schema=SCHEMA,
           create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED,
           write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND
           ))
    p.run()
    return "success"

Function 成功運行,它還創建了一個 Dataflow 實例,但 Dataflow 實例在 40 秒內失敗,沒有創建 Graph-View。 在此處輸入圖像描述 它給出了錯誤:- 在此處輸入圖像描述

正如@captainnabla 在他的評論中所說,您必須創建一個su.network並將其作為您的Dataflow作業的選項。

  • 解決方案 1

在項目的默認VPC中,為Dataflow創建 su.network

如果您沒有指定 su.network,通常 Dataflow 作業將使用項目默認的 VPC.network。 我不知道為什么這在您的情況下不起作用(也許在這種情況下,作業采用的 default.network 在執行作業的項目之外)。

  • 方案二

為您的數據管道創建另一個VPC ,為數據流創建一個Dataflow

.network 配置取決於您的團隊策略。

在這兩個解決方案中,您可以將Dataflow作為程序參數傳遞給數據流作業:

--subnetwork=https://www.googleapis.com/compute/v1/projects/{PROJECT_ID}/regions/{REGION}/subnetworks/{SUBNETWORK}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM