MapReduce的学习

Mapreduce的学习:

首先是在eclipse上配置各种文件

MR原语:

 

输入(格式化k,v)数据集àmap映射成一个中间数据集(k,v)àreduce

“相同”的key为一组,调用一次reduce方法,方法内迭代这一组数据进行计算

 

 

排序

比较

遍历

计算

在hdfs中默认的将文件切成很多的小片。切成片解耦,有了偏移量,就可以参与计算了。

因此,map的多少是由切片的大小决定的,切片的大小是由数据决定的。

 

源语:相同的key为一组。

Reduce的数量是由数组的组数决定的。

是由人来决定的,人决定了维度的大小。

一个数组,必须从第一行遍历到最后一组,如果分组的话,时间上就可以减半。

还要排序有序,1万组数据,如果排序了,只需要一个小时,如果不排序,则需要一万个小时。

Reducetask,分区,一个分区里可以包含多个数据。

block > split

1:1

N:1

1:N

split > map

1:1

map > reduce

N:1

N:N

1:1

1:N

group(key)>partition

1:1

N:1

N:N

1:N?  >违背了原语

partition > outputfile

一个数组快可以对应很多个,或者一个切片

一个split对应一个map

一个map对应一个或者n个reduce

Map的输出正好是reduce的输入。

Shuffer:洗牌

数据向计算移动。

如何让shuffer的效率最高。

split一条一条,以一条记录为依据,也就是换行符。

映射成key -value的形式。

相同的key为一组。

面试的时候,buffer额调优,会是加分项。

有很多的机械读写,线性读写。

相同的key,具有相同的哈希值,就会去到相同的分区里。

排序的顺序是:先按分区排序,先按P排序,再按K排序

P .K排序。

相同分区排在一起,分区内相同的key排在一起。

Map中:

逻辑切片——————>通过key在map中化分组————》算出分区号,在内存中准备buffer,等到累积到一定的量的时候,写入map中————》在map中,相同的P排在一起,相同的key排在前一起。

Map和reduce是线性依赖关系。

Reduce可以先拉数据,对内是有序的,对外是无序的。然后是归并,再次是计算。

 

源语:相同的key为一组。调用一次。

相同的key为一组,存在内存中。

MapReduce不需要太大的内存。

一个reduce是一个分区,一个分区对应一个文件。

Map端需要读懂数据

理解:

Map:

读懂数据

映射为KV模型

并行分布式

计算向数据移动

Reduce:

数据全量/分量加工

Reduce中可以包含不同的key

相同的Key汇聚到一个Reduce中

相同的Key调用一次reduce方法

排序实现key的汇聚

K,V使用自定义数据类型

作为参数传递,节省开发成本,提高程序自由度

Writable序列化:使能分布式程序数据交互

Comparable比较器:实现具体排序(字典序,数值序等)

排序:字典序,数值序。

体现的是计算向数据的移动。

切片决定map,数据集是人给的,数据集决定切片。

Config,配置文件,jar包,三个

1.调度

2.资源管理

MRv1角色:

JobTracker

核心,主,单点

调度所有的作业

监控整个集群的资源负载

TaskTracker

从,自身节点资源管理

和JobTracker心跳,汇报资源,获取Task

Client

作业为单位

规划作业计算分布

提交作业资源到HDFS

最终提交作业到JobTracker

弊端:

JobTracker:负载过重,单点故障

资源管理与计算调度强耦合,其他计算框架需要重复实现资源管理

不同框架对资源不能全局管理

Yarn:分布式资源管理系统

Nodemanager:节点管理

Resourcemanager:资源管理

Applicationmaster应用程序主

Container:容器

Client:客户,顾客

JVM:java virtual machine

Map :地图

Resource:资源

Submission:提交

Request:请求

Submission:提交

Partitioner:分区器

CPU

Mem

I/o

Linux

Group

Nn:namenode

Nm:nodemanager

Iterator:迭代器

Sort:排序

Spill:溢写

Shuffer

Intwritable

Text

Object

Comparator:比较器

Get

Set

Reflect:反射

Init:初始化

test

Api

Zk:

Zkfc:

