文档章节

2-Hadoop学习之旅-MapReduce

crayzer_yixiu
 crayzer_yixiu
发布于 2016/09/10 23:42
字数 663
阅读 119
收藏 8

MapReduce设计理念

  • 移动计算,而不是移动数据。

MapReduce之Helloworld(Word Count)处理过程

输入图片说明

MapReduce的Split大小 - max.split(200M) - min.split(50M) - block(128M) - max(min.split,min(max.split,block))=128M

Mapper

  • Map-reducede 的 思想就是“分而治之”
    • Mapper负责“分”,即把发杂的任务分解为若干个“简单的任务”执行
  • “简单的任务”有几个含义:
    • 数据或计算规模相对于原任务要大大缩小;
    • 就近计算,即会被分配到存放了所需数据的节点进行计算;
    • 这些小任务可以并行计算,彼此间几乎没有依赖关系。

输入图片说明

Reduce

  • 对map阶段的结果进行汇总;
  • reducer的数目由mapred-site.xml配置文件里的项目mapred.reduce.tasks决定。缺省值为1,用户可以覆盖(一般在程序中调整,不修改xml默认值)

输入图片说明

shuffler(最为复杂的一个环节)

  • 参考:MapReduce:详解Shuffle过程
  • 在mapper和reduce中间的一个步骤
  • 可以把mapper的输出按照某种key值重新切分和组合成N份,把key值符合某种范围的组输送到特定的reduce那里去处理
  • 可以简化reduce过程

输入图片说明

附:Helloworld之WordCount

//WCJob.java

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
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.output.FileOutputFormat;
import org.apache.hadoop.util.StringUtils;

/**
 * MapReduce_Helloworld程序
 *
 * WCJob
 * @since V1.0.0
 * Created by SET on 2016-09-11 11:35:15
 * @see
 */
public class WCJob {
    public static void main(String[] args) throws Exception {
        Configuration config = new Configuration();
        config.set("fs.defaultFS", "hdfs://master:8020");
        config.set("yarn-resourcemanager.hostname", "slave2");

        FileSystem fs = FileSystem.newInstance(config);

        Job job = new Job(config);

        job.setJobName("word count");

        job.setJarByClass(WCJob.class);

        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        job.setMapperClass(WCMapper.class);
        job.setReducerClass(WCReducer.class);
        
        job.setCombinerClass(WCReducer.class);

        FileInputFormat.addInputPath(job, new Path("/user/wc/wc"));
        Path outputpath = new Path("/user/wc/output");
        if(fs.exists(outputpath)) {
            fs.delete(outputpath, true);
        }
        FileOutputFormat.setOutputPath(job, outputpath);


        boolean flag = job.waitForCompletion(true);
        if(flag) {
            System.out.println("Job success@!");
        }
    }

    private static class WCMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
        @Override
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            /**
             * 格式:hadoop hello world
             * map 拿到每一行数据 切分
            */
            String[] strs = StringUtils.split(value.toString(), ' ');
            for(String word : strs) {
                context.write(new Text(word), new IntWritable(1));
            }
        }
    }

    private static class WCReducer extends Reducer<Text, IntWritable, Text, IntWritable> {

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

            for(IntWritable intWritable : values) {
                sum += intWritable.get();
            }
            context.write(new Text(key), new IntWritable(sum));
        }
    }
}

© 著作权归作者所有

crayzer_yixiu
粉丝 26
博文 57
码字总数 87921
作品 0
杭州
高级程序员
私信 提问
加载中

评论(1)

分布式
分布式
mark
Hadoop实战之 MapReduce

私塾在线 整体课程概览 第一部分:开始云计算之旅 第二部分:初识Hadoop 第三部分:Hadoop 环境安装部署 第四部分:Hadoop Shell 基本操作介绍 第五部分:Hadoop 分布式文件系统1 第五部分:...

linni
2014/01/08
738
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的简单用法

 Mapreduce初析   Mapreduce是一个计算框架,既然是做计算的框架,那么表现形式就是有个输入(input),mapreduce操作这个输入(input),通过本身定义好的计算模型,得到一个输出(outpu...

魔法王者安琪拉
2018/08/23
32
0
MapReduce和Spark的区别

性能: Spark是在内存中处理数据的,而MapReduce是通过map和reduce操作在磁盘中处理数据,所以正常情况下Spark的处理速度会比mapreduce快。但是当数据量大,不能一次性加载到内存的时候,Spa...

无精疯
04/15
106
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么Netty的FastThreadLocal速度快

前言 最近在看netty源码的时候发现了一个叫FastThreadLocal的类,jdk本身自带了ThreadLocal类,所以可以大致想到此类比jdk自带的类速度更快,主要快在什么地方,以及为什么速度更快,下面做一...

ksfzhaohui
11分钟前
2
0
资治通鉴解析:无论什么条件,要挟权力做出承诺,都会被清算

电影《满城尽带黄金甲》里有句经典的名言“朕赐给你的,才是你的。朕不给你的,你不能抢。”之所以这段话有名,核心的就是,它揭示了这样一个权力心思:无论什么情况,权力的行使,都不愿意受...

太空堡垒185
15分钟前
1
0
CSS技巧之向下箭头

本文转载于:专业的前端网站➫CSS技巧之向下箭头 思路: 使用◇符号(可在输入法的软键盘找到该符号),使用定位选择位置,并隐藏溢出的上半部分 细点: 1.使用i标签的楷体属性把◇变大 2.给i...

前端老手
32分钟前
1
0
SpringCloud alibaba微服务之NACOS多环境配置整合

前言 伴随着spring cloud alibaba 登上主板以后,我就去了解下感觉还是蛮不错的。说实话第一次看见Nacos好长一段时间连读法都不知道...(/nɑ:kəʊs/)。按照官方的话说Nacos是:一个更易于...

攻城狮-飞牛
34分钟前
2
0
tcpdump

tcpdump -A -s0 port 21011 -i any (1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型 (2)-i eth1 : 只抓经过接口eth1的包 (3)-t : 不显...

mskk
39分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部