文档章节

HADOOP 在 JAVA 运行

d
 double大宝
发布于 2017/04/14 22:01
字数 601
阅读 18
收藏 0

1. Mapper

2. Reducer

 

    HADOOP 的 Maven依赖包:

        <dependencies>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-common</artifactId>
                <version>2.8.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-hdfs</artifactId>
                <version>2.8.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-mapreduce-client-core</artifactId>
                <version>2.8.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
                <version>2.8.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-mapreduce-client-common</artifactId>
                <version>2.8.0</version>
            </dependency>
            <dependency>
                <groupId>jdk.tools</groupId>
                <artifactId>jdk.tools</artifactId>
                <version>1.7</version>
                <scope>system</scope>
                <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
            </dependency>
        </dependencies>

MaxTemperatureMapper类:

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 MaxTemperatureMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
	
	//缺失
	private static final int MISSING = 9999;
	@Override
	protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
		//转换text类型为String类型
		String line = value.toString();
		//提取出年份
		String year = line.substring(15, 19);
		//气温变量
		int airTemperature;
		//判断符号
		if (line.charAt(87) == '+') { // parseInt doesn't like leading plus
			airTemperature = Integer.parseInt(line.substring(88, 92));
		} else {
			airTemperature = Integer.parseInt(line.substring(87, 92));
		}
		//质量
		String quality = line.substring(92, 93);
		//将有效数据写到map的上下文中,注意类型务必要和泛型声明一致
		if (airTemperature != MISSING && quality.matches("[01459]")) {
			context.write(new Text(year), new IntWritable(airTemperature));
		}
	}
}


    MaxTemperatureReducer类:

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

public class MaxTemperatureReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
	@Override
	public void reduce(Text key, Iterable<IntWritable> values, Context context)
			throws IOException, InterruptedException {
		//定义最大值变量
		int maxValue = Integer.MIN_VALUE;
		for (IntWritable value : values) {
			maxValue = Math.max(maxValue, value.get());
		}
		//将reduce的输出写入到context中
		context.write(key, new IntWritable(maxValue));
	}
}

