我正在使用flink程序將我從kafka獲得的流式數據寫入Azure Data Lake。當我在獲取ADLOutputStream和寫入和關閉時使用同步時,它工作正常,但性能非常差,因爲只有一個線程正在寫入數據湖。當我使用多線程而沒有同步時,它將拋出http 400 illegalargument異常。有多種線程可以寫入Azure數據湖中的文件嗎?如何從多線程寫入流數據到Azure數據湖?
1
A
回答
1
再想一想你的設計。
一種方法是將多個文件寫入Data Lake - 每個線程一個文件。一旦進入Data Lake,您可以使用USQL或PolyBase查詢一組文件,就好像它們是一個數據源一樣。或者,您可以編排一份USQL作業,以便在文件在湖中合併文件。這將是本地處理,並會表現良好。
1
使用AdlOuputStream不是這種並行寫入的正確機制。 AdlOutputStream專爲一個作家場景而設計。當從多個線程有並行攝取數據通常是我們通常看到的幾個特點:
- 要優化吞吐量和不能做跨線程同步
- 訂購(跨線程)通常並不重要
爲了專門解決這些類型的場景,Azure Data Lake Store提供了一個獨特的高性能API,我們稱之爲「併發追加」。
這裏是您展示如何使用這個API的要點是:https://gist.github.com/asikaria/0a806091655c6e963eea59e89fdd40a9
的方法可以用在我們的SDK的核心類:https://azure.github.io/azure-data-lake-store-java/javadoc/com/microsoft/azure/datalake/store/Core.html
幾點需要注意的特定於Azure的數據湖店實現併發追加的:
- 一旦文件被用於併發追加,則不能使用固定偏移附加與它
- 這是POSS您可能會在文件中看到重複的數據。這是錯誤模式和自動重試的可能副作用。
編輯:此外,Murray Foxcraft的答案適用於具有合理文件旋轉策略的長時間運行的線程。這種方法唯一的缺點是你不會得到大量的小文件。
相關問題
- 1. 如何將流數據保存到Azure數據湖?
- 2. azure數據湖授權
- 3. 如何將Azure數據湖存儲連接到Azure ML?
- 4. 寫入數據流到PostgreSQL
- 5. 如何從Azure的數據副本湖加快宇宙DB
- 6. 多線程在TinyXMl中寫入數據
- 7. Azure數據湖中的U-SQL遊標
- 8. Azure數據湖中的增量負載
- 9. Google的BigQuery與Azure數據湖U-SQL
- 10. 使用Azure的數據湖的分析
- 11. CreateJob for C#的Azure數據湖分析#
- 12. 更新在USQL Azure的數據湖
- 13. 從線程到任何子線程的環境數據流
- 14. 從多線程應用程序有效寫入數據庫
- 15. Azure數據湖外部數據源:行大小太大
- 16. 電力BI刷新數據源Azure數據湖
- 17. Azure數據湖與數據工廠定製活動的連接
- 18. Azure AppendBlob數據塊/寫入
- 19. 如何從外部應用程序寫入流星數據庫?
- 20. 如何將數據寫入到從angularjs
- 21. 從數據存儲流入數據流?
- 22. 我們能否使用Snappy-data更新Azure數據湖中的記錄? OR僅僅是Azure數據湖追加?
- 23. 通配符在數據工廠Azure的數據存儲湖輸入
- 24. 如何將流數據寫入S3?
- 25. 如何將流數據集寫入Cassandra?
- 26. 從多個線程將數據寫入sqlite的最佳方法
- 27. 多線程批量處理寫入和從數據庫
- 28. Azure Web Job從數據湖店下載的數據不好編碼
- 29. Boost :: ASIO多線程寫入過時數據到套接字?
- 30. 如何從數據處理程序寫入數據庫?
感謝您的指導和要點。我正在尋找過去兩週的答案。 – Dhinesh