Hadoop运行过程详解

我们照着Hadoop教程简单的写了一个例子,它可以用于分析天气数据然后找到某年的最高气温。

我们是用hadoop 0.20的新的API写的,具体代码如下:

Mapper类:

/*
 */
package com.charles.parseweather; 

import java.io.IOException; 

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

/**
 *
 * Description: 这是map类,之中定义了map函数, 这是基于Hadoop0.20的新的API
 * base class有4个类型参数,分别是输入key,输入value,输出key,输出value的类型
 * 在我们的例子中,
 * 输入key:LongWritable的偏移量,代表某一行起始位置相对于文件起始位置的偏移量
 * 输入value: 指定行的单行文本,这里面涵盖了包括气温信息在内的其他信息
 * 输出key: 这行中的年份信息
 * 输出value:这行中的气温
 *
 *所以对于其中的某一行:比如:
 *0029029070999991901010106004+64333+023450FM-12+000599999V0202701N015919999999N0000001N9-00781+99999102001ADDGF108991999999999999999999
 * 假如每一行都是106个字符,而且这个是第2行,那么
 * 输入key 为 106  (偏移量,LongWritable类型)
 * 输入value 为全部文本
 * 输出key:年份信息,这里是第15-19个字符,所以是1901
 * 输出value:气温信息,这里是第87-92个字符(因为可能是零下温度),所以是0 (IntWritable类型)
 *
 *
 * @author charles.wang
 * @created May 24, 2012 5:10:27 PM
 *
 */
public class MaxTemperatureMapper extends Mapper<LongWritable, Text, Text, IntWritable> { 

    //定义了一个不可能的气温值,如果这一行的气温是这个数字,则表示这一年没有统计气温
    private static final int MISSING = 9999; 

    //这个map方法将(文本偏移量,这行文本)映射为(年份,气温),并且写入Context中
    //这里使用了Hadoop自身提供的数据类型,他们的作用只是在网络序列化过程中优化
    //但是最终我们还是要吧他们转为java.lang中的基本类型来处理
    public void map(LongWritable key,Text value ,Context context)
        throws IOException ,InterruptedException{ 

        //因为value代表了这行文本,所以我们先要从其中提取信息
        //将网络传输的文本转为String类型的行
        String line = value.toString();
        //从行中提取了年份信息,这个将作为输出的key
        String year = line.substring(15,19); 

        int airTemperature; 

        //对于气温,因为有正负之分,所以要区别对待,第87位是符号位
        //对于正的气温值,从下一个位置开始截取到92位置,然后转为整数类型
        //对于负的气温值,直接截取到92位置,然后转为整数类型 

        if(line.charAt(87) == '+'){
            airTemperature = Integer.parseInt(line.substring(88,92));
        }else{
            airTemperature =  Integer.parseInt(line.substring(87,92));
        } 

        String quantity = line.substring(92,93);
        //quantity的参数为正则表达式,quantity.matches("[01459]")表明数量只可能是以0,1,4,5,9才有效
        if(airTemperature != MISSING && quantity.matches("[01459]")){
            //只把正确的气温数值写入Context对象,写的时候又要转为Hadoop数据类型,因为要通过网络传输到reduce中
            //这里可以看出key为年份,value为这一行中包含的气温值
            context.write(new Text(year),new IntWritable(airTemperature));
        } 

    } 

}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索类型
, 输入
, 输出
, value
, 偏移
年份
hadoop配置文件详解、hadoop原理详解、hadoop技术详解、hadoop rpc 详解、hadoop shuffle详解,以便于您获取更多的相关知识。

时间: 2024-10-01 07:39:46

Hadoop运行过程详解的相关文章

Hadoop运行原理详解

我们通过下面这个天气数据处理的例子来说明Hadoop的运行原理. 1.Map-Reduce的逻辑过程 假设我们需要处理一批有关天气的数据,其格式如下: 按照ASCII码存储,每行一条记录 每一行字符从0开始计数,第15个到第18个字符为年 第25个到第29个字符为温度,其中第25位是符号+/- 0067011990999991950051507+0000+ 0043011990999991950051512+0022+ 0043011990999991950051518-0011+ 004301

yum安装CDH5.5 hive、impala的过程详解_Linux

一.安装hive 组件安排如下: 172.16.57.75 bd-ops-test-75 mysql-server 172.16.57.77 bd-ops-test-77 Hiveserver2 HiveMetaStore 1.安装hive 在77上安装hive: # yum install hive hive-metastore hive-server2 hive-jdbc hive-hbase -y 在其他节点上可以安装客户端: # yum install hive hive-server2

