通过之前的操作,

http://www.cnblogs.com/wenbronk/p/6636926.html

http://www.cnblogs.com/wenbronk/p/6659481.html

hadoop-HA的集群已经搭建完成了, 需要写个小程序来认识下hadoop了

统计文本文件中, 每个单词出现的次数

1, Eclipse下新建Java-project

2, 新建lib文件, 导入jar包, 并buildpath

hadoop-2.5.\share\hadoop\common  所有jar,
hadoop-2.5.\share\hadoop\common\lib 所有jar, hadoop-2.5.\share\hadoop\hdfs 所有jar
hadoop-2.5.\share\hadoop\mapreduce 所有jar
hadoop-2.5.\share\hadoop\yarn 所有jar

3, Mapper类: WordCountMapper.java

package com.wenbronk.mapreduce;

import java.io.IOException;

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper; /**
* 测试mapreduce, 计算单词出现的次数
* @author wenbronk
* KEYIN: split的键, 行坐在的下标
* VALUEIN: split的值, 行值
* KEYOUT: 需求, 输出给reduce
* VALUEOUT: 需求, 输出给reduce
*/
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> { /**
* 重写map方法, 循环调用
* 从split中读取一行调用一次, 以行所在下标为key, 行内容为value
*/
@Override
protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context)
throws IOException, InterruptedException { // text 转string, toString(), 使用空格分隔为单词数组
String[] words = StringUtils.split(value.toString(), ' ');
for (String word : words) {
// 键值对输出, 输出给reduce
context.write(new Text(word), new IntWritable());
} } }

4, Reduce类, WordCountReduce.java

package com.wenbronk.mapreduce;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer; /**
* shuffling 后传给 reduce
* @author wenbronk
* KEYIN: mapper的输出
* VALUEIN: mapper的输出
*/
public class WordCountReduce extends Reducer<Text, IntWritable, Text, IntWritable>{ /**
* 循环调用
* 每组调用一次, key相同, value可能多个, 使用迭代器
*/
@Override
protected void reduce(Text arg0, Iterable<IntWritable> arg1,
Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
// 对值进行累加
int sum = ;
// 使用迭代器
for (IntWritable value : arg1) {
sum += value.get();
}
// 使用context输出
context.write(arg0 , new IntWritable(sum));
} }

5, 然后是具体的执行类: RunMapReduce.java

package com.wenbronk.mapreduce;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
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; /**
* 执行mapreduce
* 统计单词出新的次数
* @author wenbr
*
*/
public class RunMapReduce { public static void main(String[] args) throws Exception {
// 初始化时加载src或classpath下所有的hadoop配置文件
Configuration configuration = new Configuration(); // 得到执行的任务
Job job = Job.getInstance(config); // 入口类
job.setJarByClass(RunMapReduce.class); // job名字
job.setJobName("wordCount"); // job执行是map执行的类
job.setMapperClass(WordCountMapper.class); // job执行的reduce类
job.setReducerClass(WordCountReduce.class); // job输出的键类型
job.setMapOutputKeyClass(Text.class); // job输出的value类型
job.setMapOutputValueClass(IntWritable.class); //**** 使用插件上传data.txt到hdfs/root/usr/data.txt // 使用文件
FileInputFormat.addInputPath(job, new Path("/root/usr/")); // 使用一个不存在的目录进行
Path path = new Path("/root/usr/output");
// 如果存在删除
FileSystem fs = FileSystem.get(configuration);
if (fs.exists(path)) {
fs.delete(path, true);
} // 输出
FileOutputFormat.setOutputPath(job, path); boolean forCompletion = job.waitForCompletion(true); if (forCompletion) {
System.out.println("success");
}
} }

所有的类编写好了, 接下来是上传文件

6, 使用eclipse插件上传data.txt到hadoop目录 /usr/data.txt

我是用的插件为: 

7, 运行

这儿使用直接发布到服务器运行的方式

eclipse打包项目成jar包(只需要源码即可), 然后上传到服务器目录下, 使用hadoop命令执行
格式: hadoop jar jar路径 类全限定名

