首页 > 编程语言 >MapReduce初级编程实践:编程实现文件合并和去重操作

MapReduce初级编程实践:编程实现文件合并和去重操作

时间:2024-11-13 11:47:03浏览次数:3  
标签:bin job 编程 MapReduce hadoop 初级 export apache import

实验环境:

操作系统:Linux(Centos7);  

Xsell 7

Hadoop版本:3.4.0(这里的版本根据自己的修改,可能小部分版本的Hadoop不适用于本文实验)

对于两个输入文件,即文件A和文件B,请编写MapReduce程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新的输出文件C。下面是输入文件和输出文件的一个样例供参考。

输入文件A的样例如下:

20170101     x

20170102     y

20170103     x

20170104     y

20170105     z

20170106     x

输入文件B的样例如下:

20170101      y

20170102      y

20170103      x

20170104      z

20170105      y

根据输入文件A和B合并得到的输出文件C的样例如下:

20170101      x

20170101      y

20170102      y

20170103      x

20170104      y

20170104      z

20170105      y

20170105      z

20170106      x

具体步骤:

1、首先启动hadoop

start-all.sh

2、新建文件夹以及相应的文件A.txt和B.txt

mkdir MapReduce

 进入该文件夹

cd MapReduce

创建文件并存储

vi A.txt

 输入数据:

20170101     x

20170102     y

20170103     x

20170104     y

20170105     z

20170106     x

vi B.txt

输入数据:

20170101      y

20170102      y

20170103      x

20170104      z

20170105      y

(切记要保存后退出!!!)

3、然后编码JAVA文件

vi MapReduce1.java

编写内容如下:(记得修改连接) 

