一、Hadoop两大核心组成
1.HDFS 分布式文件系统:存储
2.MapReduce: 并行计算
二、HDFS基本概念
- block 块:固定大小为64M的逻辑单元,HDFS的文件被分成块进行存储
- NameNode:是管理节点,存放文件元数据
① 文件与数据块的映射表
② 数据块与数据节点的映射表
- DataNode:是HDFS的工作节点,存放数据块。

三、HDFS中的数据管理与容错



四、HDFS中文件读写的流程


五、HDFS特点
1.数据冗余,用三个备份实现硬件上的容错
2.流式的数据访问,一次写入,多次读写
3.适合存储大文件,如果是大量小文件会给NameNode带来很大压力
4.适合数据批量读写,吞吐量高;不适合交互式应用,低延迟很难满足
5.适合一次写入多次读取,顺序读写,不支持多用户并发写相同文件
六、MapReduce基本概念
1.job
2.task-->map task & reduce task
3.jobtracker:管理节点,客户端提交任务后,jobtracker将任务放到候选队列,在适当的时候进行调度,拆分成map任务和task任务
4.tasktracker:通常和HDFS中的DataNode是同一位置节点,这样可以保证当任务被分配到某个位置的时候所需要的数据正好也在本机的DataNode里,这样可以提高数据读取的速度,减少开销,实现移动计算代替移动数据
Jobtracker的角色:① 作业调度 ② 分配任务,监控任务执行进度 ③监控Tasktracker执行状态
Tasktracker角色:① 执行任务 ② 汇报任务状态

七、MapReduce原理
分而治之,一个大任务分成多个子任务(map),并行执行后,合并结果(reduce)
例子1、1000份扑克牌,少了一张,怎么找到少了哪一张?

例子2:日志中出现次数最多的IP


MapReduce处理数据过程主要分成2个阶段:Map阶段和Reduce阶段。首先执行Map阶段,再执行Reduce阶段。Map和Reduce的处理逻辑由用户自定义实现,但要符合MapReduce框架的约定。
在正式执行Map前,需要将输入数据进行”分片”。所谓分片,就是将输入数据切分为大小相等的数据块,每一块作为单个Map Worker的输入被处理,以便于多个Map Worker同时工作。分片完毕后,多个Map Worker就可以同时工作了。每个Map Worker在读入各自的数据后,进行计算处理,最终输出给Reduce。Map Worker在输出数据时,需要为每一条输出数据指定一个Key。这个Key值决定了这条数据将会被发送给哪一个Reduce Worker。Key值和Reduce Worker是多对一的关系,具有相同Key的数据会被发送给同一个Reduce Worker,单个Reduce Worker有可能会接收到多个Key值的数据。
在进入Reduce阶段之前,MapReduce框架会对数据按照Key值排序,使得具有相同Key的数据彼此相邻。如果用户指定了”合并操作”(Combiner),框架会调用Combiner,将具有相同Key的数据进行聚合。Combiner的逻辑可以由用户自定义实现。这部分的处理通常也叫做”洗牌”(Shuffle)。
接下来进入Reduce阶段。相同的Key的数据会到达同一个Reduce Worker。同一个Reduce Worker会接收来自多个Map Worker的数据。每个Reduce Worker会对Key相同的多个数据进行Reduce操作。最后,一个Key的多条数据经过Reduce的作用后,将变成了一个值。
八、MapReduce容错机制
1.重复执行4次,如果还是失败则放弃执行
2.推测执行,某个Tasktracker执行特别慢,执行慢的继续执行,在找一个Tasktracker计算,最后把执行慢的kill掉

网友评论