1)Hadoop之MapReduce(概述)

概述
  • MapReduce的定义:

    • MapReduce是一个分布式运算程序的编程框架
    • MapReduce的核心功能是将用户编写的代码和其自带的组件整合成完整的分布式运算程序,并 行运算在Hadoop集群上
  • MapReduce的优缺点

    • 优点:
      ①易于编程
      ②良好的扩展性
      ③容错性高:若有一个节点挂了,可以将运算任务转移到另一个节点,不至于任务运行失败
      ④时候PB级以上的大数据的离线处理
    • 缺点:
      ①不擅长实时计算
      ②不擅长流式计算:其数据源是静态的
      ③不擅长DAG(有向图)计算:每个MapReduce作业的结果都要写入磁盘,会造成大量的磁盘 IO,导致性能低下
  • MapReduce编程核心编程思想 (如图)

  • MapReduce进程
    一个完整的MapReduce程序在并行运行时由三类实例进程:

    • MrAppMaster:负责整个程序的过程调度和状态协调
    • MapMask:负责整个Map阶段的整据流程处理
    • ReduceMask:负责整个Reduce阶段的数据流程处理
  • MapReduce编程规范

    • map()方法(MapTask进程)对每个<k,v>调用一次
    • ReduceMask进程对每一组相同的k 的<k,v>只调用一次reduce()方法
    • Driver类相当于客户端,用于提交整个程序到yarn集群,提交的是封装有整个程序相关运行参数的job对象
  • WordCount案例

public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    Text k = new Text();
    IntWritable v = new IntWritable(1);

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        String line = value.toString();
        String[] words = line.split(" ");

        for (int i = 0; i < words.length; i++) {

            k.set(words[i]);
            context.write(k, v);
        }
    }
}
public class WordCountReducer extends Reducer<Text,IntWritable,Text,IntWritable> {
    int sum= 0;
    IntWritable value = new IntWritable();

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {

        for (IntWritable count : values) {
            sum+=count.get();
        }
        value.set(sum);
        context.write(key,value);
    }
}
public class WordCountDriver {

    public static void main(String[] args) throws Exception {
        //获取配置文件和封装任务
        Configuration con = new Configuration();
        Job job = Job.getInstance(con);

        //设置jar加载路径
        job.setJarByClass(WordCountDriver.class);

        //设置map、reduce类
        job.setMapperClass(WordCountMapper.class);
        job.setReducerClass(WordCountReducer.class);

        //设置map输出
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        //设置最终输出KV类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        //设置输入输出路径
        FileInputFormat.setInputPaths(job,new Path(args[0]));
        FileOutputFormat.setOutputPath(job,new Path(args[1]));

        //提交
        boolean res = job.waitForCompletion(true);

    }
}
  • 在hadoop集群上运行程序:
    • 启动hadoop集群
    • hadoop jar mapreduce-1.0-SNAPSHOT.jar mr_date0925.WordCountDriver /user/zy/input /user/zy/output
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值