大数据处理技术:MapReduce综合实训

news2024/9/28 0:13:33

目录

1 实验名称

2 实验目的

3 实验内容

4 实验原理

5 实验过程或源代码

5.1 WordCount词频统计

5.2 HDFS文件读写

5.3 倒排索引

5.4 网页排序——PageRank算法

6 实验结果

6.1 WordCount词频统计

6.2 HDFS文件读写

6.3 倒排索引

6.4 网页排序——PageRank算法


1 实验名称

       MapReduce综合实训

2 实验目的

       1.了解什么是MapReduce框架。

       2、理解MapReduce编程思想,学会编写MapReduce版本WordCount,会执行该程序,可以自行分析执行过程。

       3、理解MapReduce编程思想,学会编写MapReduce版本计数器程序,并能执行该程序和分析执行过程

3 实验内容

       (1)WordCount词频统计

       (2)HDFS文件读写

       (3)倒排索引

       (4)网页排序——PageRank算法

4 实验原理

       MapReduce的思想核心是“分而治之”,适用于大量复杂的任务处理场景(大规模数据处理场景)。Map负责“分”,即把复杂的任务分解为若干个“简单的任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算,彼此间几乎没有依赖关系。Reduce负责“合”,即对map阶段的结果进行全局汇总。这两个阶段合起来正是MapReduce思想的体现。

       MapReduce是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和自带默认组件整合成–个完整的分布式运算程序,并发运行在Hadoop集上。既然是做计算的框架,那么表现形式就是有个输入( input ),MapReduce 操作这个输入( input),通过本身定义好的计算模型,得到一个输出(output)。

5 实验过程或源代码

5.1 WordCount词频统计

       1.在主函数main中已初始化hadoop的系统设置,包括hadoop运行环境的连接。补全map函数内容,代码实现如下:

StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
  word.set(itr.nextToken());
  context.write(word, one);
}   

       2.在main函数中,已经设置好了待处理文档路径(即input),以及结果输出路径(即output)。补全reduce对<k2, list(v2)> 进行合计得到list(<k3,v3>)过程,代码实现如下:

int sum = 0;
for (IntWritable val : values) {
  sum += val.get();
}

       3.在main函数中,已经声明了job对象,程序运行的工作调度已经设定好。将list(<k3,v3>)统计输出,代码实现如下:

result.set(sum);
context.write(key, result);

       4.为job设置类,代码实现如下:

job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);//为job设置Combiner类
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);

5.2 HDFS文件读写

       1.在主函数main中已获取hadoop的系统设置,并在其中创建HDFS文件。在main函数中,指定创建文档路径。根据提示补全文件创建过程,代码实现如下:

Configuration conf = new Configuration();  //实例化设置文件,configuration类实现hadoop各模块之间值的传递
     FileSystem fs = FileSystem.get(conf);  //是hadoop访问系统的抽象类,获取文件系统, FileSystem的get()方法得到实例fs,然后fs调动create()创建文件,open()打开文件       
     System.out.println(fs.getUri());
     Path file = new Path("/user/hadoop/myfile");

       2.添加读取文件输出部分,补全使用文件流将字符写入文件过程,使用outStream.writeUTF()函数,代码实现如下:

FSDataOutputStream outStream = fs.create(file); //获取文件流 
outStream.writeUTF("china cstor cstor cstor china"); //使用文件流写入文件内容

       3.补全读取文件内容,代码实现如下:

FSDataInputStream inStream = fs.open(file);  
String data = inStream.readUTF();

5.3 倒排索引

       1.在主函数main中已初始化hadoop的系统设置,包括hadoop运行环境的连接。用hashmap定义的方法统计每一行中相同单词的个数,key为行值是每一行对应的偏移,代码实现如下:

for(;itr.hasMoreTokens(); )   
{     
   word=itr.nextToken();  
   if(hashmap.containsKey(word)){  
      hashmap.put(word,hashmap.get(word)+1);  
}else{  
      hashmap.put(word, one);                         
   }  
}

       2.在main函数中,已经设置好了待处理文档路径(即input),以及结果输出路径(即output)。合并mapper函数的输出,并提取“文件@1”中‘@’后面的词频,以<K2,list(“单词 文件名@出现频次”)>的格式输出,代码实现如下:

String fileName="";  
    int sum=0;  
    String num;  
    String s;  
    for (Text val : values) {  

       s= val.toString();  
       fileName=s.substring(0, val.find("@"));  
       num=s.substring(val.find("@")+1, val.getLength());      //提取“doc1@1”中‘@’后面的词频  
       sum+=Integer.parseInt(num);  
       }  
       IntWritable frequence=new IntWritable(sum);  
       context.write(key,new Text(fileName+"@"+frequence.toString()));

       3.在main函数中,已经声明了job对象,程序运行的工作调度已经设定好。输出最终键值对list(K3,“单词", “文件1@频次; 文件2@频次,代码实现如下:

context.write(key, new Text(all.toString()));

       4.为job设置Combiner类,代码实现如下:

job.setCombinerClass(InvertedIndexCombiner.class);

       5.设置输出value的类型,代码实现如下:

job.setOutputValueClass(Text.class);

5.4 网页排序——PageRank算法

       1.通过url判断否则是外链pr,作计算前预处理;补全用完整PageRank计算公式计算输出过程,q取0.85,代码实现如下:

for(Text val:values)  
    {  
           //发现_标记则表明是url,否则是外链pr,要参与计算  
        if(!val.toString().contains("_"))  
        {  
          sum=sum+Double.valueOf(val.toString());  
         }  
         else  
         {  
            url=val.toString();  
          }  
        }  
        pr=0.15+0.85*sum;  
        String str=String.format("%.3f",pr);  
        result.set(new Text(str+" "+url));  
        context.write(key,result);

       2.为job设置Combiner类,代码实现如下:

job.setCombinerClass(MyReducer.class);

6 实验结果

6.1 WordCount词频统计

6.2 HDFS文件读写

6.3 倒排索引

6.4 网页排序——PageRank算法

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

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

相关文章

无人机飞手教员组装、调试高级教学详解

随着无人机技术的飞速发展&#xff0c;其在航拍、农业、救援、监测等多个领域的应用日益广泛&#xff0c;对专业无人机飞手的需求也随之增加。作为无人机飞手教员&#xff0c;掌握无人机的高级组装、调试技能不仅是教学的基础&#xff0c;更是培养学生成为行业精英的关键。本教…

面试官问:你为什么对这个职位感兴趣?

当面试官问到你为什么对某个职位感兴趣时&#xff0c;你的回答应该反映出你对该职位的热情&#xff0c;以及你如何能够为公司带来价值。 重点&#xff1a;在面试前一定要去研究下这家公司&#xff0c;包括他们的团队&#xff0c;文化&#xff0c;产品&#xff0c;服务等各个方…

SOMEIP_ETS_109: SD_Do_not_specify_a_port

测试目的&#xff1a; 验证DUT能够拒绝不包含端口号&#xff08;端口号为0&#xff09;的SubscribeEventgroup消息。 描述 本测试用例旨在确保DUT遵循SOME/IP协议&#xff0c;当接收到没有指定端口的SubscribeEventgroup消息时&#xff0c;能够正确地拒绝该订阅尝试。 测试…

单链表各种接口的实现(C)

顺序表的优缺点 顺序表的问题 头部和中部的插入删除效率都不行&#xff0c; O ( N ) O(N) O(N)空间不够了&#xff0c;扩容有一定消耗&#xff08;尤其是异地扩容&#xff09;开新空间&#xff0c;拷贝数据&#xff0c;释放旧空间扩容逻辑&#xff0c;可能还存在空间浪费 多扩…

Springboot项目总结

1.为了调用写在其他包里面的类的方法 但是不使用new来实现调用这个类里面的方法&#xff0c;这个时候我们就需要将这个类注入到ioc容器里面&#xff0c;通过ioc容器来实现自动生成一个对象。 对ioc容器的理解&#xff1a;自动将一个对象实现new. 考察了and 和 or组合使用&…

vscode技巧-eslint配置

开发环境 jsvue3axios 下载插件 Eslint、Prettfier 配置过程 1.配置eslint 进入settings&#xff0c;输入eslint&#xff0c;在settings.json中替换一下文件 // #每次保存的时候自动格式化 {"editor.codeActionsOnSave": {"source.fixAll.eslint": &…

海康威视摄像机和录像机的监控与回放

文章目录 海康威视摄像机和录像机的监控与回放1、海康威视监控设备简介1.1、摄像机二次开发1.1.1&#xff1a;协议选择1.1.2&#xff1a;ffmpeg软件转流 2、各种流媒体协议介绍2.1&#xff1a;流媒体协议介绍2.1.1&#xff1a;RTSP (实时流传输协议)2.1.2&#xff1a;RTMP (实时…

Java语言程序设计基础篇_编程练习题**18.26 (创建一个迷宫)

目录 题目&#xff1a;**18.26 (创建一个迷宫) 习题思路 代码示例 输出结果 题目&#xff1a;**18.26 (创建一个迷宫) 编写一个程序&#xff0c;在迷宫中寻找一条路径&#xff0c;如图18-13a所示。该迷宫由一个8 x 8 的棋盘表示。路径必须满足下列条件&#xff1a; 路径在迷…

日志收集工具 Fluentd vs Fluent Bit 的区别

参考链接&#xff1a; FluentdFluentd BitFluentd & Fluent Bit | Fluent Bit: Official Manual Fluentd 与 Fluent Bit 两者都是生产级遥测生态系统&#xff01; 遥测数据处理可能很复杂&#xff0c;尤其是在大规模处理时。这就是创建 Fluentd 的原因。 Fluentd 不仅仅是…

国产化中间件正在侵蚀开源中间件

开源中间件的发展趋势表明&#xff0c;它们将继续在技术创新和生态建设中发挥重要作用&#xff0c;尤其是在云计算、大数据等新兴技术领域。开源中间件如Apache Kafka、RabbitMQ、ActiveMQ和RocketMQ等在市场上有着广泛的应用。它们在技术社区中得到了良好的支持&#xff0c;并…

k8s中控制器的使用

目录 一、什么是控制器 二、控制器常用类型 三、replicaset控制器 1、replicaset功能 2、replicaset参数说明 3、replicaset示例 四、deployment控制器 1、deployment控制器的功能 2、deployment控制器示例 &#xff08;1&#xff09;版本迭代 &#xff08;2&#x…

MySql的基础讲解

一、初识MySql 数据库&#xff1a;按照数据结构来组织、存储和管理数据的仓库&#xff1b;是一个长期存储在计算机内的、有组织的、可共享 的、统一管理的大量数据的集合&#xff1b; OLTP&#xff1a;联机事务处理&#xff0c;主要是对数据库的增删改查。 OLTP 主要用来记录…

【研赛论文】数学建模2024华为杯论文word/latex模板

国赛结束&#xff0c;研究生瞩目的研赛马上就要来了&#xff0c;相信研究生同学也是在努力的准备当中&#xff0c;在这里祝愿大家能够获得一个好的名次。一举冲出重围&#xff0c;拿下国奖。在数模比赛当中&#xff0c;论文是参赛者唯一能够与评阅老师进行沟通的方式&#xff0…

【Python爬虫系列】_021.异步请求aiohttp

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈

本地部署大模型并使用知识库Windows下Ollama+Docker+MaxKB安装的记录

概要 本文介绍本地部署大模型和知识库的小白方法&#xff0c;可以运行较多种类的大模型&#xff0c;使用的软件为docker和ollama以及MaxKb作为知识库前端。 下载 各安装包可以百度去官网或者github下载或使用&#xff0c;也可以点击下面的的链接和我下载相同的版本。 ollama…

uniapp child.onFieldChange is not a function

uni-forms // 所有子组件参与校验,使用 for 可以使用 awiatfor (let i in childrens) {const child childrens[i];let name realName(child.name);if (typeof child.onFieldChange function) {const result await child.onFieldChange(tempFormData[name]);if (result) {…

如何准备教师资格证科目三“学科知识与教学能力”的考试与面试?(理科导向:数学/物理)

如何准备教师资格证科目三“学科知识与教学能力”的考试与面试&#xff1f;&#xff08;理科导向&#xff1a;数学/物理&#xff09; ​ 目录 收起 1 前言 1.1 自身经历 1.2 教师资格证的作用 2 知识点题型分数的分布与学习建议 2.1 科目三的知识点分数分布&#xff1a; …

Python 全栈系列271 微服务踩坑记

说明 这个坑花了10个小时才爬出来 碰到一个现象&#xff1a;将微服务改造为并发后&#xff0c;请求最初很快&#xff0c;然后就出现大量的失败&#xff0c;然后过一会又能用。 过去从来没有碰到这个问题&#xff0c;要么是一些比较明显的资源&#xff0c;或者逻辑bug&#xff0…

Matlab simulink建模与仿真 第十三章(信号通路库)

参考视频&#xff1a;simulink1.1simulink简介_哔哩哔哩_bilibili 一、信号通路库中的模块概览 1、信号通路组 注&#xff1a;部分模块在第二章中有介绍&#xff0c;本章不再赘述。 2、信号存储和访问组 二、总线分配模块 Bus Assignment模块接受总线作为输入&#xff0c;并…

Python之NumPy超详细学习指南:从入门到精通(上篇)

文章目录 Python NumPy学习指南&#xff1a;从入门到精通第一部分&#xff1a;NumPy简介与安装1. 什么是NumPy&#xff1f;2. 安装NumPy使用pip安装&#xff1a;使用Anaconda安装&#xff1a; 第二部分&#xff1a;NumPy数组基础1. NumPy数组的创建从列表创建一维数组&#xff…