import java.io.IOException;
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.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 MapReduce1 {
	public static class Map extends Mapper<Object, Text, Text, Text>{
		private static Text text = new Text();
		public void map(Object key, Text value, Context context) throws IOException,InterruptedException{
			text = value;
			context.write(text, new Text(""));
		}
	}
	public static class Reduce extends Reducer<Text, Text, Text, Text>{
		public void reduce(Text key, Iterable<Text> values, Context context ) throws IOException,InterruptedException{
			context.write(key, new Text(""));
		}
	}
	public static void main(String[] args) throws Exception{
		Configuration conf = new Configuration();
conf.set("fs.default.name","hdfs://hadoop01:9000");//这里的hadoop01:9000根据自己的去修改
		String[] otherArgs = new String[]{"input","output"}; 
		if (otherArgs.length != 2) {
			System.err.println("Usage: wordcount <in><out>");
			System.exit(2);
			}
		Job job = Job.getInstance(conf,"Merge and duplicate removal");
		job.setJarByClass(Merge.class);
		job.setMapperClass(Map.class);
		job.setCombinerClass(Reduce.class);
		job.setReducerClass(Reduce.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(Text.class);
		FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
		FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
		System.exit(job.waitForCompletion(true) ? 0 : 1);
	}
}

4、赋予权限

sudo chown -R root MapReduce

这里的root为用户名,可以更改为你使用的用户名,后面的MapReduce则是存放文件的文件夹。

(为后面的创建目录做准备)

5、 配置环境

//进入所修改的目标
vim ~/.bashrc
//所需要添加的内容
export HADOOP_HOME=/export/servers/hadoop  //这里的路径改为你的hadoop安装目录即可
export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH  
//使更改生效
source ~/.bashrc

 6、编译

(此时仍然在创建的MapReduce文件夹中)

javac MapReduce1.java

7、打包为jar包

jar -cvf MapReduce1.jar *.class

8、输入与输出

创建目录(需要与前面赋予权限的用户名相同,我前面是root,所以这里也是root)

这里我还在MapReduce文件夹中,所以用的这个,你也可以直接转到hadoop的bin目录下使用hdfs指令来完成。

/export/servers/hadoop/bin/hdfs dfs -mkdir -p /user/root

先删除原来的input和output文件夹(如果原本没有可以跳过) 

注意:一开始一定要没有,否则影响实验运行,导致最后生成jar包失败,即output文件夹内容错误或没有变化。

/export/servers/hadoop/bin/hdfs dfs -rm input/*
/export/servers/hadoop/bin/hdfs dfs -rm -r output

创建input文件夹

/export/servers/hadoop/bin/hdfs dfs -mkdir input

上传输入文件

/export/servers/hadoop/bin/hdfs dfs -put ./A.txt input
/export/servers/hadoop/bin/hdfs dfs -put ./B.txt input

使用生成的jar包

/export/servers/hadoop/bin/hadoop jar MapReduce1.jar MapReduce1

 查看输出

/export/servers/hadoop/bin/hdfs dfs -cat output/*

 成功输出:

标签:bin,job,编程,MapReduce,hadoop,初级,export,apache,import
From: https://blog.csdn.net/2201_75467743/article/details/143721756

相关文章

  • MapReduce初级编程实践:编写程序实现对输入文件的排序
     实验环境:操作系统:Linux(Centos7);  Xsell7Hadoop版本:3.4.0(这里的版本根据自己的修改,可能小部分版本的Hadoop不适用于本文实验)现在有多个输入文件,每个文件中的每行内容均为一个整数。要求读取所有文件中的整数,进行升序排序后,输出到一个新的文件中,输出的数据格式为每行两......
  • 【Cursor】揭秘Cursor:如何免费无限使用这款AI编程神器?
    在当今科技飞速发展的时代,人工智能编程工具层出不穷,其中Cursor凭借其卓越的功能和用户友好的体验,迅速在国际市场上引发了广泛关注。最近,该公司成功获得了OpenAI的6000万美元投资,进一步验证了其潜力和市场价值。那么,Cursor究竟具备怎样的强大能力?又该如何实现免费无限制使用......
  • sprintboot-aop切面编程demo
    AOP(面向切面编程)的核心概念是“切面”。切面是一个跨越多个对象的类,它封装了横切关注点的具体实现。通过定义切面,开发人员可以将通用功能从业务逻辑中分离出来,形成独立的模块。在SpringAOP中,切面由切点(Pointcut)、通知(Advice)和连接点(Joinpoint)组成。切点用于定义哪些连接点上应......
  • 编程判断主机字节序并了解大小端序
    1.主机字节序(1)概念:主机字节序又叫做CPU字节序,其不是又操作系统决定的,而是由CPU指令集架构决定的(2)分为两种:大端字节序:高序字节储存在低位地址,低序字节储存在高位地址小端字节序:高序字节储存在高位地址,低序字节储存在低位地址(3)储存方式:如0x12345678,其中78为低序字节,12为高序......
  • 树莓派开发资源知识点概览 树莓派基础介绍 树莓派编程环境搭建
    树莓派开发资源知识点概览章节目录一、树莓派基础介绍二、树莓派硬件资源三、树莓派系统安装与配置四、树莓派编程环境搭建五、树莓派常用开发工具与库六、树莓派网络配置与远程访问七、树莓派应用案例与实践八、树莓派学习资源与社区九、树莓派开发技巧与最佳实践一、树......
  • 【java编程】深入揭秘 Java 中 Person person = new Person(); 背后的奥秘
    当你在Java中写下Personperson=newPerson();时,这行代码看似简单,却蕴藏着深奥的计算机科学原理,甚至能揭示Java内存管理的神秘面纱。每当你创建一个对象,你实际上是在与Java的内核进行一场交互。今天,我们就来一起揭开这行代码的面纱,探索Java的对象创建机制,理解它是如何......
  • AOP(面向切面编程)
    五、AOP(1)AOP简介1.AOP(AspectOrientedProgramming)面向切面编程,一种编程范式,指导开发者如何组织程序结构OOP(ObjectOrientedProgramming)面向对象编程2.作用:在不惊动原始设计的基础上为其进行功能增强3.Spring理念:无入侵式/无侵入式(2)核心概念连接点(JoinPoint)程......
  • 高级程序员和初级程序员的区别
    遇到警告初级程序员:报错不影响运行就不管,警告直接忽略高级程序员:即使是警告也要修复,这说明代码写得不够好,同时又是一个学习的机会接需求初级程序员:接接接,做做做,谁让我能力比较强呢(加班多,业绩差)高级程序员:熟悉产品业务,会需求分析,不合理的需求拒绝掉(加班少,业绩优秀)需求评审......
  • Go语言并发编程:轻松驾驭多线程世界(九)
    Go语言并发编程:轻松驾驭多线程世界在这里插入图片描述在现代编程中,并发是让你的程序变得更强大、更高效的关键技能。幸运的是,Go语言提供了一种简单、直观的方式来处理并发任务,使用轻量级的Goroutine和Channel,让我们能够像指挥交通一样简单地处理多个任务。今天,我们将......
  • Go 语言已立足主流,编程语言排行榜24 年 11 月
    Go语言概述Go语言,简称Golang,是由Google的RobertGriesemer、RobPike和KenThompson在2007年设计,并于2009年11月正式宣布推出的静态类型、编译型开源编程语言。Go语言以其提高编程效率、软件构建速度和运行时性能的设计目标,以及简洁的语法、快速的编译速度和出色的并发处理能......