返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >云计算实验:Java MapReduce编程
  • 428
分享到

云计算实验:Java MapReduce编程

2024-04-02 19:04:59 428人浏览 薄情痞子
摘要

目录【实验作业】简单流量统计【实验作业】索引倒排输出行号实验题目: mapReduce:编程 实验内容: 本实验利用 hadoop 提供的 Java api 进行编程进行 MapRe

实验题目:

mapReduce编程

实验内容:

本实验利用 hadoop 提供的 Java api 进行编程进行 MapReduce 编程。

实验目标:

  • 掌握MapReduce编程。
  • 理解MapReduce原理

【实验作业】简单流量统计

有如下这样的日志文件:

13726230503 00-FD-07-A4-72-B8:CMCC 120.196.100.82 i02.c.aliimg.com 2481 24681 200
13726230513 00-FD-07-A4-72-B8:CMCC 120.196.40.8 i02.c.aliimg.com 248 0 200
13826230523 00-FD-07-A4-72-B8:CMCC 120.196.100.82 i02.c.aliimg.com 2481 24681 200
13726230533 00-FD-07-A4-72-B8:CMCC 120.196.100.82 i02.c.aliimg.com 2481 24681 200
13726230543 00-FD-07-A4-72-B8:CMCC 120.196.100.82 Video WEBsite 1527 2106 200
13926230553 00-FD-07-A4-72-B8:CMCC 120.196.100.82 i02.c.aliimg.com 2481 24681 200
13826230563 00-FD-07-A4-72-B8:CMCC 120.196.100.82 i02.c.aliimg.com 2481 24681 200
13926230573 00-FD-07-A4-72-B8:CMCC 120.196.100.82 i02.c.aliimg.com 2481 24681 200
18912688533 00-FD-07-A4-72-B8:CMCC 220.196.100.82 Integrated portal 1938 2910 200
18912688533 00-FD-07-A4-72-B8:CMCC 220.196.100.82 i02.c.aliimg.com 3333 21321 200
13726230503 00-FD-07-A4-72-B8:CMCC 120.196.100.82 Search Engines 9531 9531 200
13826230523 00-FD-07-A4-72-B8:CMCC 120.196.100.82 i02.c.aliimg.com 2481 24681 200
13726230503 00-FD-07-A4-72-B8:CMCC 120.196.100.82 i02.c.aliimg.com 2481 24681 200

日志文件记录了每个手机用户在一段时间内的网络流量信息,具体字段含义为:

手机号码 Mac地址 IP地址 域名 上行流量(字节数) 下行流量(字节数) 套餐类型
根据以上日志,统计出每个手机用户在该时间段内的总流量(上行流量+下行流量),统计结果的格式为:

手机号码 字节数量

实验结果:

实验代码:

WcMap.java


import java.io.IOException;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

        public class WcMap extends Mapper<LongWritable, Text, Text, LongWritable>{
        @Override
        protected void map(LongWritable key, Text value, Context context)
            throws IOException, InterruptedException {
                    String str = value.toString();
                    String[] Words = StringUtils.split(str," ",10);
                    int i=0;
                    for(String word : words){
                        if(i==words.length-2||i==words.length-3)
                        context.write(new Text(words[0]), new LongWritable(Integer.parseInt(word)));
                        i++;
                    }
            }
        }

WcReduce.java


import java.io.IOException;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class WcReduce extends Reducer<Text, LongWritable, Text, LongWritable>{
    @Override
    protected void reduce(Text key, Iterable<LongWritable> values,Context context)
            throws IOException, InterruptedException {
        long count = 0;
        for(LongWritable value : values){
            count += value.get();
        }
        context.write(key, new LongWritable(count));
    }
}

WcRunner.java


import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
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.util.Scanner;
import org.apache.hadoop.fs.FSDatainputStream;
import org.apache.hadoop.fs.FileSystem;
import java.net.URI;

