Eclipse-MapReduce

创建Map/reduce文件

在这里插入图片描述

三个类

map

package com.lizijun.test;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class MapperTwo extends Mapper<LongWritable, Text, Text, IntWritable> {
		//设置值为1
		private final static IntWritable one = new IntWritable(1);
		private Text word = new Text();
	public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
			String[] sp = value.toString().split(" ");
			for (int i = 0; i < sp.length; i++) {
			//发送到reduce
				context.write(word, one);
			}
	}

}


reduce

package com.lizijun.test;

import java.io.IOException;

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

public class ReduceTwo extends Reducer<Text, IntWritable, Text, IntWritable> {

	public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
		// process values
		int sum = 0;
		for (IntWritable val : values) {
		//累加单词出现的次数
			sum+=val.get();
		}
		context.write(key, new IntWritable(sum));
	}

}

job

package com.lizijun.test;

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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;



public class Job02 {

	public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
		//配置系统环境变量
		System.setProperty("HADOOP_USER_NAME", "root");
		Configuration conf = new Configuration();
		//自己core-site.xml的文件内容
		conf.set("fs.defaultFS","hdfs://192.168.96.180:9000");
		
		//提交任务
		Job job = Job.getInstance(conf);
		//设置任务名字
		job.setJobName("two");
		job.setJarByClass(Job02.class);
		job.setMapperClass(MapperTwo.class);
		job.setReducerClass(ReduceTwo.class);
		
		//设置输出key的类型
		job.setMapOutputKeyClass(Text.class);
		
		//设置输出value的类型
		job.setMapOutputValueClass(IntWritable.class);
		
		//设置输入到mapper的文件路径 就是读取hdfs文件的路径,不能是文件夹
		FileInputFormat.setInputPaths(job, new Path("/user/mapred-env.sh"));
		//设置传入的路径,只能是文件夹
		FileOutputFormat.setOutputPath(job,new Path("/user/hhh"));
		boolean aa = job.waitForCompletion(true);
		if(aa){
			System.out.println("成功");
		}
	}
}

shuffle管阀流程图
在这里插入图片描述

shuffle流程概括

因为频繁的磁盘I/O操作会严重的降低效率,因此“中间结果”不会立马写入磁盘,而是优先存储到map节点的“环形内存缓冲区”,在写入的过程中进行分区(partition),也就是对于每个键值对来说,都增加了一个partition属性值,然后连同键值对一起序列化成字节数组写入到缓冲区(缓冲区采用的就是字节数组,默认大小为100M)。当写入的数据量达到预先设置的阙值后(mapreduce.map.io.sort.spill.percent,默认0.80,或者80%)便会启动溢写出线程将缓冲区中的那部分数据溢出写(spill)到磁盘的临时文件中,并在写入前根据key进行排序(sort)和合并(combine,可选操作)。溢出写过程按轮询方式将缓冲区中的内容写到mapreduce.cluster.local.dir属性指定的目录中。当整个map任务完成溢出写后,会对磁盘中这个map任务产生的所有临时文件(spill文件)进行归并(merge)操作生成最终的正式输出文件,此时的归并是将所有spill文件中的相同partition合并到一起,并对各个partition中的数据再进行一次排序(sort),生成key和对应的value-list,文件归并时,如果溢写文件数量超过参数min.num.spills.for.combine的值(默认为3)时,可以再次进行合并。至此,map端shuffle过程结束,接下来等待reduce task来拉取数据。对于reduce端的shuffle过程来说,reduce task在执行之前的工作就是不断地拉取当前job里每个map task的最终结果,然后对从不同地方拉取过来的数据不断地做merge最后合并成一个分区相同的大文件,然后对这个文件中的键值对按照key进行sort排序,排好序之后紧接着进行分组,分组完成后才将整个文件交给reduce task处理。

作者:ASN_forever
来源:CSDN
原文:https://blog.csdn.net/ASN_forever/article/details/81233547
谈谈我对这个流程的理解
1.我以两截火车来打比方
火车上有40男人30女人30小孩
一截火车上就是一个磁盘
从这节火车上获取车上的信息
2.首先把车上的人拉出来放到一个另一截车厢里
之后这个房子达到八十人就把剩下的20人放到火车的
临时停靠点之后