hadoop jar wc.jar com.wenbronk.mapreduce.RunMapReduce

之后在hadoop的目录下就可以看到统计后输出的文件了

13-hadoop-入门程序的更多相关文章

  1. Hadoop入门程序WordCount的执行过程

    首先编写WordCount.java源文件,分别通过map和reduce方法统计文本中每个单词出现的次数,然后按照字母的顺序排列输出, Map过程首先是多个map并行提取多个句子里面的单词然后分别列出 ...

  2. 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1

    051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...

  3. Hadoop入门学习笔记---part4

    紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...

  4. Hadoop入门学习笔记---part3

    2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...

  5. Hadoop入门学习笔记---part1

    随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力, ...

  6. 初识Hadoop入门介绍

    初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...

  7. 使用Python实现Hadoop MapReduce程序

    转自:使用Python实现Hadoop MapReduce程序 英文原文:Writing an Hadoop MapReduce Program in Python 根据上面两篇文章,下面是我在自己的 ...

  8. 采用ToolRunner执行Hadoop基本面分析程序

    为了简化执行作业的命令行.Hadoop它配备了一些辅助类.GenericOptionsParser它是一类.经常用来解释Hadoop命令行选项,并根据需要.至Configuration采取相应的对象设 ...

  9. Maven01——简介、安装配置、入门程序、项目构建和依赖管理

    1 Maven的简介 1.1 什么是maven 是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的 Svn eclipse   maven量级 1.2 Maven好处 同 ...

  10. 大数据:Hadoop入门

    大数据:Hadoop入门 一:什么是大数据 什么是大数据: (1.)大数据是指在一定时间内无法用常规软件对其内容进行抓取,管理和处理的数据集合,简而言之就是数据量非常大,大到无法用常规工具进行处理,如 ...

随机推荐

  1. Win窗口坐标二维坐标与OpenGl的世界坐标系的之间的相互转换

    Win窗口坐标二维坐标与OpenGl的世界坐标系的转换 几何处理管线擅长于使用视图和投影矩阵以及用于裁剪的视口把顶点的世界坐标变换为窗口坐标. 但是,在有些情况下,需要逆转这个过程.一种常见的情形是: ...

  2. SpringBoot相知

    前言 这篇文章的将介绍表单验证,AOP处理请求和统一异常处理,案例是延续上一篇 SpringBoot初识 表单验证 现在将要拦截未满18岁的女生,在之前GirlController里面添加一个女生的方 ...

  3. Python 基础入门

    最近业余时间看看Python,从网上找找一些语法看看 http://www.runoob.com/python/python-tutorial.html IDE工具:https://www.pytho ...

  4. JDK源码分析(10) CopyOnWriteArrayList

    概述 CopyOnWriteArrayList是一个线程安全集合,原理简单说就是:在保证线程安全的前提下,牺牲掉写操作的效率来保证读操作的高效.所谓CopyOnWrite就是通过复制的方式来完成对数据 ...

  5. “全栈2019”Java多线程第二十三章:活锁(Livelock)详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  6. Apache TraceEnable关闭与测试方法

    系统环境:OS: RHEL5.6_x64Apache: httpd-2.2.11 关闭方法:在主配置文件httpd.conf中添加配置:TraceEnable off可以直接配置在ServerRoot ...

  7. python3模块: uuid

    一. 简介 UUID是128位的全局唯一标识符,通常由32字节的字母串表示.它可以保证时间和空间的唯一性,也称为GUID. 全称为:UUID--Universally Unique IDentifie ...

  8. MySQL索引(六)

    一.什么是索引 索引就像一本书的目录一样,如果在字段上建立索引,那么以索引为列的查询条件时可以加快查询的速度,这个就是MySQL优化的重要部分 二.创建主键索引 整个表的每一条记录的主键值在表内都是唯 ...

  9. POJ 1157

    #include<iostream> //成大才子---经典代码~ #include<stdio.h> #include<algorithm> #define MA ...

  10. SQL Server数据库——数据库的数据导出与数据导入

    http://jingyan.baidu.com/article/3c48dd34531d5de10be358b8.html