Hadoop之MapReduce框架的处理过程以及实现集群运行的三种方式

本文介绍了Hadoop MapReduce框架如何简化Key-Value任务的分布式运行,通过词频统计示例解释Map和Reduce阶段的工作原理,并详细阐述在集群上运行MapReduce作业的三种方式:Linux提交至Yarn、本地模拟运行和Eclipse直接运行。
摘要由CSDN通过智能技术生成

1.在没有使用MapReduce框架之前,想要在集群上分布式运行Key-Value等任务的时候,代码特别冗余,会进行不断地连接、在HDFS上读取数据,特别不方便,所以MapReduce框架就将这些准备工作替我们做了

2.结合经典的词频统计代码说一下自己理解的Map(看详细注释)
Map就是由框架读出来数据,根据你自己的需求去处理数据,不用管有几个虚拟机给你运行等一系列不必要的代码,只需要简单的配置一下,直接写出你的核心代码就OK

// KEYIN :是map task读取到的数据的key的类型,是一行的起始偏移量Long
 * VALUEIN:是map task读取到的数据的value的类型,是一行的内容String
 * 
 * KEYOUT:是用户的自定义map方法要返回的结果kv数据的key的类型,在wordcount逻辑中,我们需要返回的是单词String
 * VALUEOUT:是用户的自定义map方法要返回的结果kv数据的value的类型,在wordcount逻辑中,我们需要返回的是整数Integer
 * 
 * 
 * 但是,在mapreduce中,map产生的数据需要传输给reduce,需要进行序列化和反序列化,而jdk中的原生序列化机制产生的数据量比较冗余,就会导致数据在mapreduce运行过程中传输效率低下
 * 所以,hadoop专门设计了自己的序列化机制,那么,mapreduce中传输的数据类型就必须实现hadoop自己的序列化接口
 * 
 * hadoop为jdk中的常用基本类型Long String Integer Float等数据类型封住了自己的实现了hadoop序列化接口的类型:LongWritable,Text,IntWritable,FloatWritable
 * 
 * 
public class WordcountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
   
    @Override
    protected void map(LongWritable key, Text value, Context context)
            throws IOException, InterruptedException {

        String string = value.toString();
        String[] words = string.split(" ");//value是读的每一行的数据,利用数据去处理自己想要的结果,我这个呢就是分离出来的每一个词赋值为1
        for (String word : words) {

            context.write(new Text(word), new IntWritable(1));
        }
    }

}

3.Reduce

Reduce当然也是省略掉一系列不必要的操作,将Map传过来的数据直接根据自己的需求处理就好

//四个参数为Map传下来的key和value
           Reduce传出去的key和value
     public class WordcountReducer extends
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值