3.这八十人会进行一个分片
男人分成一片 女人分成一片 小孩分成一片
分片之后,
4.男人女人和小孩在合并进入新的车厢
5.之后进行我们对他们的排序或者是一些操作
可以根据年龄 身高来排序
6.操作完成之后在进行合并,这样就把原本无序杂乱的数据从Map到Reduce变成了有序的数据放到了新的车厢里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 安装 Hadoop-Eclipse-Plugin 可以让你在 Eclipse 中方便地开发和管理 Hadoop 任务。以下是安装步骤: 1. 下载 Hadoop-Eclipse-Plugin,可以从 Apache 官网或其他镜像站点下载。 2. 打开 Eclipse,选择 Help -> Install New Software。 3. 点击 Add 按钮,输入 Name 和 Location,然后点击 OK。 4. 在 Work with 下拉列表中选择 Hadoop Plugin Site。 5. 在下方列表中勾选 Hadoop Plugin,然后点击 Next。 6. 确认安装选项,然后点击 Next。 7. 接受许可协议,然后点击 Finish。 8. 安装过程可能需要几分钟时间。安装完成后,重启 Eclipse。 9. 在 Eclipse打开 Preferences 对话框,选择 Hadoop。 10. 输入 Hadoop 安装路径和 Hadoop 核心库路径,然后点击 Apply。 11. 现在你可以在 Eclipse 中创建 Hadoop 项目和任务,并在本地或集群上运行它们了。 注意:安装 Hadoop-Eclipse-Plugin 前需要先安装 Hadoop 和 Eclipse。 ### 回答2: 在安装 Hadoop-Eclipse-Plugin之前,首先需要确保已经安装了Eclipse IDE。接下来,我们需要按照以下步骤来安装Hadoop-Eclipse-Plugin。 首先,我们需要下载Hadoop-Eclipse-Plugin的安装文件。可以在Hadoop官方网站或者其他可信的网站上找到该插件的下载链接。 下载完成后,打开Eclipse IDE。在Eclipse的菜单栏中选择“Help” -> “Eclipse Marketplace”。 在弹出的对话框中,点击左上角的搜索框,并输入“Hadoop-Eclipse-Plugin”。然后点击“Go”按钮进行搜索。 在搜索结果中找到Hadoop-Eclipse-Plugin,点击“Go”按钮旁边的“Install”按钮。接下来会弹出一个安装对话框。 在安装对话框中,会显示有关Hadoop-Eclipse-Plugin的详细信息。点击“Next”继续安装。 接下来,阅读并接受许可协议,然后点击“Finish”按钮。 安装过程可能需要一段时间,等待安装完成后,点击“Restart Now”按钮重启Eclipse IDE。 重启后,Hadoop-Eclipse-Plugin已经成功安装。可以通过Eclipse的菜单栏选择“Window” -> “Show View” -> “Other”,然后在弹出的对话框中选择“Hadoop”来打开Hadoop-Eclipse-Plugin视图。 通过Hadoop-Eclipse-Plugin的视图,可以方便地管理和操作Hadoop集群,包括上传和下载文件,提交和监控MapReduce任务等。 安装Hadoop-Eclipse-Plugin后,可以更加方便地开发和调试Hadoop应用程序,提高工作效率。 ### 回答3: 安装 Hadoop-Eclipse-Plugin 是为了在 Eclipse IDE 中方便地使用 Hadoop 大数据处理框架。 首先,确保已经安装并配置好了以下软件: 1. JDK:Hadoop 需要使用 Java 开发环境,确保安装了合适版本的 JDK。 2. Eclipse:安装最新版本的 Eclipse IDE。 接下来,按照以下步骤安装 Hadoop-Eclipse-Plugin: 1. 打开 Eclipse,选择 “Help” 菜单,然后选择 “Eclipse Marketplace”。 2. 在 “Eclipse Marketplace” 对话框中搜索 “Hadoop Plugin”,然后点击搜索结果中的 “Hadoop Plugin”。 3. 点击右侧的 “Go to the Project” 按钮,进入 Hadoop-Eclipse-Plugin 的项目页面。 4. 在项目页面中,找到适合你当前版本的插件,并点击右侧的 “Download” 按钮下载插件。 5. 下载完成后,返回到 Eclipse,选择 “Help” 菜单,然后选择 “Install New Software”。 6. 点击 “Add” 按钮,添加插件的本地文件或从网络上选择插件文件,然后点击 “OK”。 7. 在 “Work with” 框中选择下载好的插件,然后点击 “Next”。 8. 在安装对话框中勾选 “I accept the terms of the license agreement” 选项,然后点击 “Finish”。 9. 安装过程可能需要一些时间,完成后会提示重启 Eclipse。 安装完成后,插件将会添加到 Eclipse 的插件列表中。你可以在 Eclipse 的 “Window” 菜单下找到 “Hadoop” 相关的选项,通过它们来管理和运行 Hadoop 任务。 注意:在安装插件之前,请确保你已经正确地配置了 Hadoop 环境,并已经正确安装了 Hadoop。插件的版本应与你当前 Hadoop 版本兼容,否则可能导致插件无法正常工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值