public class WcRunner{
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf);
        
        job.setjarByClass(WcRunner.class);
        
        job.setMapperClass(WcMap.class);
        job.setReducerClass(WcReduce.class);
        
        job.setOutpuTKEyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);
        
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(LongWritable.class);

        Scanner sc = new Scanner(System.in);
        System.out.print("inputPath:");
        String inputPath = sc.next();
        System.out.print("outputPath:");
        String outputPath = sc.next();

        try {
            FileSystem fs0 = FileSystem.get(new URI("hdfs://master:9000"), new Configuration());
            Path hdfsPath = new Path(outputPath);
            fs0.copyFromLocalFile(new Path("/headless/Desktop/workspace/mapreduce/WordCount/data/1.txt"),new Path("/mapreduce/WordCount/input/1.txt"));
            if(fs0.delete(hdfsPath,true)){
                System.out.println("Directory "+ outputPath +" has been deleted successfully!");
            }
        }catch(Exception e) {
            e.printStackTrace();
        }
        FileInputFormat.setInputPaths(job, new Path("hdfs://master:9000"+inputPath));
        FileOutputFormat.setOutputPath(job, new Path("hdfs://master:9000"+outputPath));
        job.waitForCompletion(true);
        try {
            FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), new Configuration());
            Path srcPath = new Path(outputPath+"/part-r-00000");

            FSDataInputStream is = fs.open(srcPath);
            System.out.println("Results:");
            while(true) {
                String line = is.readLine();
                if(line == null) {
                    break;
                }
                System.out.println(line);
            }
            is.close();
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}

【实验作业】索引倒排输出行号

在索引倒排实验中,我们可以得到每个单词分布在哪些文件中,以及在每个文件中出现的次数,修改以上实现,在输出的倒排索引结果中可以得到每个单词在每个文件中的具体行号信息。输出结果的格式如下:
单词 文件名:行号,文件名:行号,文件名:行号

实验结果:

MapReduce在3.txt的第一行出现了两次所以有两个1


import java.io.*;
import java.util.StringTokenizer;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileSplit;

public class MyMapper extends Mapper<Object,Text,Text,Text>{
    private Text keyInfo = new Text();
    private Text valueInfo = new Text();
    private FileSplit split;
    int num=0;

    public void map(Object key,Text value,Context context)
            throws IOException,InterruptedException{
        num++;
        split = (FileSplit)context.getInputSplit();
        StringTokenizer itr = new StringTokenizer(value.toString());
        while(itr.hasMoreTokens()){
            keyInfo.set(itr.nextToken()+" "+split.getPath().getName().toString());
            valueInfo.set(num+"");
            context.write(keyInfo,valueInfo);
        }
    }
}




import java.io.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.Reducer;

public class MyCombiner extends Reducer<Text,Text,Text,Text>{

    private Text info = new Text();

    public void reduce(Text key,Iterable<Text>values,Context context)
            throws IOException, InterruptedException{
        String  sum = "";
        for(Text value:values){
            sum += value.toString()+" ";
        }

                String record = key.toString();
        String[] str = record.split(" ");

        key.set(str[0]);
        info.set(str[1]+":"+sum);
        context.write(key,info);
    }
}


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

public class MyReducer extends Reducer<Text,Text,Text,Text>{
    private Text result = new Text();
    public void reduce(Text key,Iterable<Text>values,Context context) throws

            IOException, InterruptedException{
        String value =new String();
        for(Text value1:values){
            value += value1.toString()+" ; ";
        }
        result.set(value);
        context.write(key,result);
    }
}


import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
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.util.Scanner;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import java.net.URI;

public class MyRunner {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        Configuration conf = new Configuration();

        Job job = Job.getInstance(conf);

        job.setJarByClass(MyRunner.class);

