场景描述

  • 通过切入具体示例代码,解决问题,从而积累 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 地址,以空格间隔
  • 输入结果显示


问题记录

  • 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倒排索引(三)相关推荐

  1. Hadoop 实战之分析专利引用数据集(三)

    大家好,今天我们在Hadoop 实战之分析专利引用数据集(一)的基础上来实现计算专利被引用的次数 许多外行人认为统计学就是数量统计,并且许多基本的Hadoop Job就是用于统计数量的.我们已经在第一 ...

  2. 【大数据Hadoop实战篇】

    大数据Hadoop实战篇 第1章 Hadoop概述 1.1 Hadoop是什么 1.2 Hadoop发展历史(了解) 1.3 Hadoop三大发行版本(了解) 1.4 Hadoop优势(4高) 1.5 ...

  3. Hadoop实战系列之MapReduce 分析 Youtube视频数据

    Hadoop实战系列之MapReduce 分析 Youtube视频数据 一.实战介绍 MapReduce 是 Hadoop 的计算框架. 在运行一个 MR 程序时,任务过程被分为两个阶段:Map 阶段 ...

  4. Hadoop实战实例

    Hadoop实战实例   Hadoop 是Google MapReduce的一个Java实现.MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行.就如 ...

  5. 王家林 云计算分布式大数据Hadoop实战高手之路第七讲Hadoop图文训练课程:通过HDFS的心跳来测试replication具体的工作机制和流程...

    这一讲主要深入使用HDFS命令行工具操作Hadoop分布式集群,主要是通过实验的配置hdfs-site.xml文件的心跳来测试replication具体的工作和流程. 通过HDFS的心跳来测试repl ...

  6. hadoop 实战练习_hadoop实战(二)

    hadoop 实战练习(二) 引言:哈哈,时隔几日,坏蛋哥又回来了,继上一篇hadoop实战练习(一),坏蛋哥准备继续写一个实战练习实例.苏格拉底曾说:所有科学都源于需求.那么我们就抛出今天实战项目的 ...

  7. Hadoop实战之三~ Hello World

    本文介绍的是在Ubuntu下安装用三台PC安装完成Hadoop集群并运行好第一个Hello World的过程,软硬件信息如下: Ubuntu:12.04 LTS Master: 1.5G RAM,奔腾 ...

  8. Hadoop 实战之分析专利引用数据集(一)

    大家好,今天给大家介绍一下如何建立MapReduce程序的基本模板 MapReduce程序与您所学过的编程模型有所不同.您需要花一些时间,并进行一些练习来熟悉它.为了帮助您精通它,我们在后面几章会通过 ...

  9. hadoop基础----hadoop实战(七)-----hadoop管理工具---使用Cloudera Manager安装Hadoop---Cloudera Manager和CDH5.8离线安装

    hadoop基础----hadoop实战(六)-----hadoop管理工具---Cloudera Manager---CDH介绍 简介 我们在上篇文章中已经了解了CDH,为了后续的学习,我们本章就来 ...

最新文章

  1. angular学习笔记(十三)
  2. python详细安装教程 path-Python解释器安装教程以及环境变量配置
  3. SpringBoot(2)之自定义配置
  4. linux无显卡运行程序,Ubuntu中在应用程序菜单添加未显示的应用程序启动器
  5. jsp页面,在浏览器端显示时会出现乱码解决方法
  6. 无锡技师学院计算机系,无锡技师学院
  7. Python天天美味(32) - python数据结构与算法之堆排序
  8. js获取dom html元素属性,JS如何通过元素的CLASS属性得到对应的DOM对象?
  9. ASP.NET向Javascript传递变量
  10. (NO.00005)iOS实现炸弹人游戏(七):游戏数据的序列化表示
  11. es的分片数量和扩展性分析
  12. c++:template使用中的常见报错
  13. 【周志华机器学习】总目录
  14. 扫描微信二维码实现快速登录
  15. Eclipse SVN断开连接后 怎么重新连接
  16. 缺陷管理工具JIRA和禅道对比
  17. 晓莲说-何不原创:如何通过jad把class批量反编译成java文件
  18. 3DSMAX联机渲染、网络渲染、分布式渲染效率评测
  19. maccms10自动播放下一集
  20. 【第16周复盘】学习的飞轮

热门文章

  1. 推荐一个博客工具——Boke宝贝
  2. matlab画梯形并平移,matlab 批量处理梯形变形
  3. 俞敏洪一分钟励志演讲
  4. 在php中调用接口以及编写接口
  5. 【HBase】HBase入门详解(一)
  6. 在linux后台运行脚本的方法和命令
  7. 公司里面常说的“BP”,“BU”到底是什么意思?
  8. (向量空间)概念和法则的人为定义 I
  9. 线性代数(1)- 向量空间
  10. 枪火重生灵界狂潮攻略 (二)老虎流派