MapReduce编程:单词计数

文章目录

  • MapReduce编程:单词计数
  • 1、实验描述
  • 2、实验环境
  • 3、相关技能
  • 4、相关知识点
  • 5、实现效果
  • 6、实验步骤
  • 7、参考答案
  • 8、总结

1、实验描述

  • 使用mapreduce编程,完成单词计数
  • 实验时长:90分钟
  • 主要步骤:
    • 启动Hadoop集群
    • 编写代码
    • 打包程序,并提交至HDFS运行
    • 查看实验结果文件

2、实验环境

  • 虚拟机数量:3
  • 系统版本:Centos 7.5
  • Hadoop版本:Apache Hadoop 2.7.3
  • Eclipse版本:Neon.3 4.6.3

3、相关技能

  • JavaSE基础
  • MapReduce编程

4、相关知识点

  • 配置开发环境
  • 编写Mapper类
  • 编写Reducer类
  • 编写main函数
  • 程序打jar包
  • 将jar包运行在hadoop集群上

5、实现效果

  • 效果图:展示结果为成功对文件中的单词进行了单词计数

6、实验步骤

6.1进入虚拟机并启动Hadoop集群

6.1.1在master启动Hadoop集群

[zkpk@master ~]$ start-all.sh

6.1.2在master上运行jps,确认NameNode, SecondaryNameNode, ResourceManager进程启动

6.1.3在slave01上运行jps,确认DataNode, NodeManager进程启动

6.1.4在slave02上运行jps,确认DataNode, NodeManager进程启动

6.2启动Eclipse客户端

[zkpk@master ~]$ cd eclipse/[zkpk@master eclipse]$ ./eclipse

6.3在Eclipse客户端主界面中左侧空白处右击,依次选择New->Project,选择Java Project点击Next

6.3.1在弹出的对话框中定义工程名为hadoop,然后点击Finish完成创建,弹出询问是否将Java Project设置为常用工程项目时,点击Yes即可

6.3.2在工程名上单击鼠标右键点击依次选择Build Path ->Configure Build Path

6.3.3在弹出窗口中,进入Libraries模块,再点击Add External Jars导入实验相关jar包

6.3.4将hadoop主目录中的share/hadoop/common中的jar包导入,然后再次点击Add External JARs将share/hadoop/common/lib文件夹中的所有jar包导入

6.3.5将hadoop主目录中的share/hadoop/hdfs中的jar包导入,然后再次点击Add External JARs将share/hadoop/hdfs/lib文件夹中的所有jar包导入

6.3.6将hadoop主目录中的share/hadoop/mapreduce中的jar包导入,然后再次点击Add External JARs将share/hadoop/mapreduce/lib文件夹中的所有jar包导入

6.3.7将hadoop主目录中的share/hadoop/yarn中的jar包导入,然后再次点击Add External JARs将share/hadoop/yarn/lib文件夹中的所有jar包导入

6.3.8所有jar包导入完成,在Build Path点击OK按钮完成环境配置

6.4创建Wordcount的Mapper类

6.4.1首先在工程目录中的src文件夹上右击,依次选择New->Package,创建名字是org.zkpk.hadoop.wordcount的package

6.4.2右键点击Package包名,依次选择New->Class,在此package中创建mr编程中的mapper类

6.4.2.1弹出对话框,定义类名为WordMap

6.4.2.2WordMap类继承Mapper类,Mapper类的输入键值对中键是Object类型,值是Text类型;输出键值对中键是Text类型,值是IntWritable类型

6.4.3覆写Mapper类中的map方法

6.4.3.1map方法第一个参数key表示当前所读的这一行数据行首的文本偏移量

6.4.3.2第二个参数value表示当前所读的这一行文本

6.4.3.3在map方法中编写代码读取数据的每一行,将value转换成string类型,再按照字段之间的分隔符进行切分,得到一个字符串数组

6.4.3.4使用for循环对单词数组进行遍历,将每次遍历得到的单词包装成Text类型,1包装成Intwritable类型,分别作为输出的key和value

6.5创建Wordcount中的Reduce类

6.5.1右键点击包名,依次选择New->Class,在名为org.zkpk.hadoop.wordcount的package中创建reducer类

6.5.1.1弹出对话框,定义类名为WordReduce,点击Finish完成创建

