2013-04-29 46 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