进行数据处理的时候我们经常会遇到这样的情况:一个数据集由一大堆很小的文件组成,这些小文件格式相同,可能是系统的日志文件或者产自传感器等终端。如下图:1234567个文件的总和才20GB左右。
处理这样的数据集给我们带来了如下的问题:
1) 当数据分散在这些大量的独立的小文件的时候,分析很困难。
2) 这些文件的总和超出了单机内存的容量,无法一次性全部载入,处理起来效率很低。
3) 使用分布式框架如hadoop虽然不用担心文件总大小的问题,但是单个文件又太小,HDFS中文件都是以block(64M)的形式存储,实际上HDFS主要是为了流式的访问大文件而设计的,处理大量小文件时候的效率非常低。
所以,我们能不能在单机上将这百万级数量的文件拼接成一个大文件后再处理?
使用linux操作系统的人想必对cat命令相当熟悉,cat命令可以将多个文件拼接成一个文件,这样,似乎一下子就可以解决文件数太多数据太分散的问题了。所以,我们很自然就有了如下的尝试:
$ cat * >> out.txt
然而,结果却并非如我们所愿,居然报错了!
<pre name="code" class="plain">-bash: /bin/cat: Argument lis