处理海量小文件——本地文件读成sequenceFile文件

当处理海量小文件时,先将小文件进行sequenceFile操作或者类似操作处理,然后再上传到HDFS系统进行下一步的处理。(如有其它建议,欢迎留言)

一、直接上传本地栅格数据将导致的问题
HDFS在存储文件时,会将文件break them into chunks,默认inputSplit的大小与block块的大小一致,为128M,如果单个文件的大小小于block块的大小则不会切分,直接将改小文件存储到一个block块中。因此如果不对栅格数据文件做处理,将导致占据大量的block块;由于namenode中会存储为元数据信息,因此也将导致namenode节点记录大量小文件的位置等元数据信息而产生压力过大,甚至namenode节点的内存可能会被占满。
二、在本地将栅格数据处理成sequenceFile文件
SequenceFile文件是Hadoop用来存储二进制形式的key-value对而设计的一种平面文件。通常对小文件的处理是使用sequenceFile文件或MapFile文件。此次选用的处理方式是使用SequenceFile文件。(MapFile文件由两部分组成,data和index,index作为文件的索引,存储每个Record的key值以及它的偏移量。mapFile文件的检索效率较sequenceFile文件高,但是访问mapFile文件时需要先将索引文件加载到内存)
由于sequenceFile文件由Key和value组成,此处的key值存放的为文件的路径,例如:file:/home/greatmap/World/6/109/48.jpeg;value的值存放的为图片的字节数组文件。栅格数据存放在的文件夹下,通过遍历文件夹,将所有的图片都写成一个sequenceFile文件。

下面是具体实现过程:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值