2013-01-17 63 views
0

我正在使用一個第三方服務,它聚合數據並公開REST API以訪問它。將數據從API加載到HBase

我正在嘗試獲取這些數據並將其加載到本地HBase羣集中。我創建了一個Java應用程序,用於從第三方服務中提取數據,使用HBase客戶端API對其進行處理並將其加載到我們的羣集中。對於這個應用程序,我必須手動運行它,也不知道有多少HBase客戶端API能夠有效地加載批量數據。

我遇到了Sqoop和Cascading-dbmigrate從RDBMS進行批量傳輸。我的問題是:是否有任何類似的工具從REST API進行批量數據傳輸?同樣,在一段時間內同步數據。

感謝 ArunDhaJ http://arundhaj.com

回答

3

REST API的不規範像RDBMS,據我所知,沒有任何工具,可以神奇地從API到HBase的加載,你必須圍繞構建了一點東西。對於這種大量加載HBase的情況,一個好的做法是使用HBase批量加載,與僅使用HBase API相比,HBase會佔用更少的CPU和網絡資源。這可以通過幾個步驟來完成:

  1. 與地圖準備數據/使用HFileOutputFormat作爲OutputFormat減少工作。這可以確保您的作業輸出被編寫爲HFiles,這是一種非常有效的格式,可以加載到HBase中。你可以做這樣的:

    job.setOutputFormatClass(HFileOutputFormat.class); 
    HFileOutputFormat.setOutputPath(job, path); 
    
  2. 負載使用命令行工具completebulkload這需要照料一切,所以你甚至不需要擔心該地區的服務器上的數據。這可以手動完成這樣的:

    hadoop jar hbase-VERSION.jar completebulkload [-c /path/to/hbase/config/hbase-site.xml] /user/todd/myoutput mytable 
    

    我相信,如果你使用HFileOutputFormat所以你可能甚至不需要自己做這一步這一步會自動運行。

的過程here

你需要做的一切都綁在一起簡直就是寫一個程序,將從您的API,並加載到HDFS中獲取數據什麼的更多細節。

+0

爲了好奇,那麼人們如何設法將Facebook數據(或任何類似的服務,如twitter,reddit)放在羣集上並對數據進行分析?因爲這些服務也只公開API。 – ArunDhaJ

+0

尤其不瞭解Facebook,但在使用外部數據源時,設計ETL過程以提取此數據並將其加載到羣集中,然後根據需要執行任何操作都是非常標準的。我一直在與許多不同的消息來源一起工作,雖然有時候獲取可能是瓶頸,但它仍然是一個必要的步驟。 –