        job.setMapperClass(MyMapper.class);
        job.setReducerClass(MyReducer.class);
        job.setCombinerClass(MyCombiner.class);

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);


        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(Text.class);

        Scanner sc = new Scanner(System.in);
        System.out.print("inputPath:");
        String inputPath = sc.next();
        System.out.print("outputPath:");
        String outputPath = sc.next();

        try {
            FileSystem fs0 = FileSystem.get(new URI("hdfs://master:9000"), new Configuration());
            Path hdfsPath = new Path(outputPath);
            if(fs0.delete(hdfsPath,true)){
                System.out.println("Directory "+ outputPath +" has been deleted successfully!");
            }
        }catch(Exception e) {
            e.printStackTrace();
        }

        FileInputFormat.setInputPaths(job, new Path("hdfs://master:9000"+inputPath));

        FileOutputFormat.setOutputPath(job, new Path("hdfs://master:9000"+outputPath));

        job.waitForCompletion(true);

        try {
            FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), new Configuration());
            Path srcPath = new Path(outputPath+"/part-r-00000");

            FSDataInputStream is = fs.open(srcPath);
            System.out.println("Results:");
            while(true) {
                String line = is.readLine();
                if(line == null) {
                    break;
                }
                System.out.println(line);
            }
            is.close();
        }catch(Exception e) {
            e.printStackTrace();
        }

    }
}

到此这篇关于云计算实验:Java MapReduce编程的文章就介绍到这了,更多相关Java MapReduce编程内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 云计算实验:Java MapReduce编程

