【大数据系列】MapReduce示例好友推荐

package org.slp;

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.StringTokenizer;

/**
 * Created by sanglp on 2017/7/17.
 */
public class Test2Mapper extends Mapper<LongWritable ,Text,Text,Text> {
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //super.map(key, value, context);
        String line = value.toString();//一行数据代表一组好友关系
        String[] ss = line.split("\t");
        context.write(new Text(ss[0]),new Text(ss[1]));//主从分成两行输出
        context.write(new Text(ss[1]),new Text(ss[0]));

    }
}
package org.slp;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * Created by sanglp on 2017/7/17.
 */
public class Test2Reduce extends Reducer<Text,Text,Text,Text> {
    @Override
    protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
        //super.reduce(key, values, context);
        Set<String> set = new HashSet<String>();
        for(Text t :values ){
            set.add(t.toString());
        }
        if (set.size()>1){
            for(Iterator j = set.iterator();j.hasNext();){
                String name = (String)j.next();
                for(Iterator k = set.iterator();k.hasNext();){
                    String other = (String)k.next();
                    if(!name.equals(other)){
                        context.write(new Text(name),new Text(other));
                    }
                }
            }
        }
    }
}
package org.slp;

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;

/**
 * Created by sanglp on 2017/7/17.
 */
public class JobRun2 {

