学习日志---初次接触mapreduce

wordcount程序

package org.robby.mr;

import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
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.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;

public class WordCount {

  public static class Map 
       extends Mapper<Object, Text, Text, IntWritable>{
    //object是每一行的行表、text是每一行的内容,使用的是hadoop内置的数据结构
    //后面的text是指输出的行,也就是单词,IntWritable是单词的个数
    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();
    
    public void map(Object key, Text value, Context context
                    ) throws IOException, InterruptedException {
      StringTokenizer itr = new StringTokenizer(value.toString());
      while (itr.hasMoreTokens()) 
      {
        //选出单词放在word里,然后用context输出,对应单词加1
        word.set(itr.nextToken());
        context.write(word, one);
      }
    }
  }
  
  public static class Reduce 
       extends Reducer<Text,IntWritable,Text,IntWritable> {
    private IntWritable result = new IntWritable();

    //传入一个单词和其对于的次数迭代器
    public void reduce(Text key, Iterable<IntWritable> values, 
                       Context context
                       ) throws IOException, InterruptedException {
      int sum = 0;
      for (IntWritable val : values) {
        sum += val.get();
      }
      result.set(sum);
      context.write(key, result);
    }
  }

  public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
    String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
    if (otherArgs.length != 2) {
      System.err.println("Usage: wordcount <in> <out>");
      System.exit(2);
    }
    
    Job job = Job.getInstance(conf);
    job.setJarByClass(WordCount.class);
    // Set up the input
    job.setInputFormatClass(TextInputFormat.class);
    TextInputFormat.addInputPath(job, new Path(args[0]));
    // Mapper
    job.setMapperClass(Map.class);
    // Reducer
    job.setReducerClass(Reduce.class);
    // Output
    job.setOutputFormatClass(TextOutputFormat.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    TextOutputFormat.setOutputPath(job, new Path(args[1]));
    
    System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}

使用hadoop jar web.jar [类的全名称] [输入目录] [输出目录]

输入和输出目录都是hdfs的目录。

时间: 2024-11-04 02:23:40

学习日志---初次接触mapreduce的相关文章

c++中类的初次接触

下面是我写的简单的代码,初次接触c++中的类,c++真的是博大精深啊,学习c++的路还很长,加油! 1 /*q1.cpp*/ 2 //一个简单的类极其实例化 3 #include<iostream> 4 using namespace std; 5 6 class Point{ 7 public: 8 //设置坐标 9 void setPoint(int x,int y){ 10 xPos = x; 11 yPos = y; 12 } 13 //打印坐标 14 void printPoint(

Linux学习日志1-基本知识

1.冯.诺依曼体系计算机五大组成部件: 1.控制器:控制其他四个部件的运作 2.运算器:负责计算加减乘除 3.存储器:存放运算的数据来源与结果 4.输入设备:接收数据输入存入存储器 5.输出设备:从存储器接收数据输出 2.Linux的起源: 1991年一个芬兰大学生Linus Torvalds参考其老师的教学用操作系统Minix的思想(注意仅仅是思想),自己写了一个操作系统内核,命名为Linux 0.0.1,发布在comp.os.minix新闻组上,正式宣告Linux内核的诞生.从那时起,Lin

[Docker]初次接触

Docker 初次接触 近期看了不少docker介绍性文章,也听了不少公开课,于是今天去官网逛了逛,发现了一个交互式的小教程于是决定跟着学习下. 仅仅是把认为重点的知识记录下来,不是非常系统的学习和笔记. 理论部分 Docker 引擎包括了两个部分,一个守护进程作为server端来管理全部的容器. 一个client.能够远程来控制服务端. Docker有公共的云端仓库 Docker Hub Registry.里面有能够使用的镜像 你能够觉得容器containers就是沙箱box中的一个进程.这个

初次接触modelsim的一些体验