6.5.1.2WordReduce类继承Reducer类,Reducer类的输入键值对中键是Text类型,值是IntWritable类型(与Mapper输出的键值对类型分别一致);输出键值对中键是Text类型,值是IntWritable类型

6.5.2覆写Reducer类中的reduce方法

6.5.2.1reduce会将相同key的键值对汇聚到一个reduce task中

6.5.2.2第一个参数key表示单词,类型对应Mapper的输出key类型

6.5.2.3第二个参数Values表示当前key对应的所有value集合,集合元素类型对应于Mapper的输出value类型

6.5.2.4对values进行遍历,将每次遍历的数值进行累加到一个变量,例如:sum

6.5.2.5结束遍历,将参数key作为输出的键值对中的键,将sum包装成IntWritable类型作为输出键值对中的值,使用context的write方法写出

6.6创建Wordcount中包含main方法的类

6.6.1右键点击包名依次选择New->Class,在名为org.zkpk.hadoop.wordcount的package中创建包含MapReduce的main方法的类

6.6.1.1定义类名为WordMain

6.6.1.2在类WordMain中创建main方法,在main方法中使用if语句判断传入的参数格式是否正确,如果不正确则退出程序(这里我们的代码需要接受两个参数作为输入和输出路径)

6.6.1.3生成Configuration类型对象

6.6.1.3利用Configuration对象生成job对象

6.6.1.4调用job的setJarByClass方法设置job运行主类

6.6.1.5通过setInputFormatClass方法设置job输入格式,setOutputFormatClass方法设置job输出格式

6.6.1.6通过setInputPaths、setOutputPath方法设置job的输入、输出路径

6.6.1.7通过setMapperClass、setReducerClass方法设置Map/Reduce阶段的类

6.6.1.8通过setOutputKeyClass、setOutputValueClass方法设置最终输出key/value的类型

6.6.1.9通过waitForCompletion方法提交job

6.7程序打jar包

6.7.1右击工程名,点击export,在弹出窗口中,选择java的 JAR file点击Next,如图:

6.7.2指定导出的jar包的位置及名字然后点击Finish,如图:

6.7.3导出完成后,关闭eclipse然后返回指定目录查看,如图所示

6.8运行jar包

6.8.1上传输入数据

6.8.1.1从Hadoop的公共目录下拷贝数据文件test.txt到/home/zkpk

[zkpk@master ~]$ cp ~/experiment/test.txt ~/

6.8.1.2将上一步拷贝的数据文件test.txt上传到HDFS的根目录

[zkpk@master ~]$ hadoop fs -put /home/zkpk/test.txt /

6.8.2查看是否上传成功

[zkpk@master ~]$ hadoop fs -ls /

6.8.3运行jar包,指定包名及主类名,然后指定输入路径参数和输出路径参数(该参数都是在HDFS上,且输出路径即word文件夹不能够已存在)

[zkpk@master ~]$ hadoop jar /home/zkpk/wordcount.jar org.zkpk.hadoop.wordcount.WordMain /test.txt /word

6.8.4查看输出目录

[zkpk@master ~]$ hadoop fs -ls /word/

6.8.5查看输出结果

[zkpk@master ~]$ hadoop fs -cat /word/part-r-00000

7、参考答案

  • 代码清单org.zkpk.hadoop.wordcount.WordMain

  • 代码清单org.zkpk.hadoop.wordcount.WordMap

图 53

  • 代码清单org.zkpk.hadoop.wordcount.WordReduce

8、总结

完成本实验可掌握用mapreduce计算框架对数据做基本分布式处理。