    public static void main(String[] args){
        Configuration conf = new Configuration();
        conf.set("mapred.job.tracker","node1:9001");
        conf.set("mapred.job.tracker","node1:9001");
        conf.set("mapred.jar","C:\\Users\\sanglp\\qq.jar");
        try {
            Job job = new Job(conf);
            job.setJobName("qq");
            job.setJarByClass(JobRun2.class);
            job.setMapperClass(Test2Mapper.class);
            job.setReducerClass(Test2Reduce.class);
            job.setMapOutputKeyClass(Text.class);
            job.setMapOutputValueClass(Text.class);

            job.setNumReduceTasks(1);//设置reduce任务的个数
            //mapreduce输入数据所在目录或文件
            FileInputFormat.addInputPath(job,new Path("/usr/input/qq"));
            //mr执行之后的输出数据的目录
            FileOutputFormat.setOutputPath(job,new Path("/usr/out/qq"));
            try {
                System.exit(job.waitForCompletion(true)?0:1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

文件内容例如:

小明  小李

小花  小白

时间: 2024-09-28 04:38:14

【大数据系列】MapReduce示例好友推荐的相关文章

大数据系列之分布式计算批处理引擎MapReduce实践-排序

清明刚过,该来学习点新的知识点了. 上次说到关于MapReduce对于文本中词频的统计使用WordCount.如果还有同学不熟悉的可以参考博文大数据系列之分布式计算批处理引擎MapReduce实践. 博文发表后很多同学私下反映对于MapReduce的处理原理没有了解到.在这篇博文中楼主与大家交流下MapReduce的数据处理原理及MR中各角色的职责. 文末还有示例代码讲解.. 1.MapReduce中的数据流动 最简单的过程: map - reduce 定制了partitioner以将map的结

大数据系列之分布式计算批处理引擎MapReduce实践

关于MR的工作原理不做过多叙述,本文将对MapReduce的实例WordCount(单词计数程序)做实践,从而理解MapReduce的工作机制. WordCount: 1.应用场景,在大量文件中存储了单词,单词之间用空格分隔 2.类似场景:搜索引擎中,统计最流行的N个搜索词,统计搜索词频率,帮助优化搜索词提示. 3.采用MapReduce执行过程如图 3.1MapReduce将作业的整个运行过程分为两个阶段 3.1.1Map阶段和Reduce阶段 Map阶段由一定数量的Map Task组成 输入

大数据系列(2)——Hadoop集群坏境CentOS安装

前言 前面我们主要分析了搭建Hadoop集群所需要准备的内容和一些提前规划好的项,本篇我们主要来分析如何安装CentOS操作系统,以及一些基础的设置,闲言少叙,我们进入本篇的正题. 技术准备 VMware虚拟机.CentOS 6.8 64 bit 安装流程 因为我的笔记本是Window7操作系统,然后内存配置,只有8G,内存配置太低了,当然为了演示,我会将Hadoop集群中的主节点分配2GB内存,然后剩余的三个节点都是1GB配置. 所有的节点存储我都设置为50GB. 在安装操作系统之前,我们需要

大数据系列(3)——Hadoop集群完全分布式坏境搭建

前言 上一篇我们讲解了Hadoop单节点的安装,并且已经通过VMware安装了一台CentOS 6.8的Linux系统,咱们本篇的目标就是要配置一个真正的完全分布式的Hadoop集群,闲言少叙,进入本篇的正题. 技术准备 VMware虚拟机.CentOS 6.8 64 bit 安装流程 我们先来回顾上一篇我们完成的单节点的Hadoop环境配置,已经配置了一个CentOS 6.8 并且完成了java运行环境的搭建,Hosts文件的配置.计算机名等诸多细节. 其实完成这一步之后我们就已经完成了Had

大数据系列之数据仓库Hive原理

Hive系列博文,持续更新~~~ 大数据系列之数据仓库Hive原理 大数据系列之数据仓库Hive安装 大数据系列之数据仓库Hive中分区Partition如何使用 大数据系列之数据仓库Hive命令使用及JDBC连接 Hive的工作原理简单来说就是一个查询引擎 先来一张Hive的架构图: Hive的工作原理如下: 接收到一个sql,后面做的事情包括:1.词法分析/语法分析 使用antlr将SQL语句解析成抽象语法树-AST2.语义分析 从Megastore获取模式信息,验证SQL语句中队表名,列名

大数据系列之数据仓库Hive安装

Hive主要分为以下几个部分 ?户接口1.包括CLI,JDBC/ODBC,WebUI元数据存储(metastore)1.默认存储在?带的数据库derby中,线上使?时?般换为MySQL驱动器(Driver)1.解释器.编译器.优化器.执?器Hadoop1.?MapReduce 进?计算,?HDFS 进?存储 前提部分:Hive的安装需要在Hadoop已经成功安装且成功启动的基础上进行安装.若没有安装请移步至大数据系列之Hadoop分布式集群部署. 使用包: apache-hive-2.1.1-b

电商大数据项目-推荐系统实战之推荐算法(三)

电商大数据项目-推荐系统实战(一)环境搭建以及日志,人口,商品分析http://blog.51cto.com/6989066/2325073电商大数据项目-推荐系统实战之推荐算法http://blog.51cto.com/6989066/2326209电商大数据项目-推荐系统实战之实时分析以及离线分析http://blog.51cto.com/6989066/2326214 (七)推荐系统常用算法协同过滤算法协同过滤算法(Collaborative Filtering:CF)是很常用的一种算法,

大数据系列之三:大数据体系架构的重要里程碑

欧凯惯例:引子 世界上唯一不变的就是变化,大数据的架构也不例外. 这次变化的推动者,多是一些大的商业公司! 首发地址 --- Teradata 美国天睿 Teradata这家公司其实挺陌生的,但这并不能让我们忽视其在大数据方面做出的贡献.简单一句描述这家公司的贡献就是: 2008年之前,这家公司以关系型为基础,硬刚大数据,之后意识到数据实在太大大复杂了,终究实现了对非关系型数据的支持. 具体它拿关系型作为对大数据的解决方案硬刚到什么程度呢?拿一个数据说来说明白了,直到2017年,它可以基于其关系

玩转大数据系列之Apache Pig高级技能之函数编程(六)

原创不易,转载请务必注明,原创地址,谢谢配合! http://qindongliang.iteye.com/ Pig系列的学习文档,希望对大家有用,感谢关注散仙! Apache Pig的前世今生 Apache Pig如何自定义UDF函数? Apache Pig5行代码怎么实现Hadoop的WordCount? Apache Pig入门学习文档(一) Apache Pig学习笔记(二) Apache Pig学习笔记之内置函数(三) 玩转大数据系列之Apache Pig如何与Apache Lucen