MapReduce将小文件合并成大文件,并设置每个切片的大小的案例
生活随笔
收集整理的這篇文章主要介紹了
MapReduce将小文件合并成大文件,并设置每个切片的大小的案例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
測試代碼:
package cn.toto.bigdata.combinefile;import java.io.IOException;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.lib.input.CombineTextInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;/*** 當遇到小文件處理時,每個文件會被當成一個split,那么資源消耗非常大,hadoop支持將小文件合并后當成一個切片處理。(默認)*/ public class SmallFileCombiner {static class SmallFileCombinerMapper extends Mapper<LongWritable, Text, Text, NullWritable>{NullWritable v = NullWritable.get();@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//通過這種方式相當于是直接把值打印到磁盤文件中。value其實就是每一樣的的文件內容context.write(value, v);}}/*** 如果生產環境中,小文件的數量太多,那么累計起來的數量也是很龐大的,那么這時候就要設置切片的大小了。* * 即使用:CombineTextInputFormat.setMaxInputSplitSize(job, 1024*1024*150);*/public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf);job.setJarByClass(SmallFileCombiner.class);job.setMapperClass(SmallFileCombinerMapper.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(NullWritable.class);//下面的方式將小文件劃分為一個切片。job.setInputFormatClass(CombineTextInputFormat.class);//如果小文件的總和為224M,將setMaxInputSplitSize中的第二個參數設置成300M的時候,在//E:\wordcount\output下只會生成一個part-m-00000這種文件//如果將setMaxInputSplitSize中的第二個參數設置成150M的時候,在//E:\wordcount\output下會生成part-m-00000 和 part-m-00001 兩個文件CombineTextInputFormat.setMaxInputSplitSize(job, 1024*1024*150);CombineTextInputFormat.setInputPaths(job, new Path("e:/wordcount/input/"));FileOutputFormat.setOutputPath(job, new Path("e:/wordcount/output/"));job.setNumReduceTasks(0);job.waitForCompletion(true);} }準備數據:
在E:\wordcount\input目錄下準備小文件(總大小為224M),如:
其中文件內容類似:
執行完成程序之后,進入E:\wordcount\output查看內容:
其中part-m-00000的內容如下:
總結
以上是生活随笔為你收集整理的MapReduce将小文件合并成大文件,并设置每个切片的大小的案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过MapReduce统计每个单子在每个
- 下一篇: win7怎么减少右键菜单 Win7如何简