大数据----基于sogou.500w.utf8数据的MapReduce编程

目录

    • 一、前言
    • 二、准备数据
    • 三、编程实现
      • 3.1、统计出搜索过包含有“仙剑奇侠传”内容的UID及搜索关键字记录
      • 3.2、统计rank<3并且order>2的所有UID及数量
      • 3.3、上午7-9点之间,搜索过“赶集网”的用户UID
      • 3.4、通过Rank:点击排名 对数据进行排序
    • 四、参考

一、前言

最近学习大数据的知识,需要做一些有关Hadoop MapReduce的实验
实验内容是在sogou.500w.utf8数据的基础上进行的。
实现以下内容:

  • 1、统计出搜索过包含有“仙剑奇侠传”内容的UID及搜索关键字记录
  • 2、统计rank<3并且order>2的所有UID及数量
  • 3、上午7-9点之间,搜索过“赶集网”的用户UID
  • 4、通过Rank:点击排名 对数据进行排序

该实验是在已经搭建好Hadoop集群的基础上进行的,如果还没有搭建,请参考以下文章进行集群搭建

二、准备数据

数据的字段说明
在这里插入图片描述
上传数据
创建目录

hdfs dfs -mkdir /homework

上传文件

hdfs dfs -put -p sogou.500w.utf8 /homework

三、编程实现

3.1、统计出搜索过包含有“仙剑奇侠传”内容的UID及搜索关键字记录

1、Mapper

package com.csust.homework1;import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;public class TaskMapper1 extends Mapper<LongWritable, Text, Text, Text> {Text outputK = new Text();Text outputV = new Text();@Overrideprotected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, Text>.Context context) throws IOException, InterruptedException {String line = value.toString();String[] words = line.split("\t");if (words[2].contains("仙剑奇侠传")) {outputK.set(words[1]);outputV.set(words[2]);context.write(outputK, outputV);}}
}

2、Reduce

package com.csust.homework1;import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;public class TaskReducer1 extends Reducer<Text,Text,Text,Text> {Text outputV = new Text();@Overrideprotected void reduce(Text key, Iterable<Text> values, Reducer<Text, Text, Text, Text>.Context context) throws IOException, InterruptedException {StringBuilder total= new StringBuilder();for (Text value : values) {total.append(value.toString());total.append("\t");}outputV.set(total.toString());context.write(key,outputV);}
}

3、Driver

