四、MapReduce 基础

是一个并行计算框架(计算的数据源比较广泛-HDFS、RDBMS、NoSQL),Hadoop的 MR模块充分利用了HDFS中所有数据节点(datanode)所在机器的内存、CUP以及少量磁盘完成对大数据集的分布式计算。MapReduce将计算分为两个阶段:

  1. 通过将一个大的计算任务分割成若干个小任务(计算目标数据集的分割),每一个小任务会分配给所有的计算节点(datanode所在物理机器)完成对局部数据的归类和分析,我们通常把该阶段定义为Map阶段,在Map阶段结束后会在本地系统磁盘存储计算的临时结果;
  2. 当Map阶段所有节点完成对局部数据的归类分析后,MR框架会启动Reduce任务完成对Map阶段的局部计算临时结果汇总,把以上阶段成为Reduce阶段。

I、计算流程

II、YARN环境搭建

配置文件

[[email protected] ~]# vi /usr/hadoop-2.6.0/etc/hadoop/yarn-site.xml

<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<!--Resource Manager-->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>CentOS</value>
</property> 

[[email protected] ~]# mv /usr/hadoop-2.6.0/etc/hadoop/mapred-site.xml.template /usr/hadoop-2.6.0/etc/hadoop/mapred-site.xml

[[email protected] ~]# vi /usr/hadoop-2.6.0/etc/hadoop/mapred-site.xml

<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

启动计算服务

[[email protected] ~]# start-yarn.sh
[[email protected] ~]# jps
1584 SecondaryNameNode
1364 NameNode
1446 DataNode
5229 Jps

访问:http://centos:8088/

III、HelloWorld of MapReduce 编程

  <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-mapreduce-client-core</artifactId>
      <version>2.6.0</version>
  </dependency>
  <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
      <version>2.6.0</version>
  </dependency>

IpMapper

 import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/**
 * @program: hadoop_01
 * @description:
 * @author: luoht
 * @create: 2019-01-04 16:08
 **/

public class IpMapper extends Mapper<LongWritable,Text,Text,IntWritable>{

    /**
     *192.168.0.12 1 001 click 5000 2019-01-04 14:44:00
     * @param key :输入文本行字节偏移量
     * @param value:输入文本行
     * @param context
     * @throws IOException
     * @throws InterruptedException
     */

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        String[] tokens = value.toString().split("");
        String ip = tokens[0];
        context.write(new Text(ip),new IntWritable(1));
    }
}

IpReducer

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

/**
 * @program: hadoop_01
 * @description:
 * @author: luoht
 * @create: 2019-01-04 16:13
 **/

public class IpReducer extends Reducer<Text,IntWritable,Text,IntWritable> {
    /**
     *
     * @param key :ip
     * @param values: Int[]{1,1,1,..}
     * @param context
     * @throws IOException
     * @throws InterruptedException
     */

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int total = 0;
        for (IntWritable value : values) {
            total+=value.get();
        }
        context.write(key,new IntWritable(total));

    }
}
 

封装job

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

/**
 * @program: hadoop_01
 * @description:
 * @author: luoht
 * @create: 2019-01-04 16:15
 **/

public class CustomJobSubmiter extends Configured implements Tool {
    @Override
    public int run(String[] strings) throws Exception {
        /*1. 封装job 对象*/
        Configuration conf=getConf();
        Job job = Job.getInstance(conf);
        /*2. 设置数据读入和写出的格式*/
        job.setInputFormatClass(TextInputFormat.class);
        job.setOutputFormatClass(TextOutputFormat.class);
        /*3. 设置处理数据的路径*/
        Path dst = new Path("/tt/test");
        TextOutputFormat.setOutputPath(job,dst);
        /*4. 设置数据计算逻辑*/
        Path src=new Path("/tt/access");
        TextInputFormat.addInputPath(job,src);
        Path dst=new Path("/tt/result");
        TextOutputFormat.setOutputPath(job,dst);
        /*5. 设置Mapper和Reducer输出泛型*/
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        /*6. 提交任务*/
        job.submit();
        return 0;
    }

    public static void main(String[] args) throws Exception {
        ToolRunner.run(new CustomJobSubmiter(),args);
    }
}

