初始hadoop的mapreduce框架

来源:互联网 发布:员工评语网络大全 编辑:程序博客网 时间:2024/05/18 01:12

mapreduce是一个集成框架,这个继承框架是处理海量数据的并且是一个分布式的,就是有多个及其共同组成了同一个集群来提供服务。

mapreduce是一个用于处理海量数据的分布式计算框架。
他解决了
数据分布式存储
作业调度
容错
机器间通信等复杂问题

首先是数据分布式存储,其实hadoop本身是不存储数据的,那么数据其实是存储到hdfs上,hadoop生态的底层是hdfs然后再往上走就是一个mapreduce,其实这个mapreduce是不存数据的,它只负责计算,其实它的数据都存储到hdfs上,mapreduce它的计算目标数据就是来自hdfs上,所以mapreduce仅仅是做计算的,存储是hdfs接管。

作业调度
就是说因为整个mapreduce集群不可能被一个任务都占用了,也就是说他是共享资源,任何人都可以提交任务,并且它的遵循先进先出原则,就是任务执行成功之后就会退出,然后接下一个。

容错
比如服务器出现故障,或者任务故障,只要不是你的代码导致的,那么这个集群帮我能自动识别网络不通畅,找出问题,或者帮我在切换到其他节点上。这里面就是存在一个如何切换到其他节点上,和及一致性哈希。
传统的hash:
val = value%i;
(在一般的取值情况下,i的取值跟value有关,value若为16
位的,则i为2^16=65536,如果value为32位的,则i为2^32= 4 294 967 296)
在传统的hash算法中,如果一个节点宕掉了,那么就无法存储数据的。
一致性hash解决了这个问题,相当一个环上,假设是32位的,则有4295967296个位置进行一个映射,从0—–2^32-1个节点,当一个需求来临时,他会映射到换上一个随机的位置,然后顺时针找最近的节点进行存储或者被服务,当这个节点宕掉时,他会自动顺时针寻找下一个节点进行存储或者被服务。当然,当这个节点变好时,就会进行还原。

机器间通信等复杂问题:
mapreduce中有两个角色,一个主一个从。

mapreduce里面最核心的一个思想,就是分治思想
分:map
.把复杂问题分解为若干简单的任务。
合:reduce
大计算-按输入数据,划分计算任务
mapreduce的计算流程

hadoop中将mapreduce的输入数据划分成等长的小数据块,称为input split(简称分片),hadoop将每个分片构建一个map任务,一般一个分片大小趋向于hdfs的一个块的大小,默认是64MB。
要执行一个简单的mapreduce任务:

首先由客户端提交一个mapreduce作业,然后向jobtracker发送信息,他会寻找最近的节点和tasktracker来运行任务,将他的作业信息存储到hdfs上(默认为三个备分,存储在多个节点上),

然后由tasktracker执行任务,读取hdfs,

然后建立数据进行分割,分成不同的块,然后进行记录,

进行map输出,

将map得到的结果进行partition,(也就是一致性hash将任务分配到不同的机器上),

然后进行sort(排序),(这里面还有combiner,但一般情况下不用,虽然会减少节点压力,但是如果用上了,可能会和最终的结果有些误差,在一些项目中)

将得到的结果merge(融合),送到reduce,

然后reduce输出后的结果存储到hdfs上去。整个过程结束。

原创粉丝点击