`
zc985552943
  • 浏览: 291105 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Babe4ca6-5e6f-33aa-9078-762ee3ccfb7e
云计算--hadoop
浏览量:11874
5e98c2c1-2a82-3388-bc80-7fca0170bb12
redis解说
浏览量:27156
088014c7-4d3f-39ce-b72e-4ebe7046a134
MongoDB读书笔记
浏览量:16019
D2b74847-c860-3e26-96fe-3fa4498d6348
Maven读书笔记
浏览量:27245
688db20f-402d-3a1d-8188-d6153d6c7465
Java通信
浏览量:13682
社区版块
存档分类
最新评论

005_hadoop中MapReduce详解_2

阅读更多

前面介绍了的MapReduce的入门。利用了一个hadoop自带的例子来说明MapReduce的流程。现在我们自己动手写一个小例子来锻炼一下。

问题描述:现在有一个文件,文件内容如下:

黄晓明 89

刘杰 48

黄晓明 78

郑爽 90

……

求学生的平均成绩?

分析:

1.在Map阶段我们的输入可以每行读取,生成类似<行号,行内容>即:

<1,黄晓明 89>

<2,刘杰 48>

<3,黄晓明 78>

等等。

2.然后这些记录进入Map函数。我们要充分利用Map--->洗牌--->Reduce这中间的洗牌操作。将Key相同的放在一起。Value变成一个List

3.构建Map的输出(即Reduce的输入)

<黄晓明,89>

<刘杰,48>

<黄晓明,78>

等等。

4.遍历相同Key的Value值,进行累加,求得总分数,然后除以科目总数,这样就得到最后结果

代码实现:

//继承Mapper,重新Map方法
	public static class MyMap extends Mapper<LongWritable, Text, Text, IntWritable>{
		@Override
		protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
			String line = value.toString();
			System.out.println(line);
			String [] arr = line.split(" ");
			Text name = new Text(arr[0]);
			String score = arr[1];
			IntWritable s = new IntWritable(Integer.parseInt(score));
			context.write(name, s);
		}
	}

Mapper处理的数据是由InputFormat分解过的数据集,其中InputFormat的作用是将数据集切割成小的InputSplit,每个InputSplit都由一个Map去处理。

//继承Reducer,重写reduce方法
	public static class MyReduce extends Reducer<Text, IntWritable, Text, IntWritable>{
		@Override
		protected void reduce(Text arg0, Iterable<IntWritable> arg1, Context arg2) throws IOException, InterruptedException {
			int sum = 0 ;
			int count = 0 ;
			Iterator<IntWritable> it = arg1.iterator();
			while(it.hasNext()){
				sum += it.next().get();
				count ++;
			}
			int ave = (int)sum/count;
			arg2.write(arg0, new IntWritable(ave));
		}
	}

 测试程序

public static void main(String[] args) throws Exception {
		Configuration conf = new Configuration();
	    
	    Job job = new Job(conf, "average");
	    job.setJarByClass(TestMR.class);
	    job.setMapperClass(MyMap.class);
	    job.setCombinerClass(MyReduce.class);
	    job.setReducerClass(MyReduce.class);
	    job.setOutputKeyClass(Text.class);
	    job.setOutputValueClass(IntWritable.class);
	    FileInputFormat.addInputPath(job, new Path("/user/text.txt")); //Map的输入
	    FileOutputFormat.setOutputPath(job, new Path("/user/helloMR/success"));//Reduce的输出
	    System.exit(job.waitForCompletion(true) ? 0 : 1);
	}

 源码我已经上传了

是不是非常简单的一个例子

在开发上面代码时,分别覆盖了Mapper里面的map方法和Reducer里面的reduce方法。我们还发现有其他方法可以覆盖



 

 既然看到了,就简单说一下其他的三个方法:

1.setup:setup函数是在task启动开始就调用

2.cleanup:cleanup函数是在task销毁之前执行

3.run:run函数是Map类或者Reduce类的启动方法:先调用setup函数,然后针对每个key调用一次Map或者Reduce,最后在销毁前执行一次cleanup函数

性能调优

性能方面入手无非就是两个方面:时间;空间

尽量最快执行;尽量用最少的空间

调优可从以下几个方面入手:

A.输入采用大文件

hadoop习惯处理大文件,讨厌小文件。所以在输入时尽量采用少量的大文件,避免使用大量的小文件。

B.压缩文件

对Map处理的结果进行压缩,即可减少空间的存储,又可以减少在网络中的数据传输

C.过滤数据

在处理Map前先对数据进行过滤,例如:一个表巨大,一个表比较小。当两个表做等值连接时,是不是应该采用小表里面的数据来对比大表里面数据。在这里有个Bloom Filte。大家可以自己去学习

D.调整作业属性

调整Map函数的个数和Reduce函数的个数,达到最佳

E.Combine函数

Conbine函数用于本地合并,这会大大减少网络I/O操作的消耗

  • 大小: 50.7 KB
  • 大小: 47.3 KB
2
1
分享到:
评论
1 楼 annmi_cai 2016-03-11  
好好学习,天天向上!

相关推荐

    006_hadoop中MapReduce详解_3

    "006_hadoop中MapReduce详解_3"可能是指一个系列教程的第三部分,着重讲解MapReduce的核心概念、工作原理以及实际应用。在这个部分,我们可能会探讨更深入的技术细节和优化策略。 MapReduce的工作流程分为两个主要...

    Hadoop集群pdf文档

    Hadoop_Hadoop集群(第2期)_机器信息分布表 Hadoop_Hadoop集群(第4期)_SecureCRT使用 Hadoop_Hadoop集群(第5期)_Hadoop安装配置 Hadoop_Hadoop集群(第5期副刊)_JDK和SSH无密码配置 Hadoop_Hadoop集群(第6期...

    Hadoop_MapReduce教程

    ### Hadoop MapReduce 教程知识点详解 #### 一、Hadoop MapReduce 概述 Hadoop MapReduce 是一个强大的分布式计算框架,主要用于处理大规模数据集。它通过将任务分解成多个子任务来实现并行处理,从而极大地提高了...

    hadoop-eclipse-plugin-2.6.0.jar.zip_2.6.0_hadoop_hadoop plugin

    这个插件是针对Hadoop 2.6.0版本设计的,主要目标是集成Eclipse IDE,使得开发者可以在本地环境中便捷地创建、调试和管理Hadoop MapReduce项目。 一、插件功能详解 1. **项目创建与导入**:通过Hadoop Eclipse插件...

    cs245-as1-master_Hadoop运行demo_Hadoop学习demo_DEMO_

    【Hadoop运行DEMO详解】 Hadoop是一款开源的分布式计算框架,由Apache基金会开发,它设计用于处理和存储海量数据。在"cs245-as1-master_Hadoop运行demo_Hadoop学习demo_DEMO_"这个项目中,我们主要关注的是如何在...

    hadoop入门最好的文档

    2.细细品味Hadoop_Hadoop集群(第2期)_机器信息分布表 3.细细品味Hadoop_Hadoop集群(第3期)_VSFTP安装配置 4.细细品味Hadoop_Hadoop集群(第4期)_SecureCRT使用 5.细细品味Hadoop_Hadoop集群(第5期)_Hadoop...

    大数据Hadoop核心之MapReduce详解

    大数据Hadoop核心之MapReduce详解 MapReduce是Hadoop核心模块之一,作为一个分布式运算程序的编程框架,用于用户开发基于Hadoop的数据分析应用。MapReduce的核心功能是将用户编写的业务逻辑代码和自带默认组件整合...

    细细品味Hadoop_Hadoop集群(第11期副刊)_HBase之旅.pdf

    ### Hadoop集群与HBase应用详解 #### 一、HBase基本概念介绍 **1.1 引言** 随着大数据处理需求的日益增长,Hadoop生态中的HBase因其卓越的数据处理能力和灵活性,成为了众多企业的大数据解决方案之一。本文旨在...

    细细品味Hadoop_Hadoop集群(第5期)_Hadoop安装配置

    ### Hadoop集群构建与配置详解 #### 一、Hadoop概览及集群角色解析 **Hadoop**,作为Apache软件基金会旗下的一款开源分布式计算平台,以其核心组件**Hadoop分布式文件系统**(HDFS)和**MapReduce**而闻名。HDFS提供...

    细细品味Hadoop_Hadoop集群(第6期)_WordCount运行详解

    ### Hadoop集群中WordCount运行详解 #### 一、MapReduce理论简介 ##### 1.1 MapReduce编程模型概述 MapReduce是一种编程模型,用于处理和生成大型数据集。其核心理念是“分而治之”,即将大规模数据处理任务拆分...

    Hadoop MapReduce v2 Cookbook, 2nd Edition-Packt Publishing(2015) 高清完整版PDF下载

    **Hadoop MapReduce V2** 是Hadoop生态系统中的一个关键组件,用于处理大规模数据集。相较于V1版本,V2版本在架构上进行了重大改进,引入了**YARN(Yet Another Resource Negotiator)**来分离资源管理和任务调度/...

    hadoop2.X配置详解和mapreduce详解

    在Hadoop 2.x中,MapReduce进行了重大改进,包括YARN(Yet Another Resource Negotiator)的引入,它作为全局资源管理系统,负责管理和调度集群上的计算资源。MapReduce作业现在通过YARN进行调度和执行,提高了集群...

    Hadoop安装教程_单机_伪分布式配置_Hadoop2.6.0_Ubuntu141

    【Hadoop安装教程:单机与伪分布式配置详解】 在大数据处理领域,Hadoop是一个广泛使用的开源框架,它允许在廉价硬件集群上处理大规模数据。本文将指导您如何在Ubuntu 14.04 64位系统上安装Hadoop 2.6.0,无论是...

    GIS_Tools_for_Hadoop使用介绍(ArcGIS与Hadoop集成)

    - **Hive**:提供了一个SQL-like的数据查询语言(HiveQL),使用户能够轻松地处理Hadoop中的数据。 - **ZooKeeper**:一种协调服务,用于维护集群中服务的状态。 #### HDFS详解 HDFS是一种专门设计用于存储大量数据...

    3-haddop_hadoop_

    2. **02_离线计算系统_第2天(HDFS详解).docx** - HDFS是Hadoop的基础,是一个高度容错性的分布式文件系统,适合存储大量数据。这份文档可能深入解析了HDFS的架构、工作原理,包括数据块、NameNode和DataNode等概念...

Global site tag (gtag.js) - Google Analytics