为复试所准备,担心老师问到相关的问题。
MapReduce求解步骤
-
Step1:自动对文本进行分割
-
Step2:对每一对键值对用用户定义的map函数进行处理,再生成新的键值对
-
Step3:对输出的结果进行归拢、排序(系统自动完成)
-
Step4:用reduce函数操作生成最后的结果
MapRedeuce在Hadoop上的执行过程
-Map
从磁盘读入数据
执行map函数
Combine结果
将结果写到本地磁盘上
-Reduce
从各个map task的磁盘上读出相应的数据(shuffle)
排序sort
执行reduce函数
将结果写回HDFS
中间结果写回到本地磁盘
提高系统可靠性
降低系统性能
从各个map task的磁盘上读出相应的数据(shuffle)
采用HTTP协议从各个map task上远程拷贝结果
Mapreduce确保每个reducer的输入都按键排序,系统执行排序的过程——将map输出作为输入传给reduer——称为shuffle
Map函数开始产生输出时,并不直接写入磁盘,首先通过缓冲方式写入内存,并进行预排序
缓冲区默认100mb
默认阈值0.80,达到之后写入指定路径
缓冲区被填满,map会阻塞直到写过程完成
Redeuce输出结果直接写入HDFS系统,Hadoop文件缓冲区默认4Kb
调优原则
给shuffle过程尽可能多的内存空间
Map和Redeuce函数尽量少用内存
运行map和reduce任务的JVM内存尽量大
map端尽量估算map输出大小,减少溢出写磁盘的次数
Redece端的中间数据尽可能多的驻留在内存
-Combiner 减少Map传递给单个Reduce的中间结果重复
-Partition 分发策略,把Redece所需计算内容分发到各个节点上
Hadoop
-MapReduce 分布式数据处理模型和执行环境
-HDFS 分布式文件系统
-HBase 分布式、按列存储数据库
HDFS 读文件流程
1、客户端调用DistributeeddFileSystem对象的open()方法
2、DistributeeddFileSystem联系namenode得到数据块的信息,namenode返回数据块所在datanode的地址信息,并根据到客户端的距离进行排序
3、DistributeeddFileSystem类返回一个FSDataInputStream对象给客户端
4、客户端通过调用该对象的read()方法读取数据
5、FSDataInputStream连接距离最近的datanode读取数据,可能并行的读取多个datanode,读取完成调用close()方法关闭
HDFS 写文件流程
1、客户端调用DistributeeddFileSystem对象的create()方法
2、DistributeeddFileSystem联系namenode确保建立的文件不在,且客户端拥有创建该文件的权限,检查通过namenode为新文件产生一条记录,否则抛出IOException
3、DistributeeddFileSystem类返回一个FSDataOutputStream对象给客户端
4、FSDataOutputStream将数据分成数据包并写入内部队列dataqueue,根据datanode列表要求namenode分配合适的新块存储数据备份
5、分配的数据备份datanode形成一个管线,DataStreamer将数据包传输给管线中第一个节点,该节点存储完之后发送给下一个节点,以此类推
Yarn架构
-
原框架中核心的 JobTracker 和 TaskTracker拆分ResourceManager, ApplicationMaster 与NodeManager 三个部分。
-
ResourceManager 做的事情是调度、启动每一个 Job 所属的 ApplicationMaster、另外监控 ApplicationMaster 的存在情况,负责作业与资源的调度。
-
ApplicationMaster负责一个 Job 生命周期内的所有工作,包括task 的监控、重启等等。类似老的框架中JobTracker。
-
NodeManager 功能是负责 Container 状态的维护,并向 RM 保持心跳。
-
大大减小了 JobTracker(也就是现在的ResourceManager)的资源消耗,并且让监测每一个Job 子任务 (tasks) 状态的程序分布式化了,更安全。
Hive
- 将SQL查询语句转换成一系列在Hadoop集群上的MapReduce作业
CAP理论
分布式处理准则
- 正确性:结果正确
- 可靠性:各种情况下正常工作
- 高效性:实现逻辑简单
分布式环境下的CAP理论
- 一致性:所有数据的备份在同一时刻是否保持一致
- 可用性:在集群一部分节点故障之后,集群整体是否还能响应客户端的读写请求
- 分区容忍性:集群中某些节点无法联系后,集群整体是否还能进行服务
通过冗余和纠错机制,保障系统能够继续工作
强一致性VS最终一致性
-
强一致性
写复杂
读简单,直接读取
-
最终一致性
写简单
读复杂,需要从多个节点读取并且进行判定