哪种方法最容易组合小的hdfs块?

nle07wnf  于 2021-06-04  发布在  Flume
关注(0)|答案(3)|浏览(511)

我正在用Flume收集日志到hdfs。对于这个测试用例,我有一些小文件(~300kb),因为日志收集过程是按实际用途进行缩放的。
有没有简单的方法将这些小文件合并成更大的文件,这些文件的大小接近hdfs块大小(64mb)?

ccrfmcuu

ccrfmcuu1#

gnu-coreutils-split可以完成这项工作。
如果源数据是行—在我的例子中是—并且一行在周围 84 bytes ,然后是hdfs块 64MB 可能包含在 800000 线:

hadoop dfs -cat /sourcedir/* | split --lines=800000 - joined_
hadoop dfs -copyFromLocal ./joined_* /destdir/

或与 --line-bytes 选项:

hadoop dfs -cat /sourcedir/* | split --line-bytes=67108864 - joined_
hadoop dfs -copyFromLocal ./joined_* /destdir/
4bbkushb

4bbkushb2#

你应该看看media6degrees开源的文件破碎机。它可能有点过时,但您可以下载源代码并进行更改和/或贡献。jar和源位于:http://www.jointhegrid.com/hadoop_filecrush/index.jsp
这本质上是一种用于合并小文件的map-reduce技术。

bvn4nwqk

bvn4nwqk3#

我目前的解决方案是编写一个mapreduce作业,它实际上什么也不做,同时拥有数量有限的reducer。每个reducer都输出一个文件,因此将它们合并在一起。您可以在每行中添加原始文件的名称,以帮助显示文件的来源。
我仍然有兴趣听到,如果有一个标准或证明是最好的方式做这件事,我不知道。

相关问题