Hadoop—MapReducer统计文件的单词出现的个数

 

1. MapReduce 统计文件的单词出现的个数

Mapper: 处理具体文本,发送结果
Reducer: 合并各个Mapper发送过来的结果
Job: 制定相关配置,框架

Mapper

package cn.itcast.hadoop.mr.wordcount;import java.io.IOException;import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.util.StringUtils;// 4个泛型中,前两个是指定mapper输入数据的类型
// map和 reducer的输入和输出都是key-value对的形式
// 默认情况下。框架输入的我们mapper的输入数据中,key是要处理的文本中的一行的起始偏移量, 内容就是value
public class WCMapper extends Mapper <LongWritable, Text, Text, LongWritable> {// 每读一次数据,就调一次这个方法
    @Overrideprotected void map(LongWritable key, Text value,  Context context)throws IOException, InterruptedException{//具体业务逻辑就像和在这里, 传入数据就是  key, value//将这一行的内容转化成string类型String line = value.toString();// 对这一行的文本按特定分隔符切分String[] words = StringUtils.split(line, ' ');// 便利这个单词数组, 输出为kv形式   k:单词  v:1for (String word : words) {context.write(new Text(word), new LongWritable(1));}}
}

Reducer

package cn.itcast.hadoop.mr.wordcount;import java.io.IOException;import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;public class WCReducer extends Reducer<Text, LongWritable, Text, LongWritable> {@Overrideprotected void reduce(Text Key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {long count = 0;for (LongWritable value:values) {count += value.get();}context.write(Key, new LongWritable(count));}
}

Job

package cn.itcast.hadoop.mr.wordcount;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.io.Text;
//import com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider.Text;public class WCRunner {public static void main(String[] args) throws Exception{Configuration conf = new Configuration();Job wcJob = Job.getInstance(conf);wcJob.setJarByClass(WCRunner.class);//本job使用的mapper和reducer类wcJob.setMapperClass(WCMapper.class);wcJob.setReducerClass(WCReducer.class);// 指定reduce的输出数据kv类型wcJob.setOutputKeyClass(Text.class);wcJob.setOutputValueClass(LongWritable.class);// 指定mapper的输出数据kv类型wcJob.setMapOutputKeyClass(Text.class);wcJob.setMapOutputValueClass(LongWritable.class);//指定要处理的输入数据存放路径FileInputFormat.setInputPaths(wcJob, new Path("/wc/srcdata/"));//指定处理结果的输出数据存放路径FileOutputFormat.setOutputPath(wcJob, new Path("/wc/output"));//将job提交给集群运行wcJob.waitForCompletion(true);}
}

2. Yarn资源调度框架

Resource Manager:
Node Manager:

 
1. wcJob.waitforCompleition启动一个RunJar进程,这个进程向RM申请执行一个Job
2. RM 返回一个Job相关资源的路径staging-dir,和为Job产生的jobID
3. RunJar提交资源到 HDFS的 staging-dir上
4. RunJar提交资源完毕之后,上报RM 提交资源完毕
5. RM下个Job加入RM中的任务队列中
6. 各个Node Manager通过通信,从RM的任务队列中领取任务
7. 各个Node Manager初始化  运行资源的容器,从staging-dir上面拉取资源
8. RM选择一个Node Manager 启动MRAppMaster 来运行map reducer
9. MRAppMaster向RM注册
10. MSAppMaster启动Mapper任务
11. MSAppMaster启动Reducer任务
12. 任务完成后, 向RM注销自己

3.几种运行模式
本地模型运行

在windows的eclipse里面直接运行main方法,就会将job提交给本地执行器locaJobRunner执行
– 输入输出数据可以放在本地路径下(c:/wc/src/data/)
– 输入输出数据也可以放在hdfs中(hdfs://hadoop1:9000/wc/srcdata)

在linux的ecllipse里面直接运行main 方法,则不需要添加yarn相关的配置,也会提交给localJobRunner执行
– 输入输出数据可以放在本地路径下(/home/hadoop/wc/srcdata)
– 输入输出数据也可以放在hdfs中(hdfs://hadoop1:9000/wc/srcdata)

集群模式运行

将工程打包成jar包, 上传到服务器,然后用hadoop命令提交 hadoop jar wc.jar cn.itcast.hadoop.mr.wordcount.WCRunner
在linux的eclipse中直接运行main方法,也可以提交到集群中去运行,但是,必须采取一下措施:
– 在工程src目录下加入mapred-site.xml 和yarn-site.xml
– 将工程打成jar包(wc.jar), 同时在main方法中添加一个conf的配置参数 conf.set(“mapreduce.job.jar”, “wc.jar”);

在windows的eclipse中直接运行main方法,也可以提交集群中运行,但是因为平台不兼容,需要做很多的设置修改
– 要在windows中存放一份hadoop的安装包(解压好的)
– 要将其中的lib和bin目录替换成根据你的windows版本重新编译出的文件
– 再要配置系统环境变量 HDOOP_HOME 和 PATH
– 修改YarnRunner这个类的源码

转载于:https://www.cnblogs.com/zemul/p/10820750.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

课堂作业2

1、动手动脑 阅读示例: EnumTest.java&#xff0c;运行它&#xff0c;分析运行结果&#xff1f;你能得到什么结论&#xff1f;你掌握了枚举类型的基本用法了吗&#xff1f; public class EnumTest {public static void main(String[] args) {Size sSize.SMALL;Size tSize.LARGE…

(转)详解Vs2008下打包安装程序的一些技巧(含win7下提权限、卸载以及安装时定向到网页)...

1、怎么使得程序窗口左上角和任务栏有图标&#xff0c;如下图所示&#xff1a; 其实这个问题不应该放到程序打包这部分讲&#xff0c;只不过对于一些初学者而言&#xff0c;在这提下也许会有很大的帮助&#xff08;想到自己刚学.net那会了&#xff0c;呵呵&#xff09;。方法之…

项目实战报异常Exception及决绝方案

1、报LifecycleException&#xff0c;再配置一下jdk即可&#xff0c;然后再手动添加maven 解决方法&#xff1a; 然后,手动添加jar包 2、maven 项目,右键maven build启动项目的时候&#xff0c;报下面错误&#xff0c;没有在pom配置tomcat7插件 3、报找不到beans插件:更新一下项…

世界主要遥感卫星

世界主要遥感卫星QuickbirdSpot-4Spot-4法国“太阳神”1A神舟飞船神舟飞船“哈勃”望远镜RADASAT神舟飞船国际空间站国际空间站 SPOT2Shutsacn IKONOS CBERS-1JersSpot-4 “哈勃”望远镜 CBERS-1 Landsat 5美国“KH-11”侦察卫星 Spot-5 ERS Landsat 7OrbView-3 美国间谍卫星…

VMware配置linux网络步骤

1.我们要用桥接网络模式 2.设置桥接网络&#xff0c;VMnet1或者VMnet0就是桥接网络&#xff0c;我们用的就是桥接 VMnet8是NAT 在上面的图配置好ip和dns&#xff0c;要与windowss是同一个网段&#xff0c;网关一般不设置 3.设置linux网络里面设置这4项&#xff0c;记住dns可以不…

使用IntelliJ书签

这是有关IntelliJ的精美书签功能的快速帖子。 IntelliJ使您可以为单行代码添加书签。 将某行添加为书签后&#xff0c;您可以使用多种方法直接跳回到该行。 因此&#xff0c;最好在您经常使用的代码位置添加书签。 要创建一个新书签&#xff0c;只需在代码编辑器中按F11键。 …

ECMA-335 (CLI) 标准 读书笔记——总结CLI类型系统(上)

看到类型系统的概述时&#xff0c;就忍不住按图索骥&#xff0c;想搞清楚CLI如何定义的整个类型系统。于是翻遍了整个标准&#xff0c;将类型系统中最核心的、与运行平台密切相关的类型定义与说明整理了出来&#xff0c;以供理清思路。 标准的第四部指出&#xff0c;CLI的核心是…

centos7安装openjdk8

首先&#xff0c;打开openjdk安装官网 http://openjdk.java.net/install/ 输入安装命令&#xff1a; su -c "yum install java-1.8.0-openjdk" 装完之后会有提示版本跟安装的路径&#xff1b;在/usr/lib/jvm下可以查看到对应的名字&#xff0c;ls-l 配置环境变量&…

CSB文件上传漏洞 -->Day4(图片挂马)

22二号&#xff0c;冬至啦&#xff0c;深圳这边只有5&#xff08;尊嘟好冷啊&#xff09;&#xff0c;写这篇文章的时候都已经是凌晨一点了&#xff0c;相信大部分的人都在温暖的被窝里面了吧&#xff01;&#xff01;&#xff08;可怜的我&#xff0c;还得写writeup&#xff0…

微信小程序禁止刷新之后苹果端还可以下拉的问题

一、问题描述 最近在做一个小程序项目&#xff0c;需要禁止下拉刷新&#xff0c;于是在page.json里面添加了这段话 "enablePullDownRefresh":false 全局关闭下拉刷新&#xff0c;这段话确实禁止了下拉刷新&#xff0c;无论是安卓手机端还是苹果端&#xff0c;但是在…

调试OpenJDK

knowyourmeme.com/photos/531557 THX为mihn 有时调试Java代码还不够&#xff0c;我们需要逐步了解Java的本机部分。 我花了一些时间来实现JDK的正确状态&#xff0c;所以简短的描述可能对开始旅行的人很有用。 我将使用全新的OpenJDK 9&#xff01; 首先&#xff0c;您必须通过…

算法题解:旋转数组的最小数字

题目描述 把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转&#xff0c;输出旋转数组的最小元素。 解题思路 将旋转数组对半分可以得到一个包含最小元素的新旋转数组&#xff0c;以及一个非递减排序的数组。新…

函数的自执行,变量提升和函数提升

其实之前虽然刚开始学习JavaScript的时候经常看到function add(){}、var addfunction(){}、function(){}之类的这种写法&#xff0c;但是具体是什么叫什么却没有去考虑过这个问题…… function add(){}这种写法叫做函数声明 var addfunction(){}这种写法叫做函数表达式 fun…

Python之机器学习-sklearn生成随机数据

sklearn-生成随机数据 import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties from sklearn import datasets %matplotlib inline font FontProperties(fname/Library/Fonts/Heiti.ttc) 多标签分类数据…

外汇游乐场

介绍 F X Playground是基于JavaFX的原型制作工具或实时编辑器&#xff0c;它消除了编译Java代码的步骤。 这个概念并不是什么新鲜事物&#xff0c;例如在网络世界中&#xff0c;有许多HTML5 游乐场提供在线编辑器&#xff0c;使开发人员可以快速原型化或尝试各种JavaScript库。…

轻轻松松看懂Spring AOP源码

轻轻松松看懂Spring AOP源码 https://baijiahao.baidu.com/s?id1596466083334197175&wfrspider&forpc 如果对spring的核心容器和JDK动态代理、CGLIB有所了解&#xff0c;接下来再看spring AOP源码会比较容易。文中所有代码片段截图对应的spring版本是5.0。 本文内容曾…

2015年,Web 进入移动时代

最近 Morgan Stanley 发布了一份87页的报告&#xff0c;对 Internet 的未来趋势进行预测&#xff0c;报告显示&#xff0c;移动 Web 目前发展迅猛&#xff0c;包括 Kindle, iPhone, 智能手机&#xff0c;平板电脑&#xff0c;GPS 设备&#xff0c;游戏机在内的无线设备呈爆炸式…

vue2.0移除或更改的一些东西

一、vue2.0移除了$index和$key 虽然说现在很多文章说他们的代码是vue2.0版本的&#xff0c;但是有一些仔细一看&#xff0c;发现并不全是2.0版本&#xff0c;有些语法还是1.0的版本&#xff0c;比如这个$index,$key&#xff0c;这两个压根就不是2.0的写法&#xff0c;2.0早就把…

Java Keystore教程

目录 1.简介 2. SSL及其工作方式 3.私钥 4.公开证书 5.根证书 6.证书颁发机构 7.证书链 8.使用Java keytool的密钥库 9.密钥库命令 10.在Apache Tomcat上使用密钥库和自签名证书配置SSL 1.简介 我们谁没有去ebay&#xff0c;亚马逊买东西或他的个人银行帐户来检查。 您是否认为…

spring AOP源码分析(一)

spring AOP源码分析&#xff08;一&#xff09; 对于springAOP的源码分析&#xff0c;我打算分三部分来讲解&#xff1a;1.配置文件的解析&#xff0c;解析为BeanDefination和其他信息然后注册到BeanFactory中&#xff1b;2.为目标对象配置增强行为以及代理对象的生成&#xff…