实验三-MapReduce编程

这篇具有很好参考价值的文章主要介绍了实验三-MapReduce编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前提:安装好Hadoop

参考文章:

MapReduce编程实践(Hadoop3.1.3)_厦大数据库实验室博客

实验要求

基于MapReduce执行“词频统计”任务。 将提供的A,B,C文件上传到HDFS上,之后编写MapReduce代码并将其部署到hadoop,实现文件A,B,C中的词频统计。对实验过程进行详细阐述。

实验步骤

        1. 启动Hadoop

        实验三-MapReduce编程

         2. 上传本地文件至hdfs中

  •         在hdfs中创建存放本地文件的文件夹
$./bin/hdfs dfs -mkdir -p -mkdir /user/hadoop/input

$./bin/hdfs dfs -mkdir -p -mkdir /user/hadoop/input
  •         将文件上传至hdfs中

        实验三-MapReduce编程

实验三-MapReduce编程

 (上传结果)

        

        3. 在eclipse中创建java代码

  •         创建java project,并导入Hadoop相关包
(1)“/usr/local/hadoop/share/hadoop/common”目录下的hadoop-common-3.1.3.jar和haoop-nfs-3.1.3.jar;

(2)“/usr/local/hadoop/share/hadoop/common/lib”目录下的所有JAR包;

(3)“/usr/local/hadoop/share/hadoop/mapreduce”目录下的所有JAR包;

(4)“/usr/local/hadoop/share/hadoop/mapreduce/lib”目录下的所有JAR包。

实验三-MapReduce编程

  •         编写MapReduce代码
  • 实验三-MapReduce编程

实验三-MapReduce编程

实验三-MapReduce编程

实验三-MapReduce编程

//java类相关包
import java.io.IOException;
import java.util.Iterator;
import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;//这个包是专门管理配置文件的,包含了hadoop中所有关于文件管理的类,所有的都是继承它
import org.apache.hadoop.fs.Path;//可以读取url路径
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Job;//调用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;

public class WordCount {
    
	//map 处理逻辑
	public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
        private static final IntWritable one = new IntWritable(1);//声明输出类型变量
        private Text word = new Text();//声明输出类型变量
		//重写Mapper框架逻辑,加入本身项目的处理逻辑
		//定义输出的文本类型,输出格式,上下文环境变量
        public void map(Object key, Text value, Mapper<Object, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {
            StringTokenizer itr = new StringTokenizer(value.toString()); //定义分词器,切分文本,默认划分
            while(itr.hasMoreTokens()) {
                this.word.set(itr.nextToken());//从分词器中取出
                context.write(this.word, one);//输出格式为:<word,one>
            }
        }
    }
	
	//reduce 处理逻辑
	//输入形式 <key,value-list>
	public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
        private IntWritable result = new IntWritable();//声明输出类型变量
        //重写Mapper框架逻辑,加入本身项目的处理逻辑
        public void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
            int sum = 0;//sum统计单个单词的词频结果
            IntWritable val;
            for(Iterator i$ = values.iterator(); i$.hasNext(); sum += val.get()) {//遍历循环
                val = (IntWritable)i$.next();
            }
            this.result.set(sum);//将得到的词频数量写入result中
            context.write(key, this.result);//输出格式为:<key,result>
        }
    }
	
	//编写主函数
    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();//初始化配置
        String[] otherArgs = (new GenericOptionsParser(conf, args)).getRemainingArgs();
        if(otherArgs.length < 2) {
            System.err.println("Usage: wordcount <in> [<in>...] <out>");
            System.exit(2);
        }
		
        Job job = Job.getInstance(conf, "word count");//设置环境参数
        job.setJarByClass(WordCount.class);//设置整个程序的类名
        job.setMapperClass(WordCount.TokenizerMapper.class);//添加MyMapper类
        job.setCombinerClass(WordCount.IntSumReducer.class);
        job.setReducerClass(WordCount.IntSumReducer.class);//添加IntSumReducer类
        job.setOutputKeyClass(Text.class);//设置输出类型
        job.setOutputValueClass(IntWritable.class); //设置输出类型
		
		//将文件夹中所有文件作为输入文件
        for(int i = 0; i < otherArgs.length - 1; ++i) {
            FileInputFormat.addInputPath(job, new Path(otherArgs[i]));
        }
		//设置输出文件
        FileOutputFormat.setOutputPath(job, new Path(otherArgs[otherArgs.length - 1]));
        System.exit(job.waitForCompletion(true)?0:1);//完成词频统计任务
    }
	
}

         

        4. java代码打包成jar包并部署到Hadoop上

实验三-MapReduce编程

实验三-MapReduce编程

实验三-MapReduce编程

        5. 对文件实现词频统计

        在终端运行java 代码实现词频统计

实验三-MapReduce编程

实验三-MapReduce编程

实验三-MapReduce编程


小贴士

 在终端运行java 代码实现词频统计时一定要确保输出的路径也就是output,不存在,要不然会报错的。

实验中遇到的问题及解决方法

The class file Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT> contains a signature'(Lorg/apache/hadoop/mapreduce/Mapper<TKEYIN;TVALUEIN;TKEYOUT;TVALUEOUT;>.Context;)V' ill-formed at position 74

 实验三-MapReduce编程

 解决方法:因为在创建java project时没有选择当前的Linux系统中已经安装好的JDK而出现的问题

