代码编织梦想

本文相关idea的代码出自:https://blog.csdn.net/weixin_38468167/article/details/108658531

实验内容:开发MapReduce算法,实现统计分析

具体操作流程:

第一步:给windows准备好JDK环境并配置系统环境变量,系统环境变量需要设置三个地方:CLASSPATH,JAVA_HOMEjdk路径PATH如图.

  

第二步,安装IDEA2019.3.3版本,并破解(这里只需将IDEA打开,并且把idea破解包(自行下载)拖至IDEA界面即可) 

安装过程过于简单就不详细介绍了

第三步,给IDEA创建新项目,选择JDK版本(注意jdk版本必须与本机一致否则后面写代码会出错),如图:

第四步,编写函数

(1)MyMainClass(main函数,驱动函数)

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;


public class MyMainClass {

    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        Configuration conf = new Configuration();
        Job wordCountJob = Job.getInstance(conf);

//指定本job所在的jar包
        wordCountJob.setJarByClass(MyMainClass.class);

//设置wordCountJob所用的mapper逻辑类为哪个类
        wordCountJob.setMapperClass(MyMapClass.class);
//设置wordCountJob所用的reducer逻辑类为哪个类
        wordCountJob.setReducerClass(MyReduceClass.class);

//设置map阶段输出的kv数据类型
        wordCountJob.setMapOutputKeyClass(Text.class);
        wordCountJob.setMapOutputValueClass(IntWritable.class);

//设置最终输出的kv数据类型
        wordCountJob.setOutputKeyClass(Text.class);
        wordCountJob.setOutputValueClass(IntWritable.class);

//设置要处理的文本数据所存放的路径
        FileInputFormat.setInputPaths(wordCountJob, "hdfs://192.168.1.24:9000/mapreduce/input/mydata1");
        FileOutputFormat.setOutputPath(wordCountJob, new Path("hdfs://192.168.1.24:9000/mapreduce/output/"));

//提交job给hadoop集群
        wordCountJob.waitForCompletion(true);
    }
}

注意文件输入(FileInputFormat)那里,必须和自己在hdfs下mapreduce里所创建的文件路径一致,输出同理。

创建输入文件命令:

Hdfs dfs -mkdir -p /mapreduce/input(-p表示逐级创建)

创建输出文件命令:

Hdfs dfs -mkdir -p /mapreduce/output

(2)MyMapClass(分割,map节点)

import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
public class MyMapClass extends Mapper<LongWritable,Text,Text,IntWritable> {
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
     
        String line=value.toString();
        String[] words=line.split(",");
        for (String word:words){
            context.write(new Text(word),new IntWritable(1));
        }
    }
}

 (3)MyReduceClass(reduce节点)

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

public class MyReduceClass extends Reducer <Text, IntWritable,Text, IntWritable>{
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int total=0;
        //遍历value,求和
        for (IntWritable value:values){
            total+=value.get();
        }
        context.write(key,new IntWritable(total));
    }
}

(4)MyPartitionerClass(分页)

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.mapreduce.Partitioner;
import org.w3c.dom.Text;

public class MyPartitioner extends Partitioner <Text, IntWritable> {

    @Override
    public int getPartition(Text text, IntWritable intWritable, int i) {
        return Math.abs(text.hashCode())%i;
    }
}

 第五步,新建一份需要统计的文本命名为mydata1,命名随意,里面的内容也随意,示例如图:

上传到input文件:命令 hdfs dfs -put mydata1 /mapreduce/input(只能云端查看文件)

第六步,把函数打包成jar包(IDEA上的简单操作,如下图)

 以上步骤完成就会在本地文件生成jar包,如下图:

第七步,将生成的jar包上传到hadoop(这里我用PowerShell远程传输到hadoop),命令:scp java.hadoop.jar Flume@192.168.1.24:/home/Flume(Flume为自己的用户,“:”后面是自己上传的虚拟机的路径)

第八步,启动生成的jar包程序

这里遇到一些问题,就是直接启动会报错,后来通过查询知道jar包上传时自动生成了一些文件,必须删掉,命令:zip -d java.hadoop.jar META-INF/*.RSA META-INF/*.DSA META-INF/*.SF如下图:

然后启动jar包:

输出结果:命令:hdfs dfs -cat /mapreduce/output

端口查看:

到这里就结束啦~! 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_57028102/article/details/127493638

(图文详细)云计算与大数据实训作业答案(之篇三hdfs和mapreduce实训 )_sunny蔬菜小柠的博客-爱代码爱编程

HDFS和MapReduce实训 第1关:WordCount词频统计第2关:HDFS文件读写第3关:倒排索引第4关: 网页排序——PageRank算法

mapreduce_weixin_44332548的博客-爱代码爱编程

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)“和"Reduce(归约)”,是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程

大数据处理,mapreduce,spark,scala_topduke的博客-爱代码爱编程_现有数据文本文件number.txt,内容如下所示,请编写mapreduce程序将该文本文件中重

数据处理实验 实验目的 理解MapReduce、SPARK在Hadoop大数据平台中的作用; 掌握基本的MapReduce编程方法; 了解MapReduce解决一些常见的数据处理问题; 掌握基本的Spark sh

林子雨_大数据技术原理与应用课后习题-爱代码爱编程

写在前面 最近正在学习大数据技术,看到林子雨老师版的大数据技术原理与应用,经过学习后,根据课本及部分参考资料,完成了以下的课后习题练习。涵盖该书的1-13章。 第一章 大数据概述 P26 试述信息技术发展史上的3次信息化浪潮及其具体内容 信息化浪潮 发生时间 标志 解决的问题 第一次浪潮 1980年前后 个人计算机 信息处理 第二次浪潮 1995年

文档倒排索引算法实现-爱代码爱编程

大数据管理与分析实验报告 第一章 大数据系统基本实验 第二章 文档倒排索引算法实现 实验三 PageRank 算法实现 实验目的 倒排索引(Inverted Index)被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射,是目前几乎所有支持全文索引的搜索引擎都需要依赖的一个数据结构。通过对倒排索引的编程实现,熟练掌握Map

分布式与并行计算课程设计(附流程分析图)-爱代码爱编程

课题名称:倒排序索引的实现 一、项目 倒排序索引的实现。 二、要求 数据源:a.txt,b.txt,c.txt 请将数据源中的文本按照倒排序的规则统计每个单词在不同文本中出现的次数。最终要求得到类似以下的结果: hello a.txt8,b.txt3,c.txt1 tom a.txt5,b.txt2,c.txt1 ……………………. 流程分析

【大数据实验】06:MapReduce操作-爱代码爱编程

MapReduce操作 OVERVIEW MapReduce操作实验环境一、WordCount单词计数1.实验内容2.实验原理3.实验步骤(1)启动Hadoop集群(2)准备数据文件(3)创建Map/Reduce项目(4)程序测试及运行二、MapReduce数据去重1.实验内容2.实验原理3.实验步骤(1) 启动Hadoop集群(2)准备数据文件

mapreduce实例(六):倒排索引_笑看风云路的博客-爱代码爱编程

MR 实现 倒排索引 倒排索引原理实现思路代码编写Map代码Combiner代码Reduce代码完整代码 大家好,我是风云,欢迎大家关注我的博客 或者 微信公众号【笑看风云路】,在未来的日子里我们一起来学习大数据相关的技术,一起努力奋斗,遇见更好的自己! 倒排索引原理 "倒排索引"是文档检索系统中最常用的数据结构,被广泛地应用于全文搜索引擎