
Hadoop(MapReduce&HDFS)
1.学习目的(前言)
在从业了十年IT生涯里hadoop是什么,做个推进顾问、业务经理、BA需求分析师、项目总监,现在重新定位自己,在新公司做起了研发总监,虽然经历过这些转折、跨度也是点大。但是把握了机会,开始接触大数据产业了。虽然如今工作中的都是使用Hive SQL进行研发,没有涉及很多真正大数据的东西,但是感觉学习大数据而是很有必要,所以运用项目的空余时间对Hadoop进行了学习整理,内容也许对于目前的Hadoop来说已经有点过时了,但是我认为老知识而是根基,于是便有了下面的文章,用于现在自己备忘和要学习Hadoop的小伙伴一起学习进步。
2.Hadoop核心思想
Hadoop是在分布式服务器集群上传输海量数据并运行分布式分析应用的一个平台,其核心部件是HDFS与MapReduce
HDFS是一个分布式文件系统:传统文件系统的内存寻址慢,通过采用保存文件信息的服务器Namenode和实际存放数据的服务器Datanode进行串接。对数据平台进行分布式存储抓取。
MapReduce是一个计算框架:MapReduce的核心观念是把计算任务分配给集群内的服务器里执行。通过对计算任务的拆分(Map计算\Reduce计算)再按照任务调度器(JobTracker)对任务进行分布式计算。
3.HDFS文件系统和MapReduce计算框架在Hadoop生态圈中的应用
HDFS负责Hadoop生态圈的数据存取工作
MapReduce负责Hadoop生态圈的数据运算工作
Hadoop生态圈使用HDFS文件系统进行存取数据,数据被分散的储存在集群的各个服务器上,在计算数据时使用MapReduce结合HDFS进行逻辑运算取出数据。
4.Master/Slave的架构理念
Hadoop使用(Master/Slave)主从架构进行分布式存储和分布式计算。Master负责分配和管控任务,Slave负责实际执行任务。
MapReduce中装载有JobTracker的服务器负责进行Master任务,装载有TaskTracker的服务器负责进行Slave任务。
HDFS中装载有Namenode的服务器负责进行Master任务,装载有Datanode的服务器负责进行Slave任务。

5.HDFS&MapReduce的设计思路
HDFS:
将文件进行切块处理,再借助文件信息服务器Namenode存放切块的文件信息保存地址,实际存放数据的服务器Datanode存在切块后的数据。
系统默认:每个片块大小为64M,以确保寻址速度;数据会读取3个Datanode中,以确保更高的容错性;
HDFS还设计了Secondary Namenode来升级Namenode,以防止日志文件过大
HDFS Client帮助Namenode对读入读取数据进行预处理,进行文件的分块与发送调用操作。Namenode负责为数据任务寻址
MapReduce:
通过JobClient生成任务运行文件,并在JobTracker进行调度指派TaskTracker完成任务。
JobTracker分为把任务文件进行分解并派送到TaskTracker的程序JobinProgress和执行调度器的TaskScheduler
JobinProgress把作业分解成Map计算和Reduce计算并放置到TaskTracker服务器中
6.HDFS&MapReduce组件介绍
HDFS:
Namenode(Master):管理着每个文件中各个块所在的数据节点的位置信息
Namespace image:记录每个文件的存在位置信息
Edit log:记录每个文件的位置移动信息

Datanode(Slave):记录着服务器内所存储的数据块的列表
Secondary Namenode:更新并备份Namenode
HDFS Client:进行文件的分块与文件的发送读取
MapReduce:
JobClient:用于把用户的作业任务生成Job的运行包,并存放到HDFS中。
JobinProgress:把Job运行包分解成MapTask和ReduceTask并存放于TaskTracker中
JobTracker(Master):进行调度管理TaskTracker执行任务
TaskTracker(Slave):执行分配下来的Map计算或Reduce计算任务
7.Hadoop运行机制
HDFS:
Namenode使用镜像文件(Namespace image)和操作日志文件(edit log)对数据进行记录。(保存在缓存和磁盘中)
Secondary Namenode进行升级时的操作:
1.在Namenode创建一个新的操作日志,将新的操作记录读取到新的操作日志中;
2.将Namenode的镜像文件和操作日志拷贝到Secondary Namenode中;
3.在Secondary Namenode中调用镜像文件到硬盘,并执行日志文件中的所有操作,生产新的镜像文件;

4.把Secondary Namenode中构建的镜像文件拷贝到Namenode中;
5.Namenode中使用新的镜像文件和操作日志替代原先的文件;
存数据:
1.HDFS Client对文件分块并向Namenode发送写数据请求
2.Namenode把block信息记录出来,并返回可写入的Datanode
3.HDFS Client向指定的Datanode传送数据
4.传送失败后,Datanode会向Namenode和HDFS Client发送成功通知
读数据:
1.HDFS Client从Namenode中获得文件块的位置
2.HDFS Client根据Namenode返回的文件信息去Datanode相关位置中读取
MapReduce:
通过JobClient把用户的作业任务转化成job.xml、job.jar、job.split,适合JobTracker执行的文件
1.job.xml文件记录了Job的详尽配置信息
2.job.jar保存了用户定义的关于job的map、reduce操纵
3.job.split保存了job任务的切片信息

JobClient会为作业向JobTracker申请Jobid,并以Jobid命名把xml、jar、split文件放置进HDFS中
JobinProgress会把JobClient创建的Job拷贝到JobTracker本地文件系统,并建立JobStatus和Job的mapTask、reduceTask队列来跟踪Job的状况信息。
JobTracker默认执行一下调度法则
1.先进先出:集群内的资源统一进行使用,执行先进队列先执行的方法。
2.公平调度:按用户分配集群内的资源,每个用户没法在选定的资源内运行调度。
3.队列调度:可以修改多个队列hadoop是什么,每个队列都可以进行置顶的资源调度
TaskTracker向JobTracker发送心跳报告及执行命令
8.MapReduce集群的配置
服务器 守护进程 说明
server1 namenodenamenode节点
server2 jobtracker 任务主节点
server3 secondary namenode secondary namenode
dserver1 datanode tasktracker 数据节点
dserver2 datanode tasktracker 数据节点
dsdrver3 datanode tasktracker 数据节点
后感:
在写这篇文章的之后,知识点不断在升级(ps:甚至大v们对同一个事情的理解也是不太一致的地方,再ps:上述文章内容完全是小粉的个人理解),甚至连文章架构也改了很多次。但是针对学习来说,我认为这个是一件好事儿,建议也在学习hadoop的小伙伴也可以对自己的知识进行整理学习,有自己的理解。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-120903-1.html
那就是统一之时
谢教授正找爹呢