MapReduce的NlineInputFormat

来源:互联网 发布:阿里双11实时数据 编辑:程序博客网 时间:2024/05/16 12:54

默认情况下在对输入文件进行拆分时,会按block块的大小分成多个InputSplit,InputSplit的数量取决于block的大小。每

个map进程处理一个InputSplit,InputSplit中有多少行记录就会调用多少次map函数。

如果使用NlineInputFormat,代表每个map进程处理的InputSplit不再按block块去划分,而是按NlineInputFormat指定的

行数N来划分。即,每个InputSplit中只有N行记录数。同样InputSplit中有多少行记录就会调用多少次map函数。

代码示例:

package com.bigdata.hadoop.mapred;import java.io.IOException;import java.net.URI;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.input.NLineInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;public class MyNLineInputFormatApp {private static final String INPUT_PATH = "hdfs://hadoop1:9000/dir1/hello";private static final String OUTPUT_PATH = "hdfs://hadoop1:9000/dir1/out";public static void main(String[] args) throws Exception {Configuration configuration = new Configuration();//方式一 设置每个InputSplit中划分三条记录configuration.setInt("mapreduce.input.lineinputformat.linespermap", 3);Job job = new Job(configuration,MyNLineInputFormatApp.class.getSimpleName());//方式二 设置每个InputSplit中划分三条记录//NLineInputFormat.setNumLinesPerSplit(job, 3);final FileSystem fileSystem = FileSystem.get(new URI(OUTPUT_PATH), configuration);fileSystem.delete(new Path(OUTPUT_PATH),true);//使用NLineInputFormat处理记录数job.setInputFormatClass(NLineInputFormat.class);job.setJarByClass(MyNLineInputFormatApp.class);FileInputFormat.setInputPaths(job, INPUT_PATH);job.setMapperClass(MyMapper.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(LongWritable.class);job.setReducerClass(MyReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(LongWritable.class);FileOutputFormat.setOutputPath(job, new Path(OUTPUT_PATH));job.waitForCompletion(true);}public static class MyMapper extends Mapper<LongWritable, Text, Text, LongWritable>{@Overrideprotected void map(LongWritable key, Text value,Mapper<LongWritable, Text, Text, LongWritable>.Context context)throws IOException, InterruptedException {final String line = value.toString();final String[] splited = line.split("\t");for (int i = 0; i < splited.length; i++) {context.write(new Text(splited[i]), new LongWritable(1));}}}public static class MyReducer extends Reducer<Text, LongWritable, Text, LongWritable>{@Overrideprotected void reduce(Text key, Iterable<LongWritable> values,Reducer<Text, LongWritable, Text, LongWritable>.Context context)throws IOException, InterruptedException {long count = 0l;for (LongWritable times : values) {count += times.get();}context.write(key, new LongWritable(count));}}}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 王卡40g用完了怎么办 父亲把母亲打成重伤怎么办 狗狗脖子摔歪了怎么办 吃鸡游戏中重伤怎么办 吃鸡游戏摔伤了怎么办 现在没能力偿还网贷怎么办 上海找夜场工作被骗了怎么办? 买了烂尾的楼盘怎么办 孕七个月蛀牙疼怎么办 宝宝只吃一边奶怎么办 实房付了定金后悔了怎么办 开车时遇到意外事故时怎么办 没干过影楼门市怎么办 uplay下载游戏速度0k怎么办 缓刑期间被别人打成轻伤怎么办 缓刑期间被别人打了怎么办 有缓刑被别人打怎么办 检察院不予立案怎么办公安局取保 监外执行过了又犯罪怎么办 监视居住期间再次犯罪怎么办 前妻有贷款跑了怎么办 未成年犯有缓刑罪继续犯罪怎么办 英朗出现检修esc怎么办 照相时奖状拿反了怎么办 wps文档加密后忘记密码怎么办 wps表格文件密码忘记了怎么办 wps表格密码忘记了怎么办 发布的文案缩成一行怎么办 创维电视都是VIP怎么办 挂电视距离太远怎么办 电视离沙发太近怎么办 苹果6更新11.1卡怎么办 苹果升级变卡了怎么办 迅雷被资源举报无法加速怎么办 迅雷的敏感资源无法加速怎么办 迅雷下载敏感资源无法加速怎么办 换手机微信账户怎么办 拉链拉不合没有蜡怎么办 长杆烟斗头松动怎么办? 大王卡没流量了怎么办 晚上电视想看野外生存怎么办