2015-07-06 33 views
0

我正在嘗試更改應用程序中處理的方法數據。數據首先從數據庫接收並存儲在消息隊列中。我希望數據直接放在hdfs中。我不希望數據寫入文件並轉移到hdfs。我將從HDFS處理數據並將結果導入hdfs。我可以從Java程序寫入數據到HDFS嗎?而不是給hdfs複製命令?將數據存儲在hdfs而不是消息隊列中

回答

0

有幾個原因說明你的方法不可取。

  1. 將每個消息寫入hdfs將是一個代價高昂的操作。

  2. 你不能直接寫消息給hdfs,它必須首先寫入文件,並且需要放入hdfs。

  3. 方法2會在hdfs中產生很多小文件,增加名稱節點的負擔來跟蹤每個文件塊。

我會建議,爲消息隊列設置一個閾值,達到該閾值後,將所有消息移動到文件,然後移動到hdfs。

0

根據您當前的設置,您有幾個選項。

  1. Sqoop - http://sqoop.apache.org/ - 適用於批量結構化數據存儲(關係數據庫)和HDFS之間傳送。不知道更多關於你的設置,這可能會或可能不適合你。
  2. Apache Spark - https://spark.apache.org/ - 可以從多種來源讀取,包括ZeroMQ,Kafka,HDFS等。它還支持自定義輸入(來源)。您也許可以從隊列中以流方式處理所需的數據,並直接輸出到HDFS。再次,這取決於你的設置。
  3. Apache Kafka/MapReduce - http://kafka.apache.org/ - 這可能不是一個選項,但使用Apache Kafka作爲'隊列'可以讓你運行MapReduce,直接輸出到HDFS。
  4. WebHDFS/HTTPfs - https://hadoop.apache.org/docs/r1.0.4/webhdfs.html - HDFS的REST接口。您可以將從數據庫中提取的任何內容與POST數據直接結合到HDFS。這確實有一些警告,但我不會不謹慎地推薦它。

選項2和3似乎並不完全符合您的要求,但可能是妥協。

相關問題