快乐大数据第四课 Mapreduce的优化

快乐大数据第四课 Mapreduce的优化

1.Shuffle的过程

(1)每个Mag Task把输出结果写到内存中的环形缓冲区;当内存环形缓冲区写入的数据量达到一定

阈值时,后台线程会把数据溢出写到磁盘(根据分区号(数据的哈希值/reduce task的ID的余数),把数据写入不同的分区,对每个分区上的数据进行排序)。

(2)随着Map Task的不断进行,磁盘上的溢出文件会越来越多。在Shuffle过程中,Aplication Master会将这些溢出

文件合并,对于一个分区下的不同分片,使用归并排序,同一分区内数据进行有序排序。

(3)Reduce Task通过网络远程拷贝mapTask的结果中属于它的分区文件。合并所有已经拷贝过的数据文件,使用归并排序算法,将相同key的数据归为一组,不同key之间有序排列。最终生成一个key对应一组值的数据集,一个key对应的一组数据调用一次reduce方法

"-Djava.ext.dirs=D:\java1.8\jre\lib\ext", "D:\java1.8\jre1.8\bin\server\jvm.dll"

2.Combiner总结

(1)Combiner调用的地方

    MapTask的环形缓冲区向磁盘溢写文件调用Combiner

    map阶段在合并本地多个文件写入一个大文件之前调用Combiner

(2)使用Combiner的好处

  减少Map Task输出数据量,由于临时结果写入本地磁盘,所以能减少磁盘I/O

  减少Reduce-Map网络传输数据量,由于reduce需要远程通过

应用场景:针对结果可以叠加的场景 SUM(YES),Average(NO)

设置方法:(local reducer)

  job.setCombinerClass(WordCountReducer.class)

3.YARN调度器

数据本地性 任务运行与需要处理的数据在同一个节点,则称为该任务具有“数据本地性”

数据本地性级别(性能由高到低排列)

  同节点(node-local)

  同机架(rack-local)

  跨机架(off-switch)

4.推测执行

    发现执行慢的任务,在其他机器上执行一个备份任务,同时运行,谁先运行

    完,则采用谁的结果。但对于存在的大数据量的负载倾斜,或者向数据库写

  数据。不适合推测执行

5.YARN-调度器

  之前采用FIFO(先入先出)的法则。资源利用低,紧急的作业无法插队

  随后采用多队列分开调度的方法:所有资源按照比例划分到不同的队列。每个队列实现单独的调度测了

  优点是让更多的应用程序获得资源,使用灵活,资源利用率高。

  调度器包括  CapacityScheduler调度器和FairScheduler调度器。

5(1)CapacityScheduler配置方法

  capacity-scheduler.xml参数说明

      capacity:队列占用的集群资源容量百分比,所有队列的容量之和少于100

    maximum-capacity 由于存在资源共享,因此一个队列使用的资源可能超过其容量,最多使用

  可通过该参数限制.配置完成后无需重启YARN,使用管理命令刷新调度设置

    bin/yarn madmin -refreshQueues

5(2)FairScheduler调度器

      以队列方式组织作业,基于最小资源量和公平共享量进行调度;支持资源抢占。内部队列中

    可用的策略:FIFO fair(默认),基于内存使用量调度分配资源

    任务延时调度:提高数据本地性和提高系统整体吞吐率。

实战

A演示公平调度器

  在node02上,cd /usr/local/hadoop/etc/hadoop

  编辑公平调度器后,重启

    yarn-daemon.sh stop resourcemanager

    yarn-daemon.sh start resourcemanager

新建 data_bi用户

echo data_bi |passwd --stdin data_bi

以用户data_bi完成wordcount的例子 阐释 公平调度器中不同用户完成作业的过程。

B广告曝光的例子

B1 计算曝光量

首先在第一台机器上切换到用户 hadoop

su hadoop

cd ~

mkdir jobs

在jobs目录下:

删除之前的 MapReducePro-1.0-SNAPSHOT.jar

rm -f MapReducePro-1.0-SNAPSHOT.jar

上传最新的

rz

mkdir mr_pvdata

cd mr_pvdata

rz

广告文件

格式  地域ID  用户ID 曝光还是点击 日期

在根目录下创建文件夹存数据

hadoop fs -mkdir -p  /addata/pv_click_datas

上传数据

hadoop fs -put ad_data_2017122*  /addata/pv_click_datas

hadoop fs -ls /addata/pv_click_datas

cd ~/jobs

hadoop jar MapReducePro-1.0-SNAPSHOT.jar bigdata.mr.MrPvSortByDayApp /addata/pv_click_datas  /addata/pv_click_datas/out

hadoop fs -ls /addata/pv_click_datas/out

查看排序结果

hadoop fs -cat /addata/pv_click_datas/out/part-r-00000

B2把28号的数据单独建立一个文件夹,再把28号的数据传上去,然后计算曝光率

hadoop fs -mkdir /addata/dt=20171228

hadoop fs -put ~/jobs/mr_pvdata/ad_data_20171228.txt /addata/dt=20171228

hadoop fs -ls hadoop fs /addata/dt=20171228

在jobs目录下

hadoop jar MapReducePro-1.0-SNAPSHOT.jar bigdata.mr.MrPvClickByAreaDayApp /addata/dt=20171228 /addata/dt=20171228/out

hadoop fs -ls /addata/dt=20171228/out

查看曝光率的结果

hadoop fs -cat /addata/dt=20171228/out/part-r-00000

B3 统计同一年龄段不同性别人的最高打分

hadoop fs -mkdir /addata/user_core

cd ~/jobs/mr_pvdata

hadoop fs  -put user_core.txt /addata/user_core

cd ..

在jobs目录下

hadoop jar MapReducePro-1.0-SNAPSHOT.jar bigdata.mr.MrUserAgeMaxCoreApp /addata/user_core  /addata/user_core/out

查看结果

会有三个 ,每个年龄段一个

hadoop fs -ls /addata/user_core/out

hadoop fs -cat /addata/user_core/out/part-r-00002

hadoop fs -cat /addata/user_core/out/part-r-00001

hadoop fs -cat /addata/user_core/out/part-r-00000

你可能感兴趣的:(快乐大数据第四课 Mapreduce的优化)