Win 2000系统引导过程详解(2)

过程|详解 表一则列出了在系统引导的不同阶段所引用的文件. 表一 在这里,我们暂不讨论Windows 2000操作系统的内部工作机制,以下通过图文结合的方式,简要给大家说明在这五个阶段,操作系统都在干些什么,那些程序发挥了作用. 第一步,预引导阶段,过程如图二所示,首先包括了系统加电自检,这个过程完成硬件设备的枚举和配置.其次计算机BIOS确定引导设备的位置,加载并运行Master Boot Record(MBR)主引导区内容(如lilo等).然后扫描分区表,定位活动分区,并将活动分区上的引导扇

.NET配置文件解析过程详解

过程|详解 在我看来,WEB project的开发与WINFORM的开发最大的区别在于web的运行是在Framework上更高一层框架上运行,即ASP.NET框架,程序员在web下的开发可以说是黑盒开发,不是让你去定义程序入口和执行顺序,而是asp.net来调用你的各个方法,程序员做的一切都是一种受控的舞蹈.就像我们调用nunit之类的工具来测试一个dll一样,nunit是容器,是框架,执行哪个方法是由nunt来决定的.因此,也就有了页面执行周期各状态等令刚入门的程序员困惑不已的事,其实,究其根

Android的init过程详解(一)init的初始化

本文使用的软件版本 Android:4.2.2 Linux内核:3.1.10 本文及后续几篇文章将对Android的初始化(init)过程进行详细地.剥丝抽茧式地分析,并且在其中穿插了大量的知识,希望对读者了解Android的启动过程又所帮助.本章主要介绍了与硬件相关初始化文件名的确定以及属性服务的原理和实现. Android本质上就是一个基于Linux内核的操作系统.与Ubuntu Linux.Fedora Linux类似.只是Android在应用层专门为移动设备添加了一些特有的支持.既然An

Android的init过程详解(一)(转)

  本文使用的软件版本 Android:4.2.2 Linux内核:3.1.10      本文及后续几篇文章将对Android的初始化(init)过程进行详细地.剥丝抽茧式地分析,并且在其中穿插了大量的知识,希望对读者了解Android的启动过程又所帮助.本章主要介绍了与硬件相关初始化文件名的确定以及属性服务的原理和实现.      Android本质上就是一个基于Linux内核的操作系统.与Ubuntu Linux.Fedora Linux类似.只是Android在应用层专门为移动设备添加了

IIS8 使用FastCGI配置PHP环境支持 过程详解

原文:IIS8 使用FastCGI配置PHP环境支持 过程详解   平时帮朋友们配置过一些PHP环境的服务器,但是一直使用的都是Apache HTTP+PHP,今天呢,我吧IIS+PHP配置方式给大家发一下下~呵呵.   在这里,我使用的是FastCGI模块映射的方式配置的,当然还有ISAPI处理程序映射,不过ISAPI的方式在PHP5.5之后就没有了,FastCGI是推荐的方式,效率相对比较高也稳定. 系统我用的是自己的笔记本,Windows 8.1,IIS是8的,当然Windows Serv

《嵌入式 Linux应用程序开发标准教程(第2版)》——2.2 Linux启动过程详解

2.2 Linux启动过程详解 嵌入式 Linux应用程序开发标准教程(第2版) 在了解了Linux的常见命令之后,下面详细讲解Linux的启动过程.Linux的启动过程包含了Linux工作原理的精髓,而且在嵌入式开发过程中非常需要这方面的知识. 2.2.1 概述 用户开机启动Linux过程如下: (1)当用户打开PC(intel CPU)的电源时,CPU将自动进入实模式,并从地址0xFFFF0000开始自动执行程序代码,这个地址通常是ROM-BIOS中的地址.这时BIOS进行开机自检,并按BI

Win 2000系统引导过程详解(6)

过程|详解 Boot.ini文件包括[boot loader].[operating systems]两个部分,[boot loader]包括等待时间和默认引导系统两个参数,timeout后边的数字表示等待的秒数,default后边的是默认引导系统的位置.[operating systems]则包括安装的所有系统的ARC(Advanced RISC Computing)引导路径(等于号之前的部分)和他们在菜单上显示出的名字(引号之间的文本),以及启动参数(斜杠后边的部分).下边的表三将详细向您解