客户端(作业)

客户端随着作业而启动。Aplicationmaster也是随着作业而启动的。

1.X:各种端点问题

2.X:出现了yarn

MRv2:On YARN

YARN:解耦资源与计算

ResourceManager

主,核心

集群节点资源管理

NodeManager

与RM汇报资源

管理Container生命周期

计算框架中的角色都以Container表示

Container:【节点NM,CPU,MEM,I/O大小,启动命令】

默认NodeManager启动线程监控Container大小,超出申请资源额度,kill

支持Linux内核的Cgroup

MR :

MR-ApplicationMaster-Container

作业为单位,避免单点故障,负载到不同的节点

创建Task需要和RM申请资源(Container)

Task-Container

Client:

RM-Client:请求资源创建AM

AM-Client:与AM交互

 

YARN

 

YARN:Yet Another Resource Negotiator;

Hadoop 2.0新引入的资源管理系统,直接从MRv1演化而来的;

核心思想:将MRv1中JobTracker的资源管理和任务调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现

ResourceManager:负责整个集群的资源管理和调度

ApplicationMaster:负责应用程序相关的事务,比如任务调度、任务监控和容错等

YARN的引入,使得多个计算框架可运行在一个集群中

每个应用程序对应一个ApplicationMaster

目前多个计算框架可以运行在YARN上,比如MapReduce、Spark、Storm等

Linux的命令总结

配置文件:

cp mapred-site.xml.template   mapred-site.xml

vi mapred-site.xml配置

 <property>

        <name>mapreduce.framework.name</name>

        <value>yarn</value>

  </property>

 

 

vi yarn-site.xml

分发:

scp mapred-site.xml  yarn-site.xml  192.168.198.22:`pwd`

展开客户端:

zkCli.sh

执行:ls /

Yarn 的启动命令:

Start-yarn.sh

Resourcemanager的启动命令:

yarn-daemon.sh  start resourcemanager

查看:

Hdfs dfs  -cat    /user/root/test.txt

统计并输出的命令:

hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount  /user/root/test.txt  /data/wc/output

查看文件:

Hdfs dfs -ls /data/wc/output

如果想将两个文件放在一个目录中

创建目录

Mkdir mrout

Cd  mrout

Hdfs dfs   -get  /data/wc/output/*      ./

Ll查看

 

实操部分:

倒排缩影,

Sxt;(a,x)(1,88,107)

偏移量

谷歌公司爬虫,爬出所有的文件,存储起来

 

参数传递的方式:

应用传递和值传递

应用传递,传递地址

Map是计算向数据的移动的过程

 

Shuffer是数据向计算的移动的过程

Map的输出是reduce的输入。

shuffer的过程,从哪里开始,到哪里结束。

Shuffer:map输出——p(计算key,value)的计算——>buffer————>sort————>reduce

不好意思,我看的源码,没想到您的理解层次很深。

Map易于程序人员开发分布式开发技术

导入源码包:

ctrl+单词

然后,导入源码包的地址,

导出jar包,选择export,然后选择JAR file,然后选择导出的地址,填写文件名,然后选择finish

启动namenode的命令:

start-all.sh

Hadoop运行jar包的命令:

hadoop jar MyWc.jar com.sxt.hadoop.mr.MyJOB

启动DataNode的命令:

hadoop-daemon.sh start datanode

停止DataNode的命令:

hadoop-daemon.sh  stop   datanode

Map默认的输入格式化是:

textInputFormat

客户端:切片清单

行的结尾是换行符<br>

Combiner就是一个萎缩版的reduce.

16B  int

key:起始位置,4B

val:起始位置

val:结束位置

p:分区信息

只有在map阶段才是真正的排序

Secondarysort:不是二次排序,而是在reduce阶段的分组。

源语:相同的key为一组,调用一次reduce方法。

排序比较 三种

分组比较 两种

 

Map的输出是reduce的输入。

Next  key  value

Java中迭代的方式:

加强for循环

iterator

 

Reduce方法中的迭代器,为假的迭代器

Iterator<IntWritable>  it =values.iterator();

While(it.hasNext()){

IntWritable n =it.next();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值