2015-11-11 47 views
2

我們計劃使用REST API調用從端點接收數據並將數據存儲到HDFS。 REST調用以定期方式完成(每天或每小時)。建議基於Hadoop的設計/組件用於接收定期REST API調用

我已經使用Flume完成了Twitter的攝取,但我並不認爲使用Flume會適合我目前的用例,因爲我沒有在Twitter中使用像這樣的連續數據流水,而是使用離散的常規時間 - 綁定調用。

我現在的想法是使用自定義Java來處理REST API調用並保存到HDFS,然後在該Java jar上使用Oozie協調器。

我想聽聽有關設計和基於Hadoop的組件的建議/替代方案(如果比我現在想的更容易)。如果你覺得我可以堅持Flume,那麼請給我一個想法如何做到這一點。

回答

2

正如在Apache水槽幅指出:

Apache的水槽是用於有效地收集,聚集和來自許多不同來源移動大量的日誌數據到集中式數據存儲的分佈式的,可靠的,並且可用的系統。

正如您所看到的,歸因於Flume的功能之一是數據收集。由於HttpSource,AvroSurce,ThriftSource等等,「推動式或類似於發射式」的數據源很容易整合。在您的情況下,必須讓數據從基於http的服務「主動拉動」,集成是不是那麼明顯,但可以做到。例如,通過使用ExecSource,它運行腳本獲取數據並將其推送到Flume代理。

如果您使用專有代碼負責提取數據並將其寫入HDFS,那麼這樣的設計就可以,但是您會錯過一些有趣的內置Flume特性(這可能需要通過你自己):

  • 可靠性。 Flume有機制確保數據真正在最終存儲中保留,重試直到被有效寫入。這是通過使用內部通道在輸入端緩存數據(引入負載峯值)和輸出(保留數據直到它被有效保留)以及交易概念來實現的。
  • 表現。事務的使用和配置多個並行接收器(數據處理器)的可能性將使您的部署能夠處理每秒生成的大量數據。
  • 可用性。通過使用Flume,您不需要處理存儲細節(例如HDFS API)。即使如果您決定更改最終存儲的某一天,您只需重新配置Flume代理以使用新的相關接收器即可。