每天運行流作業一次10 x節省成本
這是第六篇由多部分組成的係列如何執行複雜的流分析使用Apache火花。
傳統上,當人們考慮流媒體,諸如“實時”“24/7”或“總是”。你可能隻到達固定間隔情況下數據。也就是說,數據顯示每小時或者一天一次。對這些用例,它仍然是有利於執行增量處理這些數據。然而,它會浪費保持集群運行24/7來執行一個短的每天處理一次。
幸運的是,通過使用新的運行一次觸發功能添加到結構化流在火花2.2中,你將會得到所有的好處催化劑優化器incrementalizing你的工作量,節約成本的集群周圍沒有懶懶的。在這篇文章中,我們將研究如何使用觸發器來完成。
觸發器在結構化流
在結構化流、觸發器用於指定頻率流查詢應該產生的結果。一旦引發火災,引發檢查是否有新數據可用。如果有新數據,然後逐步執行查詢時無論到了自上次觸發器。如果沒有新數據,然後流睡覺直到下一個觸發器觸發。
默認行為的結構化流運行最低的延遲是可能的,所以觸發火一旦之前觸發結束。用例具有低延遲需求,結構化流支持ProcessingTime觸發火將每一個用戶提供的時間間隔,例如每一分鍾。
雖然這是偉大的,但仍然需要集群保持運行的24/7。相比之下,RunOnce觸發隻火一次,然後將停止查詢。下麵我們將會看到,這可以讓你有效利用外部調度機製磚等工作。
指定觸發器是當你開始你的流。
(code_tabs)
#你流DataFrame負載自衛隊= = spark.readStream.load(路徑" / /路徑”,格式=“json”、模式= my_schema)#執行轉換,然後寫…sdf.writeStream.trigger(一旦=真正的=).start(路徑/ /路徑”,格式=“鋪”)
進口org.apache.spark.sql.streaming.Trigger/ /加載流DataFrameval自衛隊= spark.readStream.format (“json”. schema (my_schema) .load ()" / /路徑”)/ /執行轉換,然後寫…sdf.writeStream.trigger Trigger.Once .format (“鋪”).start (/ /路徑”)
[/ code_tabs]
為什麼流和RunOnce比批呢
你可能會問,這比簡單地運行一個批處理作業有什麼不同?我們去跑步的好處結構化流/批處理作業。
記賬
當你運行一個批處理作業執行增量更新,你通常需要處理找出數據是新的,你應該過程,什麼,你不應該。結構化流已經為您做所有這些事情。在編寫通用的流媒體應用程序中,您應該隻關心業務邏輯,而不是低級記賬。
表級原子性
大數據處理引擎的最重要的特征是它可以容忍的缺點和失敗。ETL作業可能在實踐中,經常會失敗。如果你的工作失敗了,那麼您需要確保你的工作的輸出應清理幹淨,否則你最終會重複或垃圾數據下成功運行後你的工作。
在使用結構化流寫出一個基於文件的表,結構化流提交所有文件創建的工作日誌每次成功後觸發。當火花讀回表,它使用這個日誌找出哪些文件是有效的。這將確保垃圾由失敗並不被引入下遊應用程序。
有狀態操作在運行
如果你的數據管道的可能性產生重複的記錄,但是你想確切語義之後,如何實現,在一個批處理工作負載?與結構化流,如設置水印,並使用容易dropDuplicates ()
。通過配置的水印幾次運行足夠長的時間,以包含流媒體工作,你將確保你不會重複數據在運行。
節約成本
運行一個24/7流的工作是一個昂貴的折磨。您可能使用情況下,延遲的時間是可以接受的,或數據每小時或每天。所有上述結構化流的好處,你可能會認為你需要保持一個集群啟動並運行。但現在,“執行一次”觸發,你不需要!
在磚,我們有兩個階段的數據管道,組成的一個增量工作提供的最新數據,在一天結束的時候,和一個工作一整天的數據處理,進行重複數據刪除,覆蓋了增量的輸出工作。第二個工作將使用相當大的資源比第一份工作(4倍),以及運行更長時間(3倍)。我們能夠擺脫第二份工作在我們的許多管道總成本節約相當於10倍。我們也能夠清理大量的代碼在我們的代碼與新觸發執行一次。這些都是節約成本,使金融和工程經理快樂!
調度運行與磚
磚的工作調度器允許用戶與安排生產工作的幾個簡單的點擊。作業調度器是理想的調度結構流觸發工作運行的執行一次。
在磚,我們使用工作調度程序運行我們所有的生產工作。作為工程師,我們確保在我們的ETL作業的業務邏輯測試。我們上傳代碼磚作為一個圖書館,和我們建立了筆記本設置配置等ETL作業輸入文件目錄。剩下的是磚來管理集群、時間表和執行工作,和結構化流找出哪些文件是新的,和處理傳入的數據。最終的結果是一個端到端的——從數據源到數據倉庫,不僅在火花,一旦數據管道。看看我們的文檔如何最好的結構化流運行工作。
總結
在這篇文章裏,我們介紹了結構化流的新“執行一次”觸發。而一旦觸發就像運行批處理作業執行,我們討論了它的所有利益在批處理作業的方法,具體來說:
- 管理所有的記賬數據的過程
- 提供表級原子性ETL作業文件存儲
- 確保有狀態操作在運行的工作,允許簡單的重複數據刪除
除了在批處理所有這些好處,你也沒有空閑的成本節約24/7集群為不規則流工作啟動並運行。兩全其美的批處理和流媒體處理現在在你的指尖。
今天嚐試結構化流在磚注冊一個14天的免費試用。
這個博客係列的其他部分解釋其他福利: