hadoop的分布式计算框架MapReduce

MapReduce概述

源自于Google的MapReduce论文,论文发表于2004年12月。

Hadoop MapReduce是Google MapReduce的克隆版。

MapReduce优点:海量数据离线处理&易开发&易运行。

MapReduce缺点:实时流式计算。

wordcount:统计文件中每个单词出现的次数

需求:求wordcount

1)文件内容大小:shell

2)文件内容很大:比如TB、GB,那么如何解决大数据量的统计分析呐?

工作中很多场景的开发都是wc的基础上进行改造的。

以上需求,都需要借用分布式计算框架来解决了:MapReduce


hadoop的分布式计算框架MapReduce_第1张图片

MapReduce编程模型

     1、准备map处理的输入数据

     2、Mapper处理

    3、 Shuffle

    4、 Reduce处理

    5、 结果输出

MapReduce架构


hadoop的分布式计算框架MapReduce_第2张图片

Split

InputFormat

OutputFormat

Combiner

Partitioner


hadoop的分布式计算框架MapReduce_第3张图片


hadoop的分布式计算框架MapReduce_第4张图片

MapReduce编程

使用java 来开发wordcount案例

使用IDEA+MAVEN开发wordcount案例:

1)开发

2)编译

3)jar包上传到服务器

4)运行 

hadoop jar /home/hadoop/lib/你开发的jar名字.jar  主程序class名称 参数1  参数2

例如: hadoop jar /usr/hadoop/hadoop-2.6.0-cdh5.7.0/lib/bigdata-1.1.1.jar com.sc.mapreduce.WordCountApp hdfs://10.6.24.143:8020/xxx/test.txt hdfs://10.6.24.143:8020/xxx/output/wc

常见错误

相同的代码和脚本,再次执行会包错:

WARN security.UserGroupInformation: PriviledgedActionException as:root (auth:SIMPLE) cause:org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://10.6.24.143:8020/xxx/output/wc already exists

Exception in thread "main" org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://10.6.24.143:8020/xxx/output/wc already exists

原因:在MapReduce中,输出文件是不能事先存在的,要想避免这个问题,有两种方式:

第一种方式:就需要我们手工通过

shell的方式将输出文件删除。

hadoop fs -rm -r /xxx/output/wc

第二种方式:通过java api的方式(推荐)

//删除存在的输出目录

Path outputPath=new Path(args[1]);

FileSystem fileSystem = FileSystem.get(configuration);

if (fileSystem.exists(outputPath)){

fileSystem.delete(outputPath,true);//递归删除

}

MapReduce编程之Combiner


hadoop的分布式计算框架MapReduce_第5张图片
Combiner 就是在map阶段提前做reduce的操作,减少传输到reduce的key的数量,即是减少传输数据量,缩短传输时间。

虽然combiner有优点,但并非所有场景都适合:

求和,计数场景:适合

求平均数场景:不适合

MapReduce编程之Partitioner

1)Partitioner决定MapTask输出的数据交由哪个ReduceTask处理。

2)默认实现:分发的key的hash值对Reduce Task个数取模

案例如下:


hadoop的分布式计算框架MapReduce_第6张图片
按照指定规则类型来分类

我们执行程序看到有几个reduce就会生成几个输出文件


JobHistory

作用:

记录已经运行完的MapReduce信息到指定的HDFS目录下。

默认是不开启的。

如何启动呐?

第一步完成

yarn-site.xml的配置

yarn.log-aggregation-enable

true

mapred-site.xml的配置

mapreduce.jobhistory.address

10.6.24.143:10020

mapreduce.jobhistory.webapp.address

10.6.24.143:19888

<--执行完毕作业的日志存放目录-->

mapreduce.jobhistory.done-dir

/history/done

<--执行中的作业日志存放目录-->

mapreduce.jobhistory.intermediate-done-dir

/history/done_intermediate


第二步重启yarn服务

./stop-yarn.sh

./start-yarn.sh

第三步启动jobHistory服务

./mr-jobhistory-daemon.sh start historyserver

如果向停止jobHistory服务命令

./mr-jobhistory-daemon.sh stop historyserver

你可能感兴趣的:(hadoop的分布式计算框架MapReduce)