Hadoop实战-MR倒排索引(三)
场景描述
- 通过切入具体示例代码,解决问题,从而积累 Hadoop 实战经验。
- 倒排索引,源于实际应用中需要根据属性的值来查找记录,通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。
实验数据
- 输入
tom,LittleApple
jack,YesterdayOnceMore
Rose,MyHeartWillGoOn
jack,LittleApple
John,MyHeartWillGoOn
kissinger,LittleApple
kissinger,YesterdayOnceMore
- 输出结果
- 使用 | 分隔 用户名,去掉末尾多余字符
LittleApple kissinger|jack|tom
MyHeartWillGoOn John|Rose
YesterdayOnceMore kissinger|jack
- 代码实现
- 本地运行, 若导出至 jar包, 需要 稍作修改,使代码整体显得较为优雅。
import java.io.IOException;
import java.util.StringTokenizer;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;/*** * @ClassName: Music* * @Description: 输入用户播放音乐记录数据,统计歌曲被哪些用户播放过* * @author kngines* * @date 2018年4月11日*/public class Music {public static class MusicMap extends Mapper<Object, Text, Text, Text> {@Overridepublic void map(Object key, Text value, Context context) throws IOException, InterruptedException {StringTokenizer itr = new StringTokenizer(value.toString());while (itr.hasMoreTokens()) {String content = itr.nextToken();String[] splits = content.split(",");String name = splits[0];String music = splits[1];context.write(new Text(music), new Text(name));}}}public static class MusicReduce extends Reducer<Text, Text, Text, Text> {private Text userNames = new Text();@Overridepublic void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {userNames.set("");StringBuffer result = new StringBuffer();int i = 0;for (Text tempText : values) {result.append(tempText.toString().trim() + "|");i++;}userNames.set(result.toString().substring(0,result.length()-1)); // 去除尾部分隔符context.write(key, userNames);}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();conf.set("mapred.jop.tracker", "hdfs://"+args[2]+":9001"); // args[2] 远程服务器 IP地址(伪分布式Hadoop服务器地址)conf.set("fs.default.name", "hdfs://"+args[2]+":9000");String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();Job job = Job.getInstance(conf);job.setJarByClass(Music.class);job.setMapperClass(MusicMap.class);job.setReducerClass(MusicReduce.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);if(otherArgs.length < 2){System.err.println("Usage: MinMaxCountDriver <in> <out>");System.exit(-1);}Path iPath = new Path(otherArgs[0]); // 输入文件路径Path oPath = new Path(otherArgs[1]); // 输出文件路径// 指定要处理的数据所在的位置FileSystem fs = FileSystem.get(conf);if (fs.exists(iPath)) {FileInputFormat.addInputPath(job, iPath);}// 指定处理完成之后的结果所保存的位置fs.delete(oPath, true);FileOutputFormat.setOutputPath(job, oPath);// 向yarn集群提交这个jobboolean res = job.waitForCompletion(true);System.exit(res ? 0 : 1);}
}
eclipse 中运行参数 配置
- 输入文件路径, 输出文件路径,远程服务器 IP 地址,以空格间隔
- 输入文件路径, 输出文件路径,远程服务器 IP 地址,以空格间隔
输入结果显示
问题记录
- Apache Hadoop MapReduce Common. Maven Conf
- hadoop-mapreduce-client-common-2.6.2.jar 包引入,否则无法访问远程Hadoop 服务器。
- 本地机器(无线网,可能会多个无线网切换)、虚拟机(Hadoop服务器)
- 切换网络再切回网络,同一网段下,本机、虚拟机 ping 不通,可以通过【禁用–启用】本地网络、注销虚拟机方式,使网络互通。
- 个人在实验时,网络不通时,在虚拟机中 jps 命令, 不存在Hadoop 5 个基础进程,修复网络后,jps 进程正常。
References
- Hadoop实战-MapReduce之倒排索引(八). 优化改进
Hadoop实战-MR倒排索引(三)相关推荐
- Hadoop 实战之分析专利引用数据集(三)
大家好,今天我们在Hadoop 实战之分析专利引用数据集(一)的基础上来实现计算专利被引用的次数 许多外行人认为统计学就是数量统计,并且许多基本的Hadoop Job就是用于统计数量的.我们已经在第一 ...
- 【大数据Hadoop实战篇】
大数据Hadoop实战篇 第1章 Hadoop概述 1.1 Hadoop是什么 1.2 Hadoop发展历史(了解) 1.3 Hadoop三大发行版本(了解) 1.4 Hadoop优势(4高) 1.5 ...
- Hadoop实战系列之MapReduce 分析 Youtube视频数据
Hadoop实战系列之MapReduce 分析 Youtube视频数据 一.实战介绍 MapReduce 是 Hadoop 的计算框架. 在运行一个 MR 程序时,任务过程被分为两个阶段:Map 阶段 ...
- Hadoop实战实例
Hadoop实战实例 Hadoop 是Google MapReduce的一个Java实现.MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行.就如 ...
- 王家林 云计算分布式大数据Hadoop实战高手之路第七讲Hadoop图文训练课程:通过HDFS的心跳来测试replication具体的工作机制和流程...
这一讲主要深入使用HDFS命令行工具操作Hadoop分布式集群,主要是通过实验的配置hdfs-site.xml文件的心跳来测试replication具体的工作和流程. 通过HDFS的心跳来测试repl ...
- hadoop 实战练习_hadoop实战(二)
hadoop 实战练习(二) 引言:哈哈,时隔几日,坏蛋哥又回来了,继上一篇hadoop实战练习(一),坏蛋哥准备继续写一个实战练习实例.苏格拉底曾说:所有科学都源于需求.那么我们就抛出今天实战项目的 ...
- Hadoop实战之三~ Hello World
本文介绍的是在Ubuntu下安装用三台PC安装完成Hadoop集群并运行好第一个Hello World的过程,软硬件信息如下: Ubuntu:12.04 LTS Master: 1.5G RAM,奔腾 ...
- Hadoop 实战之分析专利引用数据集(一)
大家好,今天给大家介绍一下如何建立MapReduce程序的基本模板 MapReduce程序与您所学过的编程模型有所不同.您需要花一些时间,并进行一些练习来熟悉它.为了帮助您精通它,我们在后面几章会通过 ...
- hadoop基础----hadoop实战(七)-----hadoop管理工具---使用Cloudera Manager安装Hadoop---Cloudera Manager和CDH5.8离线安装
hadoop基础----hadoop实战(六)-----hadoop管理工具---Cloudera Manager---CDH介绍 简介 我们在上篇文章中已经了解了CDH,为了后续的学习,我们本章就来 ...
最新文章
- angular学习笔记(十三)
- python详细安装教程 path-Python解释器安装教程以及环境变量配置
- SpringBoot(2)之自定义配置
- linux无显卡运行程序,Ubuntu中在应用程序菜单添加未显示的应用程序启动器
- jsp页面,在浏览器端显示时会出现乱码解决方法
- 无锡技师学院计算机系,无锡技师学院
- Python天天美味(32) - python数据结构与算法之堆排序
- js获取dom html元素属性,JS如何通过元素的CLASS属性得到对应的DOM对象?
- ASP.NET向Javascript传递变量
- (NO.00005)iOS实现炸弹人游戏(七):游戏数据的序列化表示
- es的分片数量和扩展性分析
- c++:template使用中的常见报错
- 【周志华机器学习】总目录
- 扫描微信二维码实现快速登录
- Eclipse SVN断开连接后 怎么重新连接
- 缺陷管理工具JIRA和禅道对比
- 晓莲说-何不原创:如何通过jad把class批量反编译成java文件
- 3DSMAX联机渲染、网络渲染、分布式渲染效率评测
- maccms10自动播放下一集
- 【第16周复盘】学习的飞轮