本文链接: https://lsjlt.com/news/160360.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 云计算实验:Java MapReduce编程
    目录【实验作业】简单流量统计【实验作业】索引倒排输出行号实验题目: MapReduce:编程 实验内容: 本实验利用 Hadoop 提供的 Java API 进行编程进行 MapRe...
    99+
    2024-04-02
  • C++开发经验分享:C++云计算编程的实践经验
    C++开发经验分享:C++云计算编程的实践经验云计算是当前IT行业的一个热点领域,也是未来发展方向之一。而作为一门经典且强大的编程语言,C++在云计算领域也扮演着重要的角色。在云计算的实践过程中,我们可以通过C++来实现高效、可靠、可伸缩的...
    99+
    2023-11-22
    云计算 实践经验 C++开发
  • Java编写Mapreduce程序过程浅析
    目录Maven项目下所需依赖数据类型一、Mapper类二、Reducer类三、执行类程序执行结果一个Maprduce程序主要包括三部分:Mapper类、Reducer类、执行类。 M...
    99+
    2023-05-20
    Java编写MapReduce程序 Java编写MapReduce Java MapReduce
  • Java MapReduce编程方法是什么
    这篇文章主要讲解了“Java MapReduce编程方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java MapReduce编程方法是什么”吧!实验题目:Ma...
    99+
    2023-06-22
  • Python使用MapReduce编程模型统计销量
    目录1、生成模拟数据2、mapper实现3、reducer实现MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和...
    99+
    2024-04-02
  • 如何通过Java编程实现高效的算法计算?
    Java是一种高效的编程语言,它可以帮助我们实现高效的算法计算。在本文中,我们将讨论如何通过Java编程实现高效的算法计算。我们将从算法的基础知识开始,然后介绍Java编程语言的一些核心概念,最后展示一些演示代码。 算法是解决问题的方法。在...
    99+
    2023-09-25
    编程算法 laravel 对象
  • Python怎么使用MapReduce编程模型统计销量
    这篇文章主要介绍了Python怎么使用MapReduce编程模型统计销量的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python怎么使用MapReduce编程模型统计销量文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-06-30
  • 计算机网络实验
    一、验证性实验 1. ipconfig 自己计算机网络配置 ipconfig /all ​ 物理地址. . . . . . . . . . . . . : 00-E0-4C-68-04-91 IPv4 地址 . . ...
    99+
    2023-10-20
    网络 网络协议 服务器 Powered by 金山文档
  • Python 编程算法能否实现实时计算?
    Python 编程语言已经成为数据科学、机器学习和人工智能领域中最受欢迎的编程语言之一。Python 的易用性、可读性和可维护性使其成为许多开发人员和数据科学家的首选编程语言。但是,一个值得关注的问题是: Python 编程语言的解释执行...
    99+
    2023-07-04
    编程算法 numy 实时
  • Java程序设计基础实验一Java简单程序设计
    实验一 JAVA简单程序设计 一、实验目的 1.掌握Java应用程序的三个步骤:编写源文件、编译源文件和运行应用程序。 2.掌握同时编译多个Java文件。 3.掌握char型数据和int型数据之间的相互转换,同时了解Unicode字符表。 ...
    99+
    2023-10-11
    java
  • Java图形化界面编程实现简单计算器
    1.简单计算器 使用AWT编程,FrameNORTH区域放置TextField组件,将指定为4行5列GridLayout布局管理器的Panel放置于Frame中部区域,其中填充操作符...
    99+
    2024-04-02
  • Python编程算法:如何实现并行计算?
    在计算机科学领域中,计算机的速度一直是一个瓶颈。为了克服这个瓶颈,现代计算机通常采用并行计算方法。并行计算是指通过同时执行多个计算任务来提高计算机的效率。 Python作为一种高级编程语言,也可以实现并行计算。在本篇文章中,我们将探讨如何...
    99+
    2023-06-27
    编程算法 开发技术 git
  • java 矩阵乘法的mapreduce程序实现
    java 矩阵乘法的mapreduce程序实现map函数:对于矩阵M中的每个元素m(ij),产生一系列的key-value对<(i,k),(M,j,m(ij))>其中k=1,2.....知道矩阵N的总列数;对于矩阵N中的每个元素...
    99+
    2023-05-31
    java 矩阵乘法 mapreduce
  • 深入探究如何使用Java编写MapReduce程序
    目录MapReduce的原理Map阶段Reduce阶段Shuffle阶段MapReduce程序实现总结 MapReduce的原理 MapReduce由两个主要阶段组成:Map和Red...
    99+
    2023-05-19
    Java编写MapReduce程序 Java编写MapReduce Java MapReduce
  • Java文件编程的Linux实践技巧和算法经验分享?
    Java文件编程的Linux实践技巧和算法经验分享 Java文件编程是Java开发中不可或缺的一部分,它是与文件交互的必要手段。本文将为您介绍Java文件编程的Linux实践技巧和算法经验,帮助您更好地应用Java文件编程。 一、文件基本操...
    99+
    2023-08-10
    文件 linux 编程算法
  • Golang编程并发工具库MapReduce使用实践
    目录环境项目需求mapReduce使用说明需求实现业务逻辑创建任务队列运行结果结论引申阅读环境 go version go1.16.4 windows/amd64 Intel(R) ...
    99+
    2024-04-02
  • Java编写网络聊天程序实验
    本文实例为大家分享了Java编写网络聊天程序的具体代码,供大家参考,具体内容如下 课程名称 高级Java程序设计 实验项目 Java网络编程 实验目的: 使用客户机/服务器模式、基于...
    99+
    2022-11-13
    Java网络聊天程序 Java网络聊天 Java聊天程序
  • java gui实现计算器小程序
    本文实例为大家分享了java gui实现计算器小程序的具体代码,供大家参考,具体内容如下 废话不多说 , 直接贴代码 , 有详细的注释 , 我也是刚学GUI没多久 这个是效果图 : ...
    99+
    2024-04-02
  • Java实现计算器设计
    本文实例为大家分享了Java实现计算器设计的具体代码,供大家参考,具体内容如下 需求分析 目的是实现一个基于Java的可以求解带括号加减乘除表达式的带界面的计算器。 ...
    99+
    2024-04-02
  • JAVA实验二 面向对象程序设计
    一、实验目的 通过编程和上机实验,掌握类和构造方法的定义及创建对象的方法,掌握类的封装及继承原则,正确使用重载和覆盖等多态概念设计可复用方法,熟悉包、接口的使用方法,掌握面向对象的程序设计方法。 ...
    99+
    2023-10-25
    java jvm 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作