package com.csust.homework1;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class TaskDriver1 {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {//1:创建一个job任务对象Configuration conf = new Configuration();Job job = Job.getInstance(conf);//如果打包运行出错,则需要加该配置job.setJarByClass(TaskDriver1.class);job.setMapperClass(TaskMapper1.class);job.setReducerClass(TaskReducer1.class);//设置Mapper输出job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(Text.class);//设置最终输出类型job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);//设置路径FileInputFormat.setInputPaths(job, new Path("hdfs://master:9000/homework"));FileOutputFormat.setOutputPath(job, new Path("hdfs://master:9000/homework1_out"));//提交任务boolean result = job.waitForCompletion(true);System.exit(result ? 0 : 1);}
}

4、程序运行
在这里插入图片描述

5、运行结果
在这里插入图片描述

3.2、统计rank<3并且order>2的所有UID及数量

1、Mapper

package com.csust.homework2;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;public class TaskMapper2 extends Mapper<LongWritable, Text, Text, IntWritable> {Text outK = new Text();@Overrideprotected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {String data = value.toString();String[] words = data.split("\t");if (Integer.parseInt(words[3])<3 && Integer.parseInt(words[4])>2) {outK.set(words[1]); context.write(outK, new IntWritable(1)); }}
}

2、Reduce

package com.csust.homework2;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;public class TaskReducer2 extends Reducer<Text, IntWritable, Text, IntWritable> {@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {int total = 0;for (IntWritable value : values) {total += value.get();}context.write(key,new IntWritable(total));}
}

3、Driver

package com.csust.homework2;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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class TaskDriver2 {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {//创建一个job任务对象Configuration conf = new Configuration();Job job = Job.getInstance(conf);//如果打包运行出错,则需要加该配置job.setJarByClass(TaskDriver2.class);// 关联Mapper和Reducer的jarjob.setMapperClass(TaskMapper2.class);job.setReducerClass(TaskReducer2.class);//设置Mapper输出的kv类型job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(IntWritable.class);//设置最终输出kv类型job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);//设置输入和输出路径FileInputFormat.setInputPaths(job, new Path("hdfs://master:9000/homework"));FileOutputFormat.setOutputPath(job, new Path("hdfs://master:9000/homework2_out"));//提交任务boolean result = job.waitForCompletion(true);System.exit(result ? 0 : 1);}
}

4、运行程序
在这里插入图片描述

5、运行结果
在这里插入图片描述

3.3、上午7-9点之间,搜索过“赶集网”的用户UID

1、Mapper

package com.csust.homework3;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;public class TaskMapper3 extends Mapper<LongWritable, Text, Text, Text> {Text outputK = new Text();Text outputV = new Text();@Overrideprotected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, Text>.Context context) throws IOException, InterruptedException {String line = value.toString();String[] words = line.split("\t");SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");try {Date time = format.parse(words[0]);Calendar calendar = Calendar.getInstance();calendar.setTime(time);int hour = calendar.get(Calendar.HOUR_OF_DAY);if (hour >= 7 && hour < 9) {if (words[2].contains("赶集网")) {//UIDoutputK.set(words[1]);outputV.set(words[2]);context.write(outputK, outputV);}}} catch (ParseException e) {e.printStackTrace();}}
}

2、Reduce

package com.csust.homework3;import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;public class TaskReducer3 extends Reducer<Text,Text,Text,Text> {Text outputV = new Text();@Overrideprotected void reduce(Text key, Iterable<Text> values, Reducer<Text, Text, Text, Text>.Context context) throws IOException, InterruptedException {StringBuilder total= new StringBuilder();for (Text value : values) {total.append(value.toString());total.append("\t");}outputV.set(total.toString());context.write(key,outputV);}
}

3、Driver

package com.csust.homework3;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class TaskDriver3 {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {//创建一个job任务对象Configuration conf = new Configuration();Job job = Job.getInstance(conf);//如果打包运行出错,则需要加该配置job.setJarByClass(TaskDriver3.class);// 关联Mapper和Reducer的jarjob.setMapperClass(TaskMapper3.class);job.setReducerClass(TaskReducer3.class);//设置Mapper输出的kv类型job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(Text.class);//设置最终输出kv类型job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);//设置输入和输出路径FileInputFormat.setInputPaths(job, new Path("hdfs://master:9000/homework"));FileOutputFormat.setOutputPath(job, new Path("hdfs://master:9000/homework3_out"));//提交任务boolean result = job.waitForCompletion(true);System.exit(result ? 0 : 1);}
}

4、 运行程序
在这里插入图片描述

5、运行结果

在这里插入图片描述

3.4、通过Rank:点击排名 对数据进行排序

1、Mapper

package com.csust.sort;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class TaskMapper4 extends Mapper<LongWritable, Text, IntWritable, Text> {Text outputV = new Text();@Overrideprotected void map(LongWritable key, Text value, Mapper<LongWritable, Text, IntWritable, Text>.Context context) throws IOException, InterruptedException {String line = value.toString();String[] words = line.split("\t");IntWritable outputK = new IntWritable(Integer.parseInt(words[3])); List<String> list = new ArrayList<String>(Arrays.asList(words));list.remove(3);String data = String.join("\t", list); outputV.set(data);context.write(outputK, outputV); }
}

2、Reduce

package com.csust.sort;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;
public class TaskReducer4 extends Reducer<IntWritable, Text, Text, IntWritable> {@Overrideprotected void reduce(IntWritable key, Iterable<Text> values, Reducer<IntWritable, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {for (Text value : values) {context.write(value, key); }}
}

3、Driver

package com.csust.sort;
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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;
public class TaskDriver4 {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {//创建一个job任务对象Configuration conf = new Configuration();Job job = Job.getInstance(conf);//如果打包运行出错,则需要加该配置job.setJarByClass(TaskDriver4.class);// 关联Mapper和Reducer的jarjob.setMapperClass(TaskMapper4.class);job.setReducerClass(TaskReducer4.class);//设置Mapper输出的kv类型job.setMapOutputKeyClass(IntWritable.class);job.setMapOutputValueClass(Text.class);//设置最终输出kv类型job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);// 设置排序方式job.setSortComparatorClass(MyComparator.class);//设置输入和输出路径FileInputFormat.setInputPaths(job, new Path("hdfs://master:9000/homework"));FileOutputFormat.setOutputPath(job, new Path("hdfs://master:9000/homework4_out"));//提交任务boolean result = job.waitForCompletion(true);System.exit(result ? 0 : 1);}
}

4、Commparator

package com.csust.sort;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.WritableComparable;
public class MyComparator extends IntWritable.Comparator{public int compare(WritableComparable a, WritableComparable b) {return -super.compare(a, b);}public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {return -super.compare(b1, s1, l1, b2, s2, l2);}
}

5、运行程序
在这里插入图片描述

6、 运行结果
在这里插入图片描述

四、参考

集群搭建
MapReduce实现单词统计
MapReduce统计手机号

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

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

相关文章

POE API 驱动 OpenAI API 依赖服务

本文主要是介绍了如何利用 POE 提供的 API 服务来驱动原来依赖 OpenAI 的 API 服务 AIGC 的大模型已经火了很久&#xff0c;但是众所周知的原因 OpenAI 的服务订阅对于大陆用户很不友好。而另一个 AIGC 聚合平台 POE 则对大陆用户比较友好&#xff0c;招行的 VISA 和 Master 卡…

“抓取再吸取的连续操作学习”研究工作发表于IEEE Trans. on Robotics:仿人手的柔性抓取,超人手的指背吸取!

长期以来&#xff0c;抓取一直被认为是机器人操作中一项重要而实际的任务。然而&#xff0c;实现对不同物体的稳健和有效的抓取具有挑战性&#xff0c;因为它涉及夹具设计、感知、控制和学习等。最近基于学习的方法在抓取各种新物体方面表现出优异的性能。然而&#xff0c;这些…

设计模式--建造者模式

实验5&#xff1a;建造者模式 本次实验属于模仿型实验&#xff0c;通过本次实验学生将掌握以下内容&#xff1a; 1、理解建造者模式的动机&#xff0c;掌握该模式的结构&#xff1b; 2、能够利用建造者模式解决实际问题。 [实验任务]&#xff1a;计算机组装 使用建造者模…

SQL进阶:子查询

一般情况下,我们都是直接对表进行查询,但有时候,想要的数据可能通过一次select 获取不到,需要嵌套select,这样就形成了子查询。 子查询可以位于查询语句的任意位置,主要的注意点在于用于不同的位置,和不同的关键字一起使用时,需要注意返回的列的数量和行的数量。 位于…

80x86汇编—分支循环程序设计

文章目录 查表法: 实现16进制数转ASCII码显示计算AX的绝对值判断有无实根地址表形成多分支从100,99,...,2,1倒序累加输入一个字符&#xff0c;然后输出它的二进制数大小写转换大写转小写小写转大写 冒泡排序剔除空格 查表法: 实现16进制数转ASCII码显示 题目要求&#xff1a; …

C#/WPF 播放音频文件

C#播放音频文件的方式&#xff1a; 播放系统事件声音使用System.Media.SoundPlayer播放wav使用MCI Command String多媒体设备程序接口播放mp3&#xff0c;wav&#xff0c;avi等使用WindowsMediaPlayer的COM组件来播放(可视化)使用DirectX播放音频文件使用Speech播放(朗读器&am…

基于IPP库将FFT函数封装为C++类库并导出为dll(固定接口支持更新)

dll导出C++类的方式 C++类通常有3中导出方式,具体可以参考这篇博客: Dll导出C++类的3种方式 简单来总结一下: 一、纯C语言方式,类似显式传递this指针 缺点 调用创建对象函数的时候编译器无法判断类型是否匹配需要手动调用Release函数,一旦忘记则会造成内存泄露如果导出…

4.3 媒资管理模块 - Minio系统上传图片与视频

文章目录 一、上传图片1.1 需求分析1.2 数据模型1.2.1 media_files 媒资信息表 1.3 准备Minio环境1.3.1 桶环境1.3.2 连接Minio参数1.3.3 Minio配置类 1.4 接口定义1.4.1 上传图片接口请求参数1.4.2 上传图片接口返回值1.4.3 接口代码 1.5 MediaFilesMapper1.6 MediaFileServic…

网络通信--深入理解网络和TCP / IP协议

计算机网络体系结构 TCP/IP协议族 TCP / IP 网络传输中的数据术语 网络通信中的地址和端口 window端查看IP地址和MAC地址&#xff1a;ipconfig -all MAC层地址是在数据链路层的&#xff1b;IP工作在网络层的 MAC是48个字节&#xff0c;IP是32个字节 在子网&#xff08;局域…

MFC 动态创建机制

目录 动态创建机制概述 代码测试分析 执行过程 总结 动态创建机制概述 MFC 动态创建机制是 MFC 中的一项重要功能&#xff0c;它允许开发者在运行时动态创建和管理窗口控件。通过动态创建机制&#xff0c;开发者可以根据需要在程序运行过程中创建、显示和销毁窗口&#xf…

微信小程序(uniapp)api讲解

Uniapp是一个基于Vue.js的跨平台开发框架&#xff0c;可以同时开发微信小程序、H5、App等多个平台的应用。下面是Uniapp常用的API讲解&#xff1a; Vue.js的API Uniapp采用了Vue.js框架&#xff0c;因此可以直接使用Vue.js的API。例如&#xff1a;v-show、v-if、v-for、comput…

java八股 spring + mybatis

Spring常用注解&#xff08;绝对经典&#xff09;_spring注解-CSDN博客 框架篇-02-Spring-单例bean是线程安全的吗_哔哩哔哩_bilibili 1.spring.bean 单例 线程不安全 2.AOP 项目里可以说记录用户登录日志&#xff0c;利用request去获取姓名、ip、、请求方式、url&#xff0…