Hadoop是一个由Apache基金会所开发的分布式系统集成架构,用户可以在不了解分布式底层细节情况下,开发分布式程序,充分利用集群的威力来进行高速运算与存储,具有可靠、高效、可伸缩的特点。
Hadoop的主要核心有yarn,HDFS,MapReduce;
1)HDFS
HDFS是存取数据的分布式文件系统,对HDFS的操作,就是文件系统的基本操作,如文件的创建、修改、删除、修改权限等。对HDFS的操作命令类似于Linux的shell对文件的操作,如ls、mkdir、rm等。总的来说,HDFS的命令行操作可以分为两类,一类为基本操作命令:hdfs dfs;另一类为管理命令:hdfs dfsadmin。HDFS常用基本操作命令列举如下:
2)MapReduce
Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架。
Mapreduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上。
MapReduce的优点:
1.MapReduce 易于编程
它简单的实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分布到大量廉价的PC机器上运行。也就是说你写一个分布式程序,跟写一个简单的串行程序是一模一样的。就是因为这个特点使得MapReduce编程变得非常流行。
2.良好的扩展性
当你的计算资源不能得到满足的时候,你可以通过简单的增加机器来扩展它的计算能力。
3.高容错性
MapReduce设计的初衷就是使程序能够部署在廉价的PC机器上,这就要求它具有很高的容错性。比如其中一台机器挂了,它可以把上面的计算任务转移到另外一个节点上运行,不至于这个任务运行失败,而且这个过程不需要人工参与,而完全是由Hadoop内部完成的。
4.适合PB级以上海量数据的离线处理
这里加红字体离线处理,说明它适合离线处理而不适合在线处理。比如像毫秒级别的返回一个结果,MapReduce很难做到。
MapReduce的缺点:
1.实时计算
MapReduce无法像Mysql一样,在毫秒或者秒级内返回结果。
2.流式计算
流式计算的输入数据是动态的,而MapReduce的输入数据集是静态的,不能动态变化。这是因为MapReduce自身的设计特点决定了数据源必须是静态的。
3.DAG(有向图)计算
多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下,MapReduce并不是不能做,而是使用后,每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下。
MapReduce的核心思想
map task 从split中读取数据,进行处理后,输出key/value,对键值对进行Partitioner后,存入到缓存中,缓存默认大小是100M,当缓存内容达到80M时,启动溢写操作,把缓存区数据写入一个溢写文件,在写入文件之前,会对键值对进行分区排序和合并(如果设置的话),当该map task处理完所有数据后,需要对该map生成的所有溢写文件进行merger操作,生成一个文件作为该maptask的成果,reduce task接受到通知后,就回拉取各个map task的成果数据,放到缓存区中,当缓存区内容达到阀值时,同样执行溢写操作,生成溢写文件,当把所有的map task的成果数据读取完毕后,会把生成的所有溢写文件进行merge操作,生成一个文件作为reduce task的输出数据。
3)yarn
YARN 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操 作系统平台,而 MapReduce 等运算程序则相当于运行于操作系统之上的应用程序
YARN 是 Hadoop2.x 版本中的一个新特性。它的出现其实是为了解决第一代 MapReduce 编程 框架的不足,提高集群环境下的资源利用率,这些资源包括内存,磁盘,网络,IO等。Hadoop2.X 版本中重新设计的这个 YARN 集群,具有更好的扩展性,可用性,可靠性,向后兼容性,以 及能支持除 MapReduce 以外的更多分布式计算程序
yarn的工作流程
工作机制详解
(0)Mr程序提交到客户端所在的节点
(1)Yarnrunner向Resourcemanager申请一个Application。
(2)rm将该应用程序的资源路径返回给yarnrunner
(3)该程序将运行所需资源提交到HDFS资源路径上
(4)程序资源提交完毕后,申请运行mrAppMaster
(5)RM将用户的请求初始化成一个task
(6)其中一个NodeManager领取到task任务。
(7)该NodeManager创建容器Container,并产生MRAppmaster
(8)Container从HDFS资源路径上拷贝资源到本地
(9)MRAppmaster向RM 申请运行maptask容器
(10)RM将运行maptask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
(11)MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动maptask,maptask对数据分区排序。
(12)MRAppmaster向RM申请2个容器,运行reduce task。
(13)reduce task向maptask获取相应分区的数据。
(14)程序运行完毕后,MR会向RM注销自己。