mapreduce

mapreduce

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)“和"Reduce(归约)”,是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

MapReduce 的优势

1、MapReduce易于理解:简单地实现一些接口,就可以完成一个分布式程序,而且这个分布式程序还可以分布到大量廉价的PC机器运行。也就是说,写一个分布式程序,跟写一个简单的串行程序是一模一样的。MapReduce易于编程的背后是MapReduce通过抽象模型和计算框架把需要做什么(What need to do)与具体怎么做(How to do)分开了,为程序员提供了一个抽象和高层的编程接口和框架,程序员仅需关心其应用层的具体计算问题,仅需要编写少量的应用本身计算问题的程序代码;如何具体完成这个并行计算任务所相关的诸多系统层细节被隐藏起来,交给计算框架去处理-----从分布代码的执行到大到数千、小到输几个节点集群的自动调度使用。

2、良好的扩展性
当计算机资源不能得到满足的时候,可以通过简单的增加机器来扩展它的计算能力。多项研究发现,基于MapReduce的计算性可以随节点数目增长保持近似于线性的增长,这个特点是MapReduce处理海量数据的关键,通过将计算节点增至几百或者几千可以很容易地处理数百TB甚至PB级别的离线数据。

3、高容错性
MapReduce设计的初衷就是使程序能部署在廉价的PC机器上,这就要求它具有很高的容错性。比如,其中一台机器宕机了,它可以把上面的计算任务转移到另一个节点上运行,不至于这个任务运行失败,而且这个过程不需要人工参与,完全是由Hadoop内部完成的。

MapReduce也是采用Master/Slave的主从架构,MapReduce包含4个组成部分,分别为Client、JobTracker、TaskTracker和Task,其架构图如下:在这里插入图片描述

Mapreduce是Hadoop的核心框架之一

Mapreduce是分布式处理的框架
HDFS与MApreduce最大的特点就是分布式
简单的说一个庞大的数据 用一台计算机完成不了的计算数据 交给了多台计算机一起计算 最后合并各个计算机的结果 输出结果
mapreduce可以分成两大部分 map 和 reduce
map 是将数据切片
reduce 就是将数据合并在这里插入图片描述

利用mapreduce 做wordcount步骤

1.首先需要在给HDFS上传一个文件 其中还有单词的文件
在linux中启动hadoop start-dfs.sh
启动完成后 上传你在linux中创建的文件 hdfs dfs -put 目标文件 目标路径 ----上传
2.在eclipse中穿件Mapreduce project 文件 如图
在这里插入图片描述
然后导入需要的jar

3.我们需要三个类
mapper 拆分文件
reduce 合并数据
job 负责启动mapper 和reduce 这两个进程

MyMapper类

package com.zhangtao.word;

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 Mapper01 extends Mapper<LongWritable, Text, Text, IntWritable> {
    private Text word = new Text();
	private static final IntWritable one = new IntWritable(1);
	public void map(LongWritable ikey, Text ivalue, Context context) throws IOException, InterruptedException {
	    String[] sp = ivalue.toString().split(" ");
	    for(int i=0;i<sp.length;i++){
	    	context.write(word, one);
	    }
	}

}

Myreducer类

package com.zhangtao.word;

import java.io.IOException;

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

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

public void reduce(Text _key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
	int sum = 0;
	for (IntWritable i : values) {
		int j = i.get();
		sum+=j;
		}
	context.write(_key, new IntWritable(sum));
	}

}

JOb类

public class Job1 {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
	Configuration conf = new Configuration();
	conf.set("fs.defaultFS", "hdfs://192.168.3.140:9000");
	Job job = Job.getInstance(conf);
	job.setJarByClass(Job1.class);
	job.setMapperClass(Mapper01.class);
	job.setReducerClass(Reducer01.class);
	job.setMapOutputKeyClass(Text.class);
	job.setOutputValueClass(IntWritable.class);
	FileInputFormat.setInputPaths(job, new Path("/user/abc.txt"));
	FileOutputFormat.setOutputPath(job, new Path("/user/haha"));
	boolean zt=job.waitForCompletion(true);
	if(zt){
		System.out.println("执行成功");
	}
}

}

HDFS中的一些命令
    hdfs dfs -mkdir 目录     -----创建目录
    hdfs dfs -put 目标文件   目标路径  ----上传
    hdsf dfs -get 目标文件 目标路径  -----下载
    hdfs dfs -ls 目录  ------查看目录下的文件
    hdfs dfs -cat 文件   --查看文件内容
    hdfs dfs -rmr 文件   --删除文件
    hdfs dfs -mv  改名称的文件路径  要改成的文件路径
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值