您的位置:首页 > 运维架构

hadoop学习笔记 MapReduce + HDFS

2015-08-12 08:14 239 查看
hadoop: map reduce+hdfs+hbase

MapReduce

一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念“Map(映射)”和“Reduce(規約)”,和他們的主要思想,都是從函數式編程語言裡借來的,還有從矢量編程語言裡借來的特性。方便編程人員在不會分佈式並行編程的情況下,將自己的程序運行在分佈式系統上。

當前的軟件實現是指定一個map映射函數,用來把一組鍵值對映射成一組新的鍵值對,指定並發的Reduce(規約)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵值。

mapreduce工作过程:

map——combiner——shuffler——reduce

mapper负责在1个节点内执行小任务,被分解的任务多节点并行执行;

reducer对map阶段的结果进行收集汇总,缺省为1个可配置;

shuffler在1个节点内进行,可简化reduce过程,可以把mapper的输出按照某种key值重新切分和组合成n份,把key值符合某种范围的输出送到特定的reducer那里去处理(可没有);

combiner这个是可选部分,也可以配置参数是否在map端执行combiner,一般是在map时执行一次reduce.

mapreduce job调度机制

缺省为先进先出作业队列调度;

支持公平调度器(平均分配资源);

支持容量调度器(多条管道专用)。

mapreduce内部优化机制

推测式执行,如果有任务一直没完成,则再启动一个任务,先完成的排挤掉另外一个,缺省打开;

重用JVM ,可设置单个JVM上运行的最大任务数,默认为1;

忽略模式,任务在某位置读取失败2次,则报告jobtracker以后碰到这个地方直接跳过。

HDFS的可靠性:

冗余副本策略:可在hdfs-site.xml中设置复制因子指定副本数量,每次Datanode启动都向namenode汇报份hdfs数据块和本地文件的对应关系。

机架策略:副本尽量分布不在同一个机架的节点中,是人为通过py脚本设置的

心跳机制:Namenode周期性从datanode接收心跳信号和块报告,并按情况做修复,默认是3s可配置

安全模式:Namenode启动时会先经过一个“安全模式”阶段,要一定比例的数据的副本数达标才离开,也可以通过命令进入和退出这个模式。

HDFS可靠性表现:

校验和:取数据时查看校验和是否相等

回收站:删除文件放入回收站,就放在当前目录.trash移出即恢复,定期清理

元数据保护:Namenode的影像文件和事务日志元数据多副本

快照机制:闪回,2.4已实现

Block的说明

默认大小为64M,大点的集群一般会改大

当NameNode读取block的时候,它会计算校验和,如果计算后的校验和与block创建时仁政不一样,说明该block已损。

Client读取其它DataNode上的block, NameNode标记该块已损,复制block达到预期设置的文件备份数。

DataNode在其文件创建三周后会验证其校验和。

设置一个Block 64MB,如果上传文件小于该值,仍然会占一个block的命名空间(NameNode metadata),但是物理存储上不会占用64MB空间。

Block大小和副本数由Client端上传文件到HDFS时设置,其中副本数可以变更,Block是不可以上传后再变更的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: