1. 准备数据源

摘录了一片散文,保存格式为utf-8

2. 准备环境

2.1 搭建伪分布式环境

https://www.cnblogs.com/cjq10029/p/12336446.html

上传数据源文件到hdfs中创建的in目录下

2.2 下载相关资源

下载hadoop277

链接:https://pan.baidu.com/s/1xeZx4AVxcjU33hoMLvOojA

提取码:mxic

下载hadoop可执行程序 winutils.exe

链接:https://pan.baidu.com/s/1mPsKk3_TgynAKfJN-kkjSw

提取码:3bfe

2.3 配置环境

2.3.1 配置hadoop的bin和sbin的环境变量

2.3.2 配置Administator访问权限

#两种方式都可
#2.3.2.1 关闭访问权限
<property> #core-site.xml
<name>dfs.permissions</name>
<value>false</value>
</property> #2.3.2.2 授权
hadoop fs -chmod 777 文件路径

2.4 将资源放到对应位置

1.将hadoopBin.rar中的所有文件拷到hadoop的bin文件夹下

2.将hadoop-2.7.7/share/hadoop里common,hdfs,mapreduce,yarn四个文件夹下的jar包加入到项目中

3. 准备代码

3.1 开发Map类(继承Mapper类)

public class WordCountMapper extends Mapper<LongWritable,Text,Text,IntWritable>{
@Override
protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context)
throws IOException, InterruptedException {
//从文本中读出一行
String line = value.toString();
//将这一行字符串变成字符数组
char[] charArray = line.toCharArray();
//遍历每一个字符
for(char a:charArray) {
//将字符以 字符 1 的格式一行行输出到临时文件中
context.write(new Text(a+""), new IntWritable(1));
//注:MapReduce中有自己的数据类型,需进行转换
}
}
}

3.2 开发Reduce类(继承Reduce类)

public class WordCountReduce extends Reducer<Text, IntWritable, Text, IntWritable>{

	@Override
protected void reduce(Text key, Iterable<IntWritable> values,
Reducer<Text, IntWritable, Text, IntWritable>.Context content) throws IOException, InterruptedException {
//设计一个变量统计总数
int num = 0;
//遍历数据中整数部分
for(IntWritable v:values) {
//get()获得int类型的整数,然后累加
num += v.get();
}
//以 字符 总数 的格式输出到指定文件夹
content.write(key, new IntWritable(num));
}
}

3.3 开发Driver类

