hadoop学习MapReduce笔记

传统并行框架,底层使用统一共享存储(SAN),扩展比较难,故障容易引起整个集群不工作。刀片服务器,贵,只能横向增加服务器数量,不能扩大。编程考虑互斥信号量等类似多线程编程。适用与实时计算等计算密集型

MapReduce, 非共享式架构,节点有自己的内存。可以自由增加计算节点。自动进行资源分配部署。适合数据密集型的应用。

MapReduce

理念:计算向数据靠拢,而不是数据向计算靠拢

数据向计算:选择一个计算节点,把所需数据从节点上取过来
计算向数据:把计算发到数据所在的节点

map 函数
map输入一个键值对<k,v>, 一个v拆分成多个v1,v2 ,因为是同一个V的拆分同属一组,产生一组键值对(v1,a1)(v2, a1)成为中间结果
reduce 函数
reduce 将同组(a1,a2)映射为一个值 a, 输出 (v1,a), (v2, a)
map函数

client 提交作业
jobtracker 跟踪作业调度作业
tasktracker 执行作业,接受jobtracker命令,回复心跳
tasktacker 把所在节点的资源称为slot, slot分为map, reduce类型,这两类slot是固定的
tasktacker 有两种任务map\reduce. 在一台机器上面是可以运行两种任务的

hadoop文件存储
hdfs
map间不能互相通信和reduce 间也不能通信。map任务分区的数量取决于reduce的数量
举例

执行各个阶段
inputFormat: 把整个文件,切分成多个split, 只是逻辑上的切分,分片的起点在哪里,长度是多少,不是物理的切分
split 分片
RR 读出文件,给出key value
中间Shuffle:负责分区、归并、排序
outputFormat 检查输出格式
在这里插入图片描述
一个文件在hdfs中分了6个物理块进行存储。
该文件 split 逻辑分片4个片,分片是用户自定义
产生一个分片,就产生一个map任务。有多少个分片,就有多少个map任务

一般一个hdfs块的大小作为一个片
最优的reduce的任务个数 略小于 整个集群中可用的slot reduce的数目

shuffle 有两个部分:map端和reduce端
map端: 将map结果不是先写在磁盘文件中,先写入缓存。缓存满了以后写入磁盘文件,为了处理满了之后会丢失后续的结果,这里有溢写操作:写到一定比例(80%)就开始写磁盘。
溢写中存在操作:分区、排序、合并
分区:根据reduce数量进行分区
排序:在每个分区中进行排序,自动进行字典序
合并(不是Merge 是combine): 比如(a,1),(a,1)->(a,2) 可选
磁盘上有多个文件,在map结束之前,系统进行归并成一个文件(文件内分区并排序)

jobtracker检测到归并成一个文件完成map任务后,同时reduce任务开始
reduce 节点会从多个map任务中,把属于自己reduce任务分区的数据拉取到本地

reduce端:
在多个map获得的数据读入缓存,进行归并数据, 归并后写入磁盘文件,再把文件归并成一个文件
归并:把值变成value-list (k,v1) (k,v2) (k, v3) -> (k,<v1,v2,v3>)

中间结果是直接写在map的本地机器上不是写在hdfs

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值