  在网上查找了一些资料来学习,看来看去觉得一篇讲modelsim三种仿真方式的不错,就按着步骤一步步做了,结果可想而知,问题是一个接一个啊,摸索了两天还是有点收获的,且记下. 第一点:操控modelsim的基本方式 1.用户图形界面接口(GUI),在界面也接受命令行输入.(适合菜鸟) 2.DO文件,应该是用TCL脚步语言写的.(升级学习) 第二点:关于在modelsim添加altera仿真库的问题 在网上看到很多关于这方面的资料,但都是比较老的,然后我发现他们想要添加的库基本已经添加在新版 

Cocos2d-x 3.1.1 学习日志13--物理引擎登峰造极之路

cocos2dx在设计之初就集成了两套物理引擎,它们是box2d和chipmunk.我目前使用的是最新版的cocos2dx 3.1.1.引擎中默认使用的是chipmunk,如果想要改使用box2d的话,需要修改对应的android工程或者是ios工程的配置文件. 在2.x版本的cocos中,使用物理引擎的步骤十分繁琐.但在3.x版本中变得非常方便了.我这次的学习目标是制作一个打砖块的小游戏. 首先,现在的Scene类提供了一个静态工厂方法,用以创造一个集成物理引擎的场景. Scene::init

Cocos2d-x 3.1.1 学习日志13--CocosStudio学习必看

听说Cocos Studio很久了,主要是因为骨骼动画.目前看来Cocos2d-x播放动画的方式只有2种: 第一种:是播放序列帧动画,即将动画的每一帧都加载进缓存里,需要播放时再使用Animation类来播放,这种方法简单暴力,应对一些细节要求低的动画场景的时候,这么干无伤大雅.但是当动画帧数稍高的时候就会需要大量的图片,消耗资源很大. 第二种:是由Cocos2d-x提供的Action类来播放动画,这种动画是在帧循环中靠调整每次渲染的坐标来打到动画效果,由于帧循环是1/60秒刷新一次,会让这样播

一个新菜鸟的ACM 感想及学习日志

感想:忘记了是什么时候喜欢上ACM的,也许是被坑上来的,也许是自己默默地喜欢上的.我忘不了第一次来我们学校的培训基地的时候,打的是洪菊学姐(虽然她不是ACMer)的电话,第一个见到的是我们集训队的队长周海.第一次敲成功的代码是军哥教会我敲得算1-50的累加.第一次训练是军训完之后国庆假期期间.那一周之后,我从从来没接触过编程语言到一个学期都不用担心C语言了! 本来老师宣传ACM的时候,我是想和班上的胡灿明(数学不错).左太平(英语大神)组一个队的,但是他们都表示对这个没兴趣.国庆后,跟花姐谈了谈

孤荷凌寒自学python第八十三天初次接触ocr配置tesseract环境

(完整学习过程屏幕记录视频地址在文末) 学习Python我肯定不会错过图片文字的识别,当然更重要的是简单的验证码识别了,今天花的所有时间都用于寻找最偷懒的方式来解决这一经典问题. 结果发现,还是大名鼎鼎的[tesseract]是最受欢迎的,于是就着手配置tesseract的相关环境. 今天的主要操作都是在windows10的64位系统下进行的. 一.第一步,安装tesseract-ocr在windows64位下的版本 我把这理解为环境配置. 首先在github的tesseract的安装指引页面去

我的游戏学习日志61———类型游戏策划(2.4)—益智游戏(4)

我的游戏学习日志61———类型游戏策划(2.4)—益智游戏(4) 记录:更新频率下降. 原因:大三期中考时期. 3.益智游戏的设计步骤(一共8项,前四项核心规则,后四项重点过程) (1)找出灵感 特点:益智游戏灵感可以在各种资源中寻找. 获取灵感的渠道: <1>参考传统游戏和其他益智游戏 <2>从艺术品.故事.小说等媒介中寻找头绪 <3>从某种机械动力中发现灵感(例如:轮滑物体.旋转按钮.平衡.反弹.接触.传送等) <4>从现实生活中令人棘手的问题中获得灵感