public class WordCountDriver{
public static void main(String[] arge) {
System.setProperty("hadoop.home.dir", "F:\\Linux\\hadoop-2.7.7");
//配置访问地址
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://192.168.3.8:9000");
try {
//获得job任务对象
Job job = Job.getInstance(conf);
//设置driver类
job.setJarByClass(WordCountDriver.class);
//设置Map类
job.setMapperClass(WordCountMapper.class);
//设置Map类输出的key数据的格式类
job.setMapOutputKeyClass(Text.class);
//设置Map类输出的value数据的格式类
job.setMapOutputValueClass(IntWritable.class);
//设置Reduce类 如果Reduce类输出格式类与Map类的相同,可不写
job.setReducerClass(WordCountReduce.class);
//设置Map类输出的key数据的格式类
job.setOutputKeyClass(Text.class);
//设置Map类输出的value数据的格式类
job.setOutputValueClass(IntWritable.class);
//设置被统计的文件的地址
FileInputFormat.setInputPaths(job, new Path("/in/bob.txt"));
//设置统计得到的数据文件的存放地址
//注:文件所在的文件夹需不存在,由系统创建
FileOutputFormat.setOutputPath(job, new Path("/out/"));
//true表示将运行进度等信息及时输出给用户,false的话只是等待作业结束
job.waitForCompletion(true);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

4. 统计结果

5. 相关问题

5.1 问题一

Input path does not exist: file:/in/bob.txt

解决:检查访问地址及相关配置

5.2 问题二

解决:环境变量没配置好或还没生效(选择以下其中一种即可)

  1. 配置好hadoop环境变量,重启eclipse
  2. 加入代码System.setProperty("hadoop.home.dir", "F:\Linux\hadoop-2.7.7"),见reduce类代码

5.3 问题三

解决:见上文2.3.2

5.4 问题四

中文乱码

解决:

1.确保eclipse编码格式为utf-8

2.数据源文件保存格式为utf-8

3.使用转换流,字节流转字符流:new OutputStreamWrite(out,"UTF-8")

6. 拓展

6.1 打jar包

  1. 将FileInputFormat.setInputPaths(job, new Path("/in/bob.txt"))地址改为"/in/",统计in目录下所有文件
  2. 将此项目打成jar包上传到Linux系统/opt/test目录下
  3. 运行jar包,代码:hadoop jar jar包名 ,便可得到统计结果
  4. 以后便可将数据源文件放置于in文件夹中,直接运行jar包进行统计(统计前需删掉hdfs中的out文件夹)

6.2 使用hadoop-eclipse插件开发

6.2.1 下载hadoop-eclipse-plugin

链接:https://pan.baidu.com/s/1mC2KaCMxCmrYL5_RaGTI2w

提取码:zgqg

将该插件放入eclipse的plugin文件夹中

6.2.2 设置hadoop地址

6.2.3 创建项目

6.2.3.1 创建map/reduce项目



自动添加相关jar包

6.2.3.2 创建对应类



自动写入对应方法(可修改参数格式),如

6.2.4 设置MapReduce









右键点击,选择操作,上传数据源文件或查看文件都便捷许多

MapReduce 简单数据统计的更多相关文章

  1. MongoDB 的 MapReduce 大数据统计统计挖掘

    MongoDB虽然不像我们常用的mysql,sqlserver,oracle等关系型数据库有group by函数那样方便分组,但是MongoDB要实现分组也有3个办法: * Mongodb三种分组方式 ...

  2. MapReduce处理简单数据

    首先要说明的是,关于老师给的实验要求,我在网上看到了原文,原文地址:https://blog.csdn.net/qq_41035588/article/details/90514824,有兴趣的同学可 ...

  3. 用 python实现简单EXCEL数据统计

    任务: 用python时间简单的统计任务-统计男性和女性分别有多少人. 用到的物料:xlrd 它的作用-读取excel表数据 代码: import xlrd workbook = xlrd.open_ ...

  4. python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图

    python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 # coding=utf-8 from openpyxl import load_workbook ...

  5. 用python实现简单EXCEL数据统计的实例

    用python实现简单EXCEL数据统计的实例 下面小编就为大家带来一篇用python实现简单EXCEL数据统计的实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 任 ...

  6. MapReduce实战:统计不同工作年限的薪资水平

    1.薪资数据集 我们要写一个薪资统计程序,统计数据来自于互联网招聘hadoop岗位的招聘网站,这些数据是按照记录方式存储的,因此非常适合使用 MapReduce 程序来统计. 2.数据格式 我们使用的 ...

  7. 有关“数据统计”的一些概念 -- PV UV VV IP跳出率等

    有关"数据统计"的一些概念 -- PV UV VV IP跳出率等 版权声明:本文为博主原创文章,未经博主允许不得转载. 此文是本人工作中碰到的,随时记下来的零散概念,特此整理一下. ...

  8. PHP+Mysql+jQuery实现地图区域数据统计-展示数据

    我们要在地图上有限的区块内展示更多的信息,更好的办法是通过地图交互来实现.本文将给大家讲解通过鼠标滑动到地图指定省份区域,在弹出的提示框中显示对应省份的数据信息.适用于数据统计和地图区块展示等场景. ...

  9. 【转载】国内网站博客数据统计选免费Google Analytics还是百度统计

    [转载]国内网站博客数据统计选免费Google Analytics还是百度统计 Google Analytics谷歌统计是我用的第一个网站统计工具,当然现在也一直在用.Google Analytics ...

随机推荐

  1. VB6制作的自定义ocx控件

    下载后,解压缩,有一个TreeviewExplorer.ocx文件 在Excel的开发工具选项卡,点击插入ActiveX控件 VBA窗体,VB6窗体.VB.Net窗体都可以使用这个自定义控件的功能. ...

  2. 如何处理xml文件!看看这里

    XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument. ...

  3. [LC] 59. Spiral Matrix II

    Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral ord ...

  4. 吴裕雄 python 神经网络——TensorFlow 卷积神经网络水果图片识别

    #-*- coding:utf- -*- import time import keras import skimage import numpy as np import tensorflow as ...

  5. Django使用DjangoUeditor教程

    文章目录 1.将下在DjangoUeditor解压2.将解压的文件夹复制到项目的根目录中,这里使用的是虚拟环境3.进入到DjangoUedior3-master文件下,执行离线安装命令 python ...

  6. 林轩田机器学习基石课程学习笔记5 — Training versus Testing

    上节课,我们主要介绍了机器学习的可行性.首先,由NFL定理可知,机器学习貌似是不可行的.但是,随后引入了统计学知识,如果样本数据足够大,且hypothesis个数有限,那么机器学习一般就是可行的.本节 ...

  7. FFT(快速傅里叶变换) 模板

    洛谷 P3803 [模板]多项式乘法(FFT)传送门 存个板子,完全弄懂之后找机会再写个详解. #include<cstdio> #include<cmath> struct ...

  8. 网络TCP/IP分层、子网掩码等基本概念

    一.TCP/IP分层: OSI七层网络模型 TCP/IP四层概念模型 对应网络协议 应用层(Application) 应用层 HTTP.TFTP, FTP, NFS, WAIS.SMTP 表示层(Pr ...

  9. 无标定量|有标定量|谱图计数|XIC|AMT数据库|RT对对齐|母离子|子离子|SILVER|SRM|iBAQ|APEX|差异蛋白筛选|MaxQuant|PANDA|C-HPP

    生物医学大数据-蛋白质定量 现今肽段定量效率存在巨大差异.比如相同质量蛋白质,但是肽段和蛋白信号不均一,在物理条件一致时,仅有70%的重复率,并且当重复次数变多时,overlapping在变少. 无标 ...

  10. 吴裕雄--天生自然HTML学习笔记:HTML 简介

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...