2013-04-29 79 views
1

我在查看可以將文件寫入HDFS的Java程序中的選項,並滿足以下要求。以編程方式將文件寫入HDFS

1)事務處理支持:每個文件在寫入時,完全寫入成功或失敗,完全沒有寫入任何部分文件塊。

2)壓縮支持/文件格式:可以在編寫內容時指定壓縮類型或文件格式。

我知道如何通過打開顯示爲hereFSDataOutputStream將數據寫入HDFS上的文件。想知道是否有一些開箱即用的解決方案庫提供了我在上面提到的支持。

我偶然發現了Flume,它提供了可以支持事務,壓縮,文件旋轉等的HDFS接收器。但它似乎沒有提供用作庫的API。 Flume提供的功能與Flume架構組件(如源,通道和接收器)高度耦合,似乎不能獨立使用。我只需要在HDFS加載部分。

有沒有人有一些很好的建議?

回答

0

我認爲使用Flume作爲HDFS的「網關」是很好的解決方案。您的程序將數據發送給Flume(使用sources提供的接口之一),Flume寫入HDFS。

這樣你就不需要支持一堆與HDFS交互的自定義​​代碼。另一方面,您需要安裝並配置Flume,但根據我的經驗,它更容易(有關安裝建議,請參閱this comment)。

最後,Flume HDFS sink是開源組件,因此您可以根據Apache許可條款自由重用其代碼。在這裏獲取源代碼:https://git-wip-us.apache.org/repos/asf?p=flume.git;a=tree;f=flume-ng-sinks/flume-hdfs-sink;h=b9414a2ebc976240005895e3eafe37b12fad4716;hb=trunk