MaxTemperature类:

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 MaxTemperature {
	public static void main(String[] args) throws Exception {
		if (args.length != 2) {
			System.err.println("Usage: MaxTemperature <input path> <output path>");
			System.exit(-1);
		}
		/*FileSystem fs = FileSystem.get(null);
		fs.open(null);*/
		//作业,每一次 map + reduce 过程就是一次作业
		Job job = new Job();
		job.setJarByClass(MaxTemperature.class);
		//设置作业名称,便于调试
		job.setJobName("Max temperature");
		//添加输入路径,可以添加多个路径,可以是文件目录(不递归)或具体文件
		FileInputFormat.addInputPath(job, new Path(args[0]));
		//设置输出路径,只有一个,而且不能存在
		FileOutputFormat.setOutputPath(job, new Path(args[1]));
		
		job.setMapperClass(MaxTemperatureMapper.class);
		job.setReducerClass(MaxTemperatureReducer.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(IntWritable.class);
		
		//等待作业的完成
		System.exit(job.waitForCompletion(true) ? 0 : 1);
	}
}


    程序导出成jar包:HadoopDemo.jar
    查看jar文件
    在本地文件系统上执行程序
        $>set HADOOP_CLASSPATH=F:\Downloads\hadoop\HadoopDemo.jar //win7
        $>hadoop -Xmx1000m com.wgy.hadoop.MaxTemperature file:///F:\Downloads\hadoop\ncda_data\19*.gz F:\Downloads\hadoop\output
        $>export HADOOP_CLASSPATH=hadoop-xxxxx.jar //Linux
        $>hadoop com.wgy.hadoop.MaxTemperature input/ncdc/sample.txt output
    
    在HDFS集群上执行程序
        $>通过共享文件夹将jar文件发送到ubuntu主机中
        $>将天气数据上传到hdfs文件系统
        $>hadoop jar xxx.jar /aa /xxx

        hadoop fs -mkdir /usr/wgy/ncda_data
        hadoop fs -put /mnt/hgfs/F/Downloads/hadoop/ncda_data/19*.gz /usr/wgy/ncda_data
        cp /mnt/hgfs/F/Downloads/hadoop/HadoopDemo.jar /Downloads
        hadoop jar /Downloads/HadoopDemo.jar /usr/wgy/ncda_data /usr/wgy/out
        hadoop fs -cat /usr/wgy/out/part-r-00000
            1901 317 
            1920 244

 

© 著作权归作者所有

d
粉丝 2
博文 86
码字总数 43479
作品 0
贵港
私信 提问
centos7 yum安装java运行环境,初识hadoop

安装java运行环境 1.实验机相关信息: [root@node2 ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@node2 ~]# uname -r 3.10.0-327.el7.x86_6 2.配置epel源,以y......

smile68
2018/04/21
0
0
Hadoop2安装——单机模式

Hadoop有三种模式 单机模式、伪分布模式和完全分布模式 这里先简单介绍单机模式 ,默认情况下,Hadoop被配置成一个非分布式模式,独立运行JAVA进程,适合开始做调试工作。 Hadoop 网址http:...

tngou
2012/12/01
10.9K
12
Apache Hadoop 入门教程第二章

Apache Hadoop 单节点上的安装配置 下面将演示快速完成在单节点上的 Hadoop 安装与配置,以便你对 Hadoop HDFS 和 MapReduce 框架有所体会。 先决条件 支持平台: GNU/Linux:已经证实了 Ha...

哈斗篷
2018/05/10
0
0
单元测试出现ClassNotFoundException错误(已解决)

//MaxTemperatureMapperTest.java package v1;// cc MaxTemperatureMapperTestV1 Unit test for MaxTemperatureMapper// == MaxTemperatureMapperTestV1Missing// vv MaxTemperatureMapperTe......

chyileon
2013/05/29
1K
0
Linux命令行下运行Hadoop单元测试

最近在学习Hadoop,在虚拟机上面的Centos系统下搭建了一个单机的Hadoop系统,对照《Hadoop权威指南》一边看一边运行里面的例子。由于大部分程序员都是用Eclipse来开发Hadoop程序,但我习惯于...

chyileon
2013/05/29
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL8.0.17 - Multi-Valued Indexes 简述

本文主要简单介绍下8.0.17新引入的功能multi-valued index, 顾名思义,索引上对于同一个Primary key, 可以建立多个二级索引项,实际上已经对array类型的基础功能做了支持 (感觉官方未来一定...

阿里云官方博客
16分钟前
2
0
make4.1降级 make-3.81、2错误

在编译 make-3.82 的时候出现如下错误提示 glob/glob.c:xxx: undefined reference to `__alloca'` 修改 /glob/glob.c // #if !defined __alloca && !defined __GNU_LIBRARY__ # ifdef __GNUC......

Domineering
18分钟前
1
0
Rainbond集群的安装和运维的原理

本文将解读Rainbond集群的安装和运维的原理,使用户基本了解Rainbond的安装机制和运维重点,便于用户搭建大型Rainbond集群。 1.Rainbond集群节点概述 1.1 节点分类 属性 类型 说明 manage 管...

好雨云帮
29分钟前
1
0
好程序员大数据学习路线分享UDF函数

1.为什么需要UDF? 1)、因为内部函数没法满足需求。 2)、hive它本身就是一个灵活框架,允许用自定义模块功能,如可以自定义UDF、serde、输入输出等。 2.UDF是什么? UDF:user difine fun...

好程序员官方
31分钟前
3
0
Groovy中 Base64 URL和文件名安全编码

Base64 URL和文件名安全编码 Groovy支持Base64编码很长一段时间。 从Groovy 2.5.0开始,我们还可以使用Base64 URL和Filename Safe编码来使用encodeBase64Url方法对字节数组进行编码。 结果是...

白石
35分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部