原文地址:https://www.cnblogs.com/adrien/p/10222635.html

时间: 2024-08-02 06:29:58

四、MapReduce 基础的相关文章

四.OC基础--1.文档安装和方法重载,2.self和super&amp;static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&amp;私有方法,6.description方法

四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 3. 方法重载: 是指在一个类中定义多个同名的方法 在OC中没有重载 2.self和super&static, self和super: 1. self理解: 谁调用当前方法, self就代表谁. 比如: 在对象方法中,self代表的是对象, 因为只有对象才可以调用对象方法 在类方法中, self代表的

史上最详细的Android Studio系列教程四--Gradle基础

史上最详细的Android Studio系列教程四--Gradle基础

【OC语法快览】四、基础内存管理

Basic Memory Management                                                           基础内存管理 If you're writing an application for Mac OS X, you have the option to enable garbage collection. In general, this means that you don't have to think about memory

SQL Server 2008空间数据应用系列四:基础空间对象与函数应用

原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.熟悉或了解Microsoft SQL Server 2008中的空间数据类型. 4.具备相应(比如OGC)的GIS专业理论知识. 5.其他相关知识. SQL Server 2

php四种基础排序算法的运行时间比较!

/** * php四种基础排序算法的运行时间比较 * @authors Jesse (jesse152@163.com) * @date 2016-08-11 07:12:14 */ //冒泡排序法 function bubbleSort($array){ $temp = 0; for($i = 0;$i < count($array) -1;$i++){ for($j = 0;$j < count($array) - 1 -$i;$j++){ if($array[$j] > $arra

php四种基础排序算法的运行时间比较

/** * php四种基础排序算法的运行时间比较 * @authors Jesse (jesse152@163.com) * @date 2016-08-11 07:12:14 */ //冒泡排序法 function bubbleSort($array){ $temp = 0; for($i = 0;$i < count($array) -1;$i++){ for($j = 0;$j < count($array) - 1 -$i;$j++){ if($array[$j] > $arra

Android Studio系列教程四--Gradle基础

Android Studio系列教程四--Gradle基础 本文为个人原创,欢迎转载,但请务必在明显位置注明出处! 其实很早之前也写了一篇Gradle的基础博客,但是时间很久了,现在Gradle已经更新了很多,所以暂且结合Stduio 1.0正式版与最新的Gradle语法来详细讲解下,小伙伴们直接跟我一步步来学习吧. 什么是Gradle? Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(

面向对象分析与设计:四个基础原则

大家都知道遵循设计原则是开发高质量软件的重要基础,但实际运用时并不容易.Booch在<<面向对象分析与设计>>中提出了四个基础原则: 抽象   核心思想是不变性的概念.去除不关心的属性,而强化重要的属性,帮助人们思考要做什么. 封装  核心是分离关注和信息隐藏,让程序借助最少的工作进行可靠的修改. 模块化  核心思想是分而治之,各个模块应当高内聚.低耦合. 层次结构  核心是对抽象的分级和排序,可以简化对系统的理解.

Scrapy里Selectors 四种基础的方法

在Scrapy里面,Selectors 有四种基础的方法xpath():返回一系列的selectors,每一个select表示一个xpath参数表达式选择的节点css():返回一系列的selectors,每一个select表示一个css参数表达式选择的节点extract():返回一个unicode字符串,为选中的数据re():返回一串一个unicode字符串,为使用正则表达式抓取出来的内容 /html/head/title: 选择HTML文档<head>元素下面的<title> 标

运维小白的成长日记第四天-基础网络构建OSI七层模型-物理层基础知识

运维小白的成长日记第四天- 基础网络构建OSI七层模型-物理层基础知识 网络运维的小白和想要加入网络运维的小伙伴们值得一看哦~ 今天是初识网络运维的第四天.希望能有志同道合的小伙伴一起讨论和学习,也希望有网络运维的大神能够帮忙在网络运维这条路上帮忙指点,能够多提意见使我进步. 今天和大家分享一下OSI七层模型中的物理层基础知识. 一.物理介质 1.传输数据的物理介质有:双绞线.光纤.同轴电缆(有线电视).无线.电力线.红外.蓝牙.微波 2.信号 (1)模拟信号:比如声波(水波纹) (2)数字信号