实验三-MapReduce编程

修改前

 实验三-MapReduce编程

修改后


实验参考厦门大学老师的hdfs编程教程

如果有什么错漏的地方,请各位大佬指教[抱拳]文章来源地址https://www.toymoban.com/news/detail-462707.html

到了这里,关于实验三-MapReduce编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实验5 MapReduce初级编程实践(1)——编程实现文件合并和去重操作

    通过实验掌握基本的MapReduce编程方法; 掌握用MapReduce解决一些常见的数据处理问题,包括数据去重、数据排序和数据挖掘等。 操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04) Hadoop版本:3.1.3 编程实现文件合并和去重操作 对于两个输入文件,即文件A和文件B,请编写MapReduce程序,

    2023年04月15日
    浏览(48)
  • 大数据技术原理与应用实验4——MapReduce初级编程实践

    链接: 大数据技术原理与应用实验1——熟悉常用的HDFS操作 链接: 大数据技术原理与应用实验2——熟悉常用的Hbase操作 链接: 大数据技术原理与应用实验3——NoSQL和关系数据库的操作比较 (1)通过实验掌握基本的MapReduce编程方法; (2)掌握用MapReduce解决一些常见的数据处理

    2024年02月06日
    浏览(51)
  • 《大数据系统与编程》MapReduce程序实现词频统计实验报告

    MapReduce程序实现词频统计            实验目的 1) 理解Hadoop中MapReduce模块的处理逻辑; 2)熟悉MapReduce编程; 实验平台 操作系统:Linux 工具:Eclipse或者Intellij Idea等Java IDE 实验内容 1) 在电脑上新建文件夹input,并input文件夹中创建三个文本文件:file1.txt,file2.txt,file3.tx

    2024年02月09日
    浏览(38)
  • 接上篇文章,完成Hadoop集群部署实验

    基于开源软件搭建满足企业需求的Hadoop生态系统,构建基础的大数据分析平台。 本实验采用4台机器搭建Hadoop完全分布式集群,其中1台机器作为Master节点,另外三台机器作为Slave节点,主机名分别为Slave1,Slave2和Slave3。 Hadoop集群部署 HDFS分布式文件系统管理 Hadoop2.7.3 VMware Work

    2024年02月10日
    浏览(56)
  • 云计算与大数据入门实验四 —— MapReduce 初级编程实践

    通过实验掌握基本的 MapReduce 编程方法 掌握用 MapReduce 解决一些常见的数据处理问题,包括数据去重、数据排序和数据挖掘等 (一)编程实现文件合并和去重操作 对于两个输入文件,即文件A和文件B,请编写MapReduce程序,对两个文件进行合并,并剔除其中重复的内容,得到一个

    2024年02月05日
    浏览(44)
  • 大数据技术原理及应用课实验5 :MapReduce初级编程实践

    目录 一、实验目的 二、实验平台 三、实验步骤(每个步骤下均需有运行截图) (一)编程实现文件合并和去重操作 (二)编写程序实现对输入文件的排序 (三)对给定的表格进行信息挖掘 四、实验总结 五、优化及改进(选做) 实验5  MapReduce初级编程实践 1. 通过实验掌

    2024年01月21日
    浏览(47)
  • 实验5 MapReduce初级编程实践(3)——对给定的表格进行信息挖掘

    通过实验掌握基本的MapReduce编程方法; 掌握用MapReduce解决一些常见的数据处理问题,包括数据去重、数据排序和数据挖掘等。 操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04) Hadoop版本:3.1.3 下面给出一个child-parent的表格,要求挖掘其中的父子辈关系,给出祖孙辈关系的表格。

    2024年02月10日
    浏览(42)
  • 实验5 MapReduce初级编程实践(2)——编写程序实现对输入文件的排序

    通过实验掌握基本的MapReduce编程方法; 掌握用MapReduce解决一些常见的数据处理问题,包括数据去重、数据排序和数据挖掘等。 操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04) Hadoop版本:3.1.3 现在有多个输入文件,每个文件中的每行内容均为一个整数。要求读取所有文件中的整数

    2024年02月09日
    浏览(39)
  • Ubuntu中之前安装好Nvidia驱动driver但是检测不到的解决(仅供参考)

    我自己之前手动安装的Nvidia driver,我采取了以下策略:1,彻底删除之前安装的Nvidia driver;2,更新系统中所有程序和依赖;3,命令行安装Nvidia driver Uubuntu的自动更新会破坏掉原有的依赖关系,从而导致之前安装好的Nvidia driver由于依赖变动而不可用。 关闭Ubuntu自动更新请参考

    2023年04月20日
    浏览(31)
  • 面向对象编程 实验三 sduwh 子窗口与控件的基本用法、资源的使用 参考实验报告1

    源自网络收集,仅供参考 实验三收集到两份完整报告,这是其一,另一份见本专栏下一篇文章。 《面向对象程序设计》 实验三 实验题目:子窗口与控件的基本用法、资源的使用 整体目的:理解、窗口之间的消息传送、调用栈;掌握光标、图标、菜单的制作和使用方式;掌

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包