hadoop-小案例实现qq好友推荐
一、本文主要是hadoop hdfs文件系统和mapReduce离线计算框架整合小案例
二、前提是读者已经部署了hadoop的namenode、datanode、secodaynamenode
三、分析需求:
1、好友列表一个人有多个好友,那么如何实现好友推荐呢?简单的二度关系这里是使用
2、我的好友的好友有可能是我认识的人,所以将来进行好友推荐的时候就可以将这些人推荐给我(这里只是简单的关系,其实还可以做的复杂那就是我的好友的好友跟我有三个以上相同的好友才推荐给我这里我们不实现)
3、比如我们的好友关系存储形式如下:
hadoop hello
hdfs world
xiaopi w3c
w3c xiaoming
hello world
那么我们这里可以得道的二度关系就需要笛卡尔积去获取了也就是hadoop-----hello ------world 这里 hadoop 和world 也就存在二度关系
程序里怎么实现呢?
四、1、启动namenode
[root@localhost bin]# ./hadoop start-all.sh
2、将我们的测试数据上传到hdfs文件系统
rz 选择测试文件上传到服务器
./hadoop dfs -put relation.txt /home/ma/input/ 上传测试文件到hdfs文件系统
3、编写代码程序
map类进行数据拆分
public class PushFriendMapper extends Mapper<LongWritable, Text, Text, Text> {// 好友推荐@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String string = value.toString();String[] split = string.split("\t");// split就是一个关系 以数组第一个作为键,第二个元素作为值context.write(new Text(split[0]),new Text(split[1]));// map的输出context.write(new Text(split[1]),new Text(split[0]));// map的输出
// 最后输出的是以主为key 从为value 在输出以从为key 主为value}}
reduce进行数据合并处理
public class PushFriendReduce extends Reducer<Text, Text, Text, Text> {// 获取笛卡尔积返回结果@Overrideprotected void reduce(Text key, Iterable<Text> iterable, Context context) throws IOException, InterruptedException {// 根据我们自己的业务需求写逻辑Set<String> relation1 = new HashSet<String>();for (Text text : iterable) {relation1.add(text.toString());}if (relation1.size()>1) {for (Iterator iterator2 = relation1.iterator(); iterator2.hasNext();) {String name = iterator2.next().toString();for (Iterator iterator3 = relation1.iterator(); iterator3.hasNext();) {String other = iterator3.next().toString();if (!name.equals(other)) {context.write(new Text(name), new Text(other));}}}}}
}
编写入口类Job类
public class JobRun {public static void main(String[] args) {Configuration conf=new Configuration();conf.set("mapred.job.tracker","192.168.68.132:9001");try {Job job=new Job(conf);job.setJarByClass(JobRun.class);
// job.setMapperClass(WcMapper.class);
// job.setReducerClass(WcReduce.class);job.setMapperClass(PushFriendMapper.class);job.setReducerClass(PushFriendReduce.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(Text.class);job.setNumReduceTasks(1);//设置Reduce任务的个数 默认为1//设置mapreduce 执行输入文件是什么(路径/文件)FileInputFormat.addInputPath(job, new Path("/home/ma/input"));//设置mapreduce 执行后的输出数据的目录FileOutputFormat.setOutputPath(job, new Path("/home/ma/out")); //返回退出(等待job执行完成)System.exit(job.waitForCompletion(true)? 0:1);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} }
}
4、导出jar包上传到服务器运行
6、查看结果
如有问题可联系博主QQ372445135,能力范围内有问必答,能力范围外也有问必答(答错滴呗)
hadoop-小案例实现qq好友推荐相关推荐
- 用hadoop2.7.1 mapreduce实现QQ好友推荐功能
1.模拟一组好友关系: aaa bbb ccc ddd eee fff ggg hhh bbb zzz eee iii (aaa和bbb是好友,ccc和ddd是好友--, 直观可以看出应该给aaa-z ...
- 第三节 Hadoop学习案例——MapReduce课程设计 好友推荐功能
提示:文章内容主要以案例为主 目录 前言 项目说明 一,程序需求 1.需求 2.数据 二,编码操作 1.项目建包目录 2.FriendsRecommend.java 3.FriendsRecommen ...
- Hadoop2.6.0+Linux Centos7+idea环境下:MapReduce二度好友推荐案例
目录 一.问题描述 二.intellij idea中编写代码+打包项目 三.xftp中上传jar包到Linux 四.hadoop中准备输入数据+运行jar包+查看输出结果 一.问题描述 使用MapRe ...
- QQ好友分组模拟小程序
QQ好友分组:一个好友组里有多个好友,一个好友只能选择一个组,这样好友组和好友之间就是一个一对多的关系.在此程序中封装一个好友类即Buddy类,一个组类即Group类.在Buddy类有有关好友的最基本 ...
- QQ小程序解决方法:您的小程序分享功能缺失,为了方便用户分享传播,小程序主要页面请设置showShareItems参数属性为null或4个,这样用户可以将小程序直接转发给QQ好友、空间、微信和朋友圈
提交QQ小程序,审核的时候,可能会被腾讯以如下理由拒绝审核: 您好,您的小程序分享功能缺失,为了方便用户分享传播,小程序主要页面请设置showShareItems参数属性为null或4个,这样用户可以 ...
- 小软件获取QQ好友是否隐身对你可见
下午写了一个小软件, 给大家分享分享. 软件的功能是, 知道某QQ好友是不是"隐身对你可见"或者"在线对你隐身". 不过很多人不用QQ的, 我写这个也是是玩玩, ...
- Hadoop实例:二度人脉与好友推荐
一.在新浪微博.人人网等社交网站上,为了使用户在网络上认识更多的朋友,社交网站往往提供类似"你可能感兴趣的人"."间接关注推荐"等好友推荐的功能.一直很好奇这个 ...
- 大数据Hadoop学习之——好友推荐
一.算法说明 好友关系如图: 1.直接相连的表示两个人是直接好友关系: 2.两个人有相同的好友表示两个人是间接好友(当然可能两个人同时也是直接好友,如图hello和hive). 3.好友推荐列表就是按 ...
- vue案例QQ好友列表
功能如下:滚动条滚动,qq好友在线和不在线的区分,点击分组名展开列表,再点则合并,列表展开合并时具有简单的动画效果. 通过axios发送请求拿到数据,利用自定义属性进行传值给子组件,使用transit ...
最新文章
- c++ 编译器支持情况表
- atexit注册进程终止处理函数
- shell循环,判断介绍,以及实例
- keil编译运行错误,缺少error:#5:#includecore_cm3.h_过路老熊_新浪博客
- mysql 保存时间报错_JPA在MySQL数据库中保存错误的日期
- 因为此网站使用了 hsts_HSTS原理及实践
- InstallShield 教程
- 富文本编辑器Froala Editor v3.x 使用
- 使用JDBC创建出版社和书籍管理系统
- 批量将txt文件转为csv文件
- 饥荒服务器物品指令,饥荒控制台指令大全物品大全服务器管理命令大全.docx
- c语言sqar是double,C语言怎么编写正弦波
- HackTheBox——Beep
- 那些CTA策略的表现如何(一)
- ES聚合查询详解(四):管道聚合
- win7 文件夹背景。安装使用主题后,变为不透明的经典界面。Win8.1Win10文件夹背景补丁与教程
- 有声双语阅读器-学英语背单词,做泛读的好帮手
- 服务器除了一个灯亮其余的都不亮,鼠标键盘没反应
- 另眼看待王老吉 弱品类市场需要强场景突破
- mysql查询表中重复记录