文档章节

学习MapReduce(一)

静下来想想静静
 静下来想想静静
发布于 2017/03/09 17:40
字数 669
阅读 10
收藏 0

2017.3.9号,学习进度来到了MapReduce。通过查看文档,观看视频,说说自己对MapReduce的理解。

1.概念:

    MapReduce是Hadoop的计算框架。它和HDFS一样,都是Hadoop中不可缺少的一部分。它分为两个阶段,一个Map阶段,一个Reduce阶段。这两个阶段都是以键值对形式来进行参数传入的。

2.运行机制:

    一个数据文件按照需求,切割成数块,放在HDFS上。当一个客户端启动一个MapReduce的jar包时,ResouceManager会根据需求启动相应的MRappMaster,MRappMaster会根据MRjar包的设定启动一定数量的MRappTask先来执行map()方法,得到一堆经过处理的K,V结果,这些结果会在shuffle中进行重新洗牌,将一样的key的 K,V结果放入同一个结果集中,(当然shuffle也有别的用途),map()方法结束后,你会得到一堆不同的结果集,而这些结果集的每个结果集中的key都一样,只是value不同。这时,进入Reduce阶段,Reduce阶段将以每个结果集为输入进行计算。最终得到一个业务需求的结果。最后,这个结果会汇总在一起,放入HDFS上。

3.代码阶段:

写一个wordcount的代码。

一个mapreduce的jar包,需要写一个Mapper的子类,一个Reducer的子类和一个Driver类:

Mapper子类:
public class MapReduceMapper extends Mapper<LongWritable, Text, Text, LongWritable> {
    /**
     * 重写map方法 ,实现自己想要完成的内容
     */
    @Override
    protected void map(LongWritable key, Text value,Context context)
            throws IOException, InterruptedException {
        //将整个Text转化为一个String对象
        String line = value.toString();
        //通过hadoop的StringUtils包来对String进行切片
        String[] words =StringUtils.split(line,' ');
        //遍历
        for (String str : words) {
            context.write(new Text(str),new LongWritable(1));
        }
    }
}

Reducer子类:

public class MRreducer extends Reducer<Text, LongWritable, Text, LongWritable> {

    @Override
    protected void reduce(Text key, Iterable<LongWritable> values,Context context)
            throws IOException, InterruptedException {
        
        long count =  0;
        
        for (LongWritable value : values) {
            //因为我们要实现key的个数累加,所以我们使用计数器便利values,得到总数
            count += value.get();
        }
        
        context.write(key, new LongWritable(count));
    }
}

Diver类:

public class MapReduceRun {
        
    
    public static void main(String[] args) throws Exception {
        //获得job实例
        Configuration conf = new Configuration();
        
        Job job = Job.getInstance(conf);
        //在运行之前,需要将jar包所在地给hadoop
        job.setJarByClass(MapReduceRun.class);
        
        job.setMapperClass(MapReduceMapper.class);
        job.setReducerClass(MRreducer.class);
        //通过job实例来实现得到自己写的map类中得到的K,V
        job.setMapOutputKeyClass(LongWritable.class);
        job.setMapOutputValueClass(Text.class);
        //通过job来得到自己写的reduce类中的K,V
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);
        //通过FileInputFormat和FileOutputFormat来指定原始文档和输出文档所在地
        FileInputFormat.setInputPaths(job,new Path("hdfs://xxx:port"+args[0]));//指定在hdfs上的输入文件
        FileOutputFormat.setOutputPath(job,new Path("hdfs://xxx:port"+args[1]));//制定在hdfs上的输出目录    
        
        job.waitForCompletion(true);
    }
}

© 著作权归作者所有

静下来想想静静
粉丝 2
博文 14
码字总数 12348
作品 0
焦作
私信 提问
大数据经典学习路线(及供参考)之 一

1.Linux基础和分布式集群技术 学完此阶段可掌握的核心能力: 熟练使用Linux,熟练安装Linux上的软件,了解熟悉负载均衡、高可靠等集群相关概念,搭建互联网高并发、高可靠的服务架构; 学完此...

柯西带你学编程
2018/05/22
0
0
大数据MapReduce 编程实战

MapReduce 编程实战 一、大数据的起源 1、举例:(1)商品推荐 问题1:大量订单如何存储? 问题2:大量订单如何计算? (2)天气预报: 问题1:大量的天气数据如何存储? 问题2:大量的天气数...

我叫大兄弟
2018/05/06
0
0
大数据(hadoop-Mapreduce原理架构)

课程目标: 1:MapReduce的应用场景 2:MapReduce编程模型 3:MapReduce的架构 4:常见MapReduce应用场景 5:总结 MapReduce的定义 源自于Google的MapReduce论文 发表于2004年12月 Hadoop M...

这很耳东先生
04/30
27
0
MapReduce: 一个巨大的倒退

前言 databasecolumn 的数据库大牛们(其中包括PostgreSQL的最初伯克利领导:Michael Stonebraker)最近写了一篇评论当前如日中天的MapReduce技术的文章,引发剧烈的讨论。我抽空在这儿翻译一...

ddatsh
2011/11/04
4.5K
7
【hadoop】16.MapReduce-简介

简介 本章节我们先来了解一些关于MapReduce的理论知识。从本章节您可以学习到:MapReduce的相关知识。 1、概念 Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析...

Areya
01/12
19
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周五乱弹 ——不知道假装开心,装的像么

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :天黑了 你很忧愁, 你说世界上, 找不到四块五的妞, 行走在凌晨两点的马路上, 你疲倦地拿着半盒黄鹤楼。#今日歌曲推荐# 《四块...

小小编辑
今天
2.2K
16
64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
昨天
69
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
昨天
33
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
昨天
119
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部