簡體   English   中英

使用Cloud Dataflow從PubSub將數據流式傳輸到Google Cloud Storage

[英]Streaming data to Google Cloud Storage from PubSub using Cloud Dataflow

我正在使用數據流中的流數據來監聽來自pub-sub的數據。 然后,我需要上傳到存儲,處理數據並將其上傳到bigquery。

這是我的代碼:

public class BotPipline {

public static void main(String[] args) {

    DataflowPipelineOptions options = PipelineOptionsFactory.as(DataflowPipelineOptions.class);
    options.setRunner(BlockingDataflowPipelineRunner.class);
    options.setProject(MY_PROJECT);
    options.setStagingLocation(MY_STAGING_LOCATION);
    options.setStreaming(true);

    Pipeline pipeline = Pipeline.create(options);

    PCollection<String> input = pipeline.apply(PubsubIO.Read.maxNumRecords(1).subscription(MY_SUBSCRIBTION));

    input.apply(TextIO.Write.to(MY_STORAGE_LOCATION));

    input
    .apply(someDataProcessing(...)).named("update json"))
    .apply(convertToTableRow(...)).named("convert json to table row"))
            .apply(BigQueryIO.Write.to(MY_BQ_TABLE).withSchema(tableSchema)
    );
    pipeline.run();
}

}

當我運行代碼注釋“編寫存儲”時,代碼運行良好。 但是當我嘗試上傳到大型查詢時,出現此錯誤(這是預期的..):

Write can only be applied to a Bounded PCollection

我沒有使用bound,因為我需要一直運行,並且需要立即上傳數據。 有什么辦法嗎?

編輯:這是我想要的行為:

我正在通過pubsub接收消息。 每個消息都應作為粗略數據存儲在GCS中自己的文件中,對數據執行一些處理,然后將其保存到大查詢中-數據中具有文件名。

在收到BQ示例后,應立即查看數據:

data published to pubsub : {a:1, b:2} 
data saved to GCS file UUID: A1F432 
data processing :  {a:1, b:2} -> 
                   {a:11, b: 22} -> 
                   {fileName: A1F432, data: {a:11, b: 22}} 
data in BQ : {fileName: A1F432, data: {a:11, b: 22}} 

這個想法是將處理后的數據存儲在BQ中,該鏈接與GCS中存儲的Rough數據有鏈接

目前,我們不支持在TextIO.Write編寫無界集合。 相關問題

您能否闡明無限制TextIO.Write的行為是什么? 例如,您要關閉一個不斷增長的文件,還是每個窗口關閉一個文件,或者在關閉窗口時關閉文件,或者進行其他操作,或者對您而言重要的是寫入的文件的總內容最終將包含所有PubSub消息,但文件的結構如何等等都沒關系?

解決方法是,您可以使用IOChannelFactory與GCS進行交互,以編寫GCS作為自己的DoFn (實際上, TextIO.Write只是用戶可以從頭開始編寫的復合轉換)。

您可以使用可選的訪問數據的窗口BoundedWindow的參數@ProcessElement 如果您解釋所需的行為,我將能夠提供更多建議。

暫無
暫無

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

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