我正在研究Java程序中可以根据以下要求将文件写入HDFS的选项。
1)事务支持:每个文件在写入时,要么成功完全写入,要么完全失败,不会写入任何部分文件块。
2)压缩支持/文件格式:可以在编写内容时指定压缩类型或文件格式。
我知道如何通过打开显示here的FSDataOutputStream
将数据写入HDFS上的文件。只是想知道是否有一些开箱即用的解决方案库提供了我上面提到的支持。
我偶然发现了Flume,它提供了可以支持事务,压缩,文件轮换等的HDFS接收器。但它似乎没有提供用作库的API。 Flume提供的功能与Flume架构组件(如源,通道和接收器)高度耦合,似乎不能单独使用。我只需要在HDFS加载部分。
有没有人有一些好的建议?
答案 0 :(得分:0)
我认为使用Flume作为HDFS的“门户”将是一个很好的解决方案。您的程序将数据发送到Flume(使用其sources提供的接口之一),Flume写入HDFS。
这样您就不需要支持一堆自定义代码来与HDFS交互。另一方面,您需要安装和配置Flume,但根据我的经验,它更容易(请参阅this comment了解安装建议)。
最后,Flume HDFS接收器是开源组件,因此您可以根据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