我在應用程序中有一個場景;長時間運行ETL過程 - 後臺作業,Spark,Hadoop
- 必須加載多個來源的數據(超過10個)
- 晴來源是HTTP/JSON Web服務和一些FTP
- 必須處理這些數據,並把到一箇中央數據庫(PostgreSQL系統)
當前實現是在Ruby中使用後臺作業完成的。但我看到以下問題;
- 非常高的內存使用情況
- 喬布斯有時會卡住沒有任何錯誤報告
- 水平擴展是棘手的設置
不會在這種情況下,任何方式Spark或Hadoop的幫助或更好選項。
請詳細說明一下好的推理。
更新: 根據評論,我需要進一步闡述它。以下是我爲什麼認爲Spark或Hadoop的要點。
- 如果我們擴展運行作業的併發性,那也會增加數據庫服務器的負擔。我曾讀過,即使在數據庫方面,Spark和Hadoop也面臨如此沉重的負載。
- 我們不能運行更多的後臺進程,然後CPU的物理內核(由ruby和sidekiq社區推薦)
- Ruby中的併發實際上依賴於GIL,實際上並不支持實際的併發。因此,每個作業都可以獲取單箇中央數據源,如果該數據源陷入IO調用中,則源將被鎖定。
以上所有內容均被認爲是Hadoop內置體系結構的一部分& Spark。所以我在考慮採用這些工具。
這是一個奇怪的問題。我在一個使用Ruby,Spark和Hadoop的地方工作,我可以告訴你他們在架構上不可以這樣互換。無論基於hadoop的解決方案是否總體上適合您的情況,您提到的問題都可以通過適當架構的Ruby系統來解決。提供更多關於它架構如何和人們可以幫助你的細節。 –
@MarkThomas你基於應用場景的主要觀點來對待這個問題。讓我編輯這個問題來添加更多的想法。 –
您可能需要使用resque-retry插件嘗試Resque。如果他們是小型工作,您可能還需要resque-multi-job-forks插件。 (如果真的需要,可以使用resque-kubernetes進行縮放) –