MapReduce编程:单词计数--《大数据基础教程》相关推荐

  1. 大数据基础教程丨TiDB数据库从入门到实践

    TiDB 是一款定位于联机事务处理/联机分析处理( HTAP: Hybrid Transactional/Analytical Processing)的融合型数据库产品,实现了一键水平伸缩,强一致性的 ...

  2. mapreduce编程规范_大数据之MapReduce详解

    今天要讲的是MapReduce 目录 今天先总体说下MapReduce的相关知识,后续将会详细说明对应的shuffle.mr与yarn的联系.以及mr的join操作的等知识.以下内容全是个人学习后的见 ...

  3. 大数据基础之Hadoop(三)—— MapReduce

    作者:duktig 博客:https://duktig.cn (文章首发) 优秀还努力.愿你付出甘之如饴,所得归于欢喜. 本篇文章源码参看:https://github.com/duktig666/b ...

  4. 大数据基础编程第二版(林子雨)官网,代码与软件资源

    官网:大数据基础编程.实验和案例教程(第2版)教材官网_厦门大学数据库实验室 (xmu.edu.cn) 教材对应使用软件.代码,百度网盘:百度网盘 请输入提取码 (baidu.com) 提取码请至官网 ...

  5. 大数据Hadoop教程-学习笔记01【大数据导论与Linux基础】

    视频教程:哔哩哔哩网站:黑马大数据Hadoop入门视频教程,总时长:14:22:04 教程资源:https://pan.baidu.com/s/1WYgyI3KgbzKzFD639lA-_g,提取码: ...

  6. 大数据基础知识(下)

    大数据基础知识:技巧与概念 大数据伦理 匿名方面的挑战 保密性方面的挑战 大数据的来源和结构 人类生成的数据 机器生成的数据 结构化数据 非结构化数据 存储大数据 分布式存储与云 云计算:IaaS.P ...

  7. 大数据基础与应用课程总结

    课程链接:大数据技术基础课程_厦门大学数据库实验室  http://dblab.xmu.edu.cn/post/1089/ 课程里介绍了大数据的基本概念.大数据处理架构Hadoop.分布式文件系统HD ...

  8. 大数据Hadoop教程-学习笔记02【Apache Hadoop、HDFS】

    视频教程:哔哩哔哩网站:黑马大数据Hadoop入门视频教程 教程资源:https://pan.baidu.com/s/1WYgyI3KgbzKzFD639lA-_g 提取码: 6666 [P001-P ...

  9. 大数据基础入门 ------文章来源于:某个入门课程

    文章目录 第一课:大数据基础入门 什么是大数据? java和大数据的关系 学习大数据需要的基础和路线 第二课:Hadoop的背景起源 一 分布式存储 如何解决大数据的存储?(HDFS) 第三课: ha ...

最新文章

  1. python是如何进行内存管理的
  2. 使用tomcat搭建Jenkins环境(centos7.3)
  3. 痞子衡嵌入式:单片机AI的春天已来,ARM Cortex-M55发布了
  4. ASP.NET MVC3 快速入门-第四节 添加一个模型(转)
  5. 智慧城市特效(建筑颜色渐变、飞线、扫光、扫描、光墙、线路、水、道路线条、锥形标、漫游)three+shader
  6. (十六)java版b2b2c社交电商spring cloud分布式微服务-用restTemplate消费服务
  7. 3D视觉(二)四元数简要说明
  8. c语言int占几个字节 vc,int类型占几个字节
  9. [Asp.Net Core]Session的使用
  10. 将多个txt文件合并成一个
  11. OpenWrt路由器通过Aria2开启迅雷离线下载[图文教程]
  12. 2021最新Java JDK1.8的安装教程
  13. 如何激活微信里沉睡的客户?
  14. 全网最全 ECMAScript 攻略
  15. 【C语言】从零开始的C语言小游戏之路(总)
  16. CVPR 2022 Self-augmented Unpaired Image Dehazing via Density and Depth Decomposition个人学习笔记
  17. 他,1年9个月获清华博士学位,一作身份发27篇SCI,组队击败NASA打破“航天奥林匹克”欧美垄断...
  18. 软件测试如何提高测试的覆盖率,测试覆盖率是什么?
  19. 想听世界上最懂 JavaScript 的人和你讲JavaScript 吗?
  20. 相关高斯分布的MIMO信道矩阵的容量统计特征推导

热门文章

  1. Linux中查找文件夹的命令
  2. 佛言禅语-----生命的智慧
  3. cppCheck 结合 git 的检测脚本(持续更迭)
  4. php 32位 下载地址,php 32位官方下载
  5. 美国著名报刊杂志链接
  6. CSS 单位及其需要注意的地方
  7. 浅谈android网络框架——以课程格子的bug为例
  8. 十、Sklearn流形学习
  9. 机试记不住头文件_朱兆祺教你如何攻破C语言学习、笔试与机试的难点
  10. matlab如何去除上边和右边的刻度线?