`

hadoop helloworld with Java

 
阅读更多

环境:ubuntu、hadoop-2.6.0、jdk-1.6

Demo说明:此demo改编自hadoop权威指南一书;
1、存在一个气温记录的txt文件,记录每一年每一个月的气温值(此处数据伪造,记录的为1990 - 1991年数据),如下:
hadoop的helloworld程序 <wbr>for <wbr>java

途中+号表示正数温度,-号表示零下。
demo意图是期望通过hadoop计算出每一年的最高气温,结果期望如下:
hadoop的helloworld程序 <wbr>for <wbr>java

开始构建hadoop应用,首先此处用到的核心类是Mapper、Reducer、Combiner(这并不是一个具体的类,此对象也是Reducer的一个子类,用于实现hadoop中的合并函数)这三个类,Mapper类是用于从每一行中获取出year(年份)和tempper(气温值),将输出参数的year和tempper作为Combiner的输入参数,Combiner计算出此数据块的最大值(因为在分布式计算中,同一个年份的数据可能被分割在不同的数据块中,所以,合并函数显得非常重要),将合并函数计算的year和tempper传入Reducer,reducer输出结果到HDFS;(hadooper的mapper函数的输入是基于标准流,对文件逐行读取,逐行提交给mapper)

架构如下:
NewMaxTemperMapper         >> Mapper的子类;
NewMaxTemperReducer        >> Reducer的子类:
NewMaxTempperCombiner    >> Reducer的子类:
NewDomainWithCombiner      >> Reducer的子类:




NewMaxTemperMapper.java


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;


public class NewMaxTemperMapper extends Mapper {
   
    private static final int MISSING = 9999;

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException,InterruptedException {
       
        System.out.println("start to work in map method ...");
        String line = value.toString();
        String year = line.substring(1, 5);
       
        int airTempper;
       
        if (line.charAt(6) == '+') {
            airTempper = Integer.parseInt(line.substring(7, 10));
        } else {
            airTempper = Integer.parseInt(line.substring(6, 10));
        }
       
        if (airTempper != MISSING) {
            context.write(new Text(year), new IntWritable(airTempper));
        }
       
    }

}

 



NewMaxTemperReducer.java

import java.io.IOException;

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


public class NewMaxTemperReducer extends Reducer {
   
   
    @Override
    protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException {

        System.out.println("start to work in reducer method ...");
        int maxValue = Integer.MIN_VALUE;
       
        for (IntWritable intWrit : values) {
            maxValue = Math.max(maxValue, intWrit.get());
        }
       
        context.write(key, new IntWritable(maxValue));
    }
   
   
}

 


NewMaxTempperCombiner.java

import java.io.IOException;

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

public class NewMaxTempperCombiner extends Reducer  {
   
    @Override
    protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException {
       
        System.out.println("NewMaxTempperCombiner - reduce() - do combiner...");
       
        int maxValue = Integer.MIN_VALUE;
       
        for (IntWritable intWrit : values) {
           
            maxValue = Math.max(maxValue, intWrit.get());
           
        }
       
        context.write(new Text(key), new IntWritable(maxValue));
       
    }
   
}

 

NewDomain.java

import java.io.IOException;

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.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class NewDomain {
   
    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
       
        if (args == null || args.length != 2) {
            System.err.println("input is not legal.");
            System.exit(-1);
        }
       
        Job job = new Job();
        job.setJarByClass(NewDomain.class);
       
        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
       
        job.setMapperClass(NewMaxTemperMapper.class);
        job.setReducerClass(NewMaxTemperReducer.class);
       
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
       
        System.exit(job.waitForCompletion(true)?0:1);
       
    }
   
}

 

OK 将项目导出成一个可运行jar

将此jar放到单机模式或者伪分布式模式下,通过hadoop/bin下面的hadoop执行

分享到:
评论

相关推荐

    hadoop_hello_world

    【标题】"hadoop_hello_world" 是一个典型的Hadoop入门示例,通常被用来演示Hadoop框架的基础操作。这个程序的核心任务是对输入数据中的单词进行计数,展示Hadoop如何处理分布式计算问题。 【描述】"hadoop单词计数...

    hadoop-snappy的java包

    然而,将Snappy整合到Hadoop并不总是那么简单,因为默认情况下,Hadoop并不直接提供预编译的hadoop-snappy Java包。这通常意味着用户需要自己编译源代码,这是一个技术性强且耗时的过程,需要对Hadoop和Snappy的底层...

    Hadoop+HBase+Java API

    标题 "Hadoop+HBase+Java API" 涉及到三个主要的开源技术:Hadoop、HBase以及Java API,这些都是大数据处理和存储领域的关键组件。以下是对这些技术及其结合使用的详细介绍: **Hadoop** 是一个分布式计算框架,由...

    Java写的hadoop压缩worldcount例子

    在这个"Java写的hadoop压缩worldcount例子"中,我们主要关注的是如何利用Hadoop进行数据压缩以及实现一个简单的WordCount程序。WordCount是Hadoop入门的经典示例,它统计文本中每个单词出现的次数。 首先,Hadoop...

    hadoop权威指南气温java工程

    总结来说,《Hadoop权威指南》中的"chat2例子"是学习Hadoop MapReduce编程的一个实例,它涵盖了Hadoop的基本原理、数据处理流程以及Java编程技巧。通过这个例子,读者可以深入理解Hadoop如何处理大规模文本数据,...

    hadoop mapreduce helloworld 能调试

    "Hadoop MapReduce HelloWorld 能调试" 的主题意味着我们将深入理解如何设置、运行以及调试 MapReduce 任务,特别是针对入门级的 "wordcount" 示例。 MapReduce 分为两个主要阶段:Map 阶段和 Reduce 阶段。Map ...

    hadoop实战源代码Java

    本资源"hadop实战源代码Java"聚焦于利用Java编程语言与Hadoop Distributed File System (HDFS)进行交互,实现文件的上传、下载以及删除等核心功能。这里我们将深入探讨这些知识点。 首先,了解Hadoop的基本架构是...

    java操作Hadoop源码之HDFS Java API操作-创建目录

    在进行Java编程之前,你需要确保已经在本地或集群上正确安装了Hadoop,并配置好了`hadoop-env.sh`和`core-site.xml`等配置文件。`hadoop-env.sh`中应设置`HADOOP_HOME`变量,指向Hadoop安装路径,而`core-site.xml`...

    Hadoop Real-World Solutions Cookbook 源代码

    《Hadoop Real-World Solutions Cookbook 源代码》是一本针对Hadoop实际应用问题解决方案的实战指南,书中通过丰富的示例代码帮助读者理解和解决在大数据处理中遇到的各种挑战。源代码包含了书中各个章节的关键实现...

    Hadoop入门程序java源码

    这个“Hadoop入门程序java源码”是为初学者准备的,目的是帮助他们快速掌握如何在Hadoop环境中编写和运行Java程序。Hadoop的主要组件包括HDFS(Hadoop分布式文件系统)和MapReduce,这两个部分将在下面详细介绍。 ...

    java WriteHDFS实现,hadoop应用

    java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,...

    Hadoop下Eclipse用Java编程实现WordCount

    ### Hadoop下Eclipse用Java编程实现WordCount #### 一、环境配置与说明 **操作系统**: CentOS 6.5 x64 (安装类型选择软件开发平台) **安装软件**: - hadoop-2.7.1.tar.gz - jdk-7u79-linux-x64.tar.gz / jdk-8u...

    hadoop-2.7.4-with-windows.tar.gz

    标题中的"hadoop-2.7.4-with-windows.tar.gz"是一个针对Windows操作系统的Hadoop发行版,版本号为2.7.4。这个压缩包采用了GNU tar格式,并进行了gzip压缩,这种格式通常在Linux和Unix系统中使用,但在Windows环境下...

    spark3.1.1和hadoop3.2.2对应的java依赖 pom文件

    为了把spark2.4.X和hadoop2.7.3升级为spark3.1.1和hadoop3.2.2找了半天资源,最后还是自己手动编写了一个。已经在集群上测试可用

    学习hadoop--java零基础学习hadoop手册

    ### Hadoop与Java基础知识学习手册 #### 一、Hadoop简介及Java基础知识 **标题**:“学习hadoop--java零基础学习hadoop手册” **描述**:“学习hadoop--java零基础学习hadoop手册” 本手册旨在为完全没有Java基础...

    hadoop-hello-world:Hadoop简介与Mac安装和map-reduce示例

    确认适用于HadoopJava 1.6。*或更高版本 $ java -version java version " 1.7.0_79 " Java(TM) SE Runtime Environment (build 1.7.0_79-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode) ...

    java管理hdfs文件和文件夹项目hadoop2.4

    在Hadoop生态系统中,Java是主要的编程语言,用于与HDFS(Hadoop Distributed File System)进行交互。本文将深入探讨使用Java管理HDFS文件和文件夹的关键知识点,特别是基于Hadoop 2.4版本。 首先,理解HDFS的基础...

    Java访问Hadoop集群源码

    out.writeBytes("Hello, Hadoop!"); out.close(); ``` 六、执行MapReduce任务 对于更复杂的任务,如数据分析,可以使用Hadoop的MapReduce API编写Java程序。一个典型的MapReduce作业包含Mapper、Reducer和Driver三...

    hadoop中实现java网络爬虫(示例讲解)

    【标题】:在Hadoop中实现Java网络爬虫的详细步骤 【描述】:本文将详细介绍如何在Hadoop环境中利用Java实现一个网络爬虫。我们将从配置环境开始,包括Cygwin、Hadoop的设置,然后是Eclipse开发环境的搭建,以及...

    MapReduce版的HelloWorld

    要运行这个"HelloWorld-WordCount"程序,首先确保你的Eclipse已经安装了Hadoop相关的Maven插件,接着导入这个项目。在项目中,你会看到源代码文件,包括`WordCount.java`,这是实现MapReduce任务的主要类。这个类会...

Global site tag (gtag.js) - Google Analytics