大数据实训02--MapReduce原理与开发

思考小问题

统计一个100G大小的文件进行词频的解决方法

方法一:如果小文件可以编写一个小程序,进行遍历,统计词频。

方法二:编写一个多线程程序,实现并发,比上一个方法更加有效,但是要防止多个线程重复提交(同步互斥问题)。

方法三:程序交给多台服务器去完成,痛点:需要大量人工参与。

方法四:通过MapReduce框架自动化完成

MapReduce

特点:易于编程(有两个接口ma--大任务分成小任务,任务分解,reduce---任务汇总),良好的扩展,高容错性,适合离线处理

是一个编程框架:只需要程序员去设计map,reduce函数

MapReduce语义:相同的key为一组,调用一次reduce方法,在方法内迭代这一组数据的计算

输入(key,val)数据集----》map映射成一个中间结果(k,v)---》reduce(k,v).

先map处理结果作为reduce的输入(线性关系),map的输入的是大数据集的分片split(split窗口机制,大小可以调整,默认split大小近似block大小),默认框架以行为单位,可以实现分布式并行运算。

map的数量取决于split的数量

reduce的数量取决于程序员的设计partition

大数据实训02--MapReduce原理与开发_第1张图片

MapTask

map的数量一般比reduce多。

框架内部实现机制(分区,排序,写入磁盘)

map生成partition分区>数据,用缓冲区(buffer in memory)暂时存储,积累一定量后一次性写入磁盘。

partition的个数决定reduce的个数,reduce连接网络到各个map中拉取分区。

MapReduce编程模型

Input---->Splitting--->Mapping--->Shuffling--->Reducing--->final result

Mapping:生成键值对

shuffing (洗牌):分组、排序、拉取数据

大数据实训02--MapReduce原理与开发_第2张图片

 版本区别:

Hadoop 1.x 提现计算向数据移动(移动计算)问题:压力过大,单点故障

两个核心角色(核心进程):jobtrack(资源分配和调度两个任务),tasktrack

Hadoop 2.x :yarn提供资源管理和调度(RM,NM),用两个进程来分解任务

在启动Hadoop的基础上启动yarn,可以看到激活了RM和NM两个进程

大数据实训02--MapReduce原理与开发_第3张图片

如果环境不稳定丢失了某个进程可以单独启动

大数据实训02--MapReduce原理与开发_第4张图片

运行统计词频的jar包(wordcount),处理文件123.txt,输出结果放入output1 

http://192.168.228.100:8088/

网页上查看进程运行

大数据实训02--MapReduce原理与开发_第5张图片

查看Wordcount运行详情 

大数据实训02--MapReduce原理与开发_第6张图片

查看运行结果

大数据实训02--MapReduce原理与开发_第7张图片

MapReduce开发

搭建开发环境

window开发程序,Linux运行

配置eclipse(Hadoop环境),创建java项目(以实训项目材料为例)

前提准备好材料(1.解压材料包,2.下载插件复制到eclipse的插件包中)

大数据实训02--MapReduce原理与开发_第8张图片大数据实训02--MapReduce原理与开发_第9张图片

将bin覆盖hadoop-2.7.5中的bin 

大数据实训02--MapReduce原理与开发_第10张图片大数据实训02--MapReduce原理与开发_第11张图片

找到hadoop-2.7.5/bin/hadoop.dll 文件复制到system32下

大数据实训02--MapReduce原理与开发_第12张图片大数据实训02--MapReduce原理与开发_第13张图片

配置hadoop环境变量 

 大数据实训02--MapReduce原理与开发_第14张图片

打开eclipse进行配置,window--preference--java--user Library添加lib库 

大数据实训02--MapReduce原理与开发_第15张图片大数据实训02--MapReduce原理与开发_第16张图片

创建一个java项目后,右击选buildpath添加上hadoop的库 

大数据实训02--MapReduce原理与开发_第17张图片

大数据实训02--MapReduce原理与开发_第18张图片大数据实训02--MapReduce原理与开发_第19张图片

从虚拟机的hadoop文件中复制config文件到宿主机,并复制到创建的java项目中 

大数据实训02--MapReduce原理与开发_第20张图片大数据实训02--MapReduce原理与开发_第21张图片

 后面MyWc项目中目前讲到的代码(项目还没讲完,所以文件有带错)

大数据实训02--MapReduce原理与开发_第22张图片当前工程目录如图

MyWc.java代码(注意import正确的hadoop库函数)

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class MyWc {
	public static void main(String[] args) throws IOException {
		
		//读取配置文件
		Configuration conf = new Configuration(true);
		//创建一个作业job
		Job job = Job.getInstance(conf);
		//设置作业的处理类
		 job.setJarByClass(MyWc.class);

		// Specify various job-specific parameters     
	     job.setJobName("myjob");
	     //路径
	     Path path=new Path(args[0]);//主函数main传参
		//输入路径和输出路径
	     FileInputFormat.addInputPath(job, path);//ctrl+1 创建本地路径
	     
	     Path output=new Path(args[1]);
	     //判断是否存在
	     FileSystem fs=output.getFileSystem(conf);
	     if(fs.exists(output)) {
	    	 fs.delete(output, true);
	     }
		FileOutputFormat.setOutputPath(job, output);
	     
	     
//	     job.setInputPath(new Path("in"));
//	     job.setOutputPath(new Path("out"));
		
		
	     //设置作业处理的mapper和reduce
		
		
	     job.setMapperClass(MyMapper.class);
	     job.setReducerClass(MyReducer.class);

	     // Submit the job, then poll for progress until the job is complete
	     job.waitForCompletion(true);
	 
		
	}
}

注意:上面代码中的job类,按ctrl同时点击,进入job.class,点击attach scource链接上源码,源码就是之前解压文件中的源代码包

大数据实训02--MapReduce原理与开发_第23张图片 大数据实训02--MapReduce原理与开发_第24张图片

//快捷键

//ctrl+shift+t---->open type

//ctrl+1---->创建变量

持续更新.......

你可能感兴趣的:(Linux,大数据)