MapReduce场景应用
考取Hadoop工程师认证,需要掌握HDFS和MapReduce #生活技巧# #工作学习技巧# #技能认证指南#
MapReduce场景应用
一,QQ共同好友简单分析相信大家都有用过QQ, QQ会不定期的向你推荐些可能认识的人(显示你们有多少个共同好友)。
那么它的数据是哪里来的呢?实际上是每个人好友列表数据分析出来的。
比如说 A 的好友列表中有 B C, B的好友列表有 C D E ,那么系统可能会给A推荐 D E ,这样才是合理的方案。
对于QQ用户来说,用户群是非常庞大的,分析每个人好友列表,用文本保存,假设保存的信息是如下图:
用户ID 好友列表 其他数据 A B C D … …看下QQ的注册人数:

8亿人,假设一个人的好友列表占用10kB 处理下来数据量约是 8T,显然用普通的处理方式,存储都是一个问题,更别说数据的处理了。
这个时候我们就完全可以用HDFS和MapReduce去处理这些数据。
1.1 示例数据分析这里我准备了一点数据,如下
ID 好友列表 -------------------------- tom cat hadoop hello hello mr tom world hive cat tom hive hive cat hadoop world hello mr mr hive hello hadoop tom hive world world hadoop hive hello
xml
123456789第一步: Mapper
分析每行数据,拿第一行举例,tom和好友列表的每一个都是属于直接好友,而tom的好友列表两两组合都属于 非直接好友关系,但是都有一个共同的好友 tom 。
如果 用 <tom-cat,0> 表示直接好友关系 <cat-hadoop,1> 表示二层关系,这样我们筛选出value为1的就是我们需要的数据,
思考一个问题,<tom-cat,0> <cat-tom,0> 这样Key是属于两个,这里我们代码用的是自定义Key去解决。
第二步:Reduce
遍历数据,values中含有0的代表,说明是直接好友,抛弃数据,留下values是1的即可,汇总。
到这,我们把需要的数据抽取出来了,但是相对<tom-cat,1> 系统可以向tom 推荐cat 系统也可以向 cat 推荐 tom,而且系统的推荐也是根据共同的数量来优先推荐的
所以这里,我们需要有第二个MapReduce程序 ,来对数据进行排序和整合
第三步:Mapper
自定义排序类,实现排序
第四步:Reduce
输出数据即可
1.2 代码分析MapStep01.java
package com.shsxt.mr.friend; import java.io.IOException; 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 org.hsqldb.lib.StringUtil; public class MapStep01 extends Mapper<LongWritable, Text, FoF, IntWritable> {@Overrideprotected void map(LongWritable key, Text value, Context context)throws IOException, InterruptedException {String lines = value.toString(); //我这里为了方便,单词和单词之间分隔符都是用 " " 展示数据时,是为了大家方便观看String [] friends = StringUtil.split(lines, " ");for (int i = 1; i < friends.length; i++) {String friend = friends[i]; //对于每一行,第一个数据和好友列表任意组合都是直接好友,Value=0 表示context.write(new FoF(friend,friends[0]), new IntWritable(0));//对于第二个数据和其后面的组合都是非直接好友 value=1表示for (int j = i+1; j < friends.length; j++) {String fri = friends[j]; //写出的Key 是自定义类,下面贴出代码context.write(new FoF(fri, friend), new IntWritable(1));}}} }
java
12345678910111213141516171819202122232425262728293031323334353637383940FoF.java
package com.shsxt.mr.friend; import org.apache.hadoop.io.Text; //继承Text,Text实现了WritableComparable,省写序列化代码了 public class FoF extends Text {public FoF() {super();}public FoF(String friend01,String friend02){set(getOf(friend01,friend02));}//防止相同的数据组合造成数据的重复 如 cat-tomcat 和tomcat-catprivate String getOf(String friend01, String friend02) {int c = friend01.compareTo(friend02);if (c>0) {return friend02 + "\t" + friend01;}return friend01+"\t"+friend02;} }
java
1234567891011121314151617181920212223242526272829303132333435ReduceStep01.java
package com.shsxt.mr.friend; import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; import org.hsqldb.lib.StringUtil; public class ReduceStep01 extends Reducer<FoF, IntWritable, Text, NullWritable> {@Overrideprotected void reduce(FoF key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException {int sum = 0;boolean flag = true; //到这边的数据类型 cat hadoop {0,0,1,1}for (IntWritable value : values) { //只要value中含有0 说明是直接好友,跳过本次循环if (value.get()==0) {flag = false;break;} //统计共同好友的个数sum+=value.get();}if (flag) { //把数据全部放到了key中,方便后续操作String msg = StringUtil.split(key.toString(), "\t")[0]+" "+StringUtil.split(key.toString(), "\t")[1]+" "+sum;context.write(new Text(msg), NullWritable.get());}} }
java
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748MapStep02.java
package com.shsxt.mr.friend; import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class MapStep02 extends Mapper<LongWritable, Text, FriendSort, IntWritable>{@Overrideprotected
java
1234567891011121314网址:MapReduce场景应用 https://www.yuejiaxmz.com/news/view/1432502
相关内容
场景应用应用场景解释
营销场景化应用
人工智能应用场景---物联网场景
应用场景是什么
智慧社区应用场景
语音识别应用场景
AI技术生活场景应用有哪些AI技术生活场景应用解析
应用场景是指什么,揭秘应用场景:让你的产品与用户零距离
场景化设计拉动产品应用场景拓展.docx

