发布时间:2024-05-25 15:01
学了那么久的hadoop,到底什么是hadoop呢?
先来说说我的理解,从广义上说他可以代表hadoop整个生态圈例如,hive,spark,hbase,zookeeper等等一系列框架。
从狭义上说他是一个,他是分布式的,可扩展的,高可用的、可靠的框架,由hdfs,mapreduce,yarn组成(hadoop1.x只有hdfs,mapreduce)。
该篇博客只进行整体思路的介绍,涉及很多关键的知识点,但不会太多的展开,需要大家自己去总结理解。
下面看看官方给我们的解释:
Apache™ Hadoop® 项目为可靠、可扩展、分布式计算开发开源软件。
Apache Hadoop软件库是一个可以使用简单编程模型跨集群计算,分布式处理大型数据集的框架。它被设计成从单个服务器扩展到数千台机器,每个机器提供本地计算和存储。他不是依赖于硬件来提供高可用性,因为每个计算机都可能发生故障,因此在计算机群集中提供高可用的服务。
该项目包括以下模块:
Hadoop分布式文件系统(HDFS ):一种分布式文件系统,它提供对应用程序数据的高吞吐量访问。
Hadoop MapReduce:一个用于大型数据集并行处理的基于yarn的计算框架。
Hadoop Yarn:作业调度和集群资源管理的框架。
总结:那么我们可以抓住以下几个点进行理解:
1. 什么是分布式系统,它的特点是什么
2. 高可用
3. HDFS是什么
4. Mapreduce是什么
5. Yarn是什么
通过这几个点进行我们的总结与学习。
分布式系统:多个能独立运行的计算机(称为结点)组成。各个结点利用计算机网络进行信息传递,从而实现共同的“目标或者任务”。
分布式计算:利用分布式系统解决来计算问题。在分布式计算里,一个问题被细化成多个任务,每个任务可以被一个或者多个计算机来完成。
分布式计算和并行计算:共同点都是大任务划分为小任务。不同点: 分布式计算:基于多台PC,每台PC完成同一任务中的不同部分。分布式的计算被分解后的小任务互相之间有独立性,节点之间的结果几乎不互相影响,实时性要求不高。并行计算:基于同一个台PC,利用CPU的多核共同完成一个任务。
分布式计算的优点
1. 可靠性、高容错性
一台服务器的系统崩溃不会影响到其他的服务器。
2. 可扩展性
在分布式计算系统可以根据需要增加更多的机器。
3. 计算速度快
分布式计算机系统可以有多台计算机的计算能力,使得比其它系统有更快的处理速度。
分布式计算机的缺点
1. 故障排除难度高
由于分布在多台服务器上,故障排除和诊断问题难度较高。
2. 网络基础设施成本高
网络基础设置问题,包括传输、高负载、信息丢失问题。
3. 安全性问题
开放式系统的特性让分布式计算机系统存在着数据的安全性和共享的风险问题。
集群是个物理形态,分布式是个工作方式。
只要是一堆机器,就可以叫集群,他们是不是一起协作着干活,这个谁也不知道;一个程序或系统,只要运行在不同的机器上,就可以叫分布式。
集群一般是物理集中、统一管理的,而分布式系统则不强调这一点。所以,集群可能运行着一个或多个分布式系统,也可能根本没有运行分布式系统;分布式系统可能运行在一个集群上,也可能运行在不属于一个集群的多台(2台也算多台)机器上。
分布式是相对中心化而来,强调的是任务在多个物理隔离的节点上进行。中心化带来的主要问题是可靠性,若中心节点宕机则整个系统不可用,分布式除了解决部分中心化问题,也倾向于分散负载,但分布式会带来很多的其他问题,最主要的就是一致性。
集群就是逻辑上处理同一任务的机器集合,可以属于同一机房,也可分属不同的机房。分布式这个概念可以运行在某个集群里面,某个集群也可作为分布式概念的一个节点。
例如:
如果一个任务由10个子任务组成,每个子任务单独执行需1小时,则在一台服务器上执行该任务需10小时。
采用分布式方案,提供10台服务器,每台服务器只负责处理一个子任务,不考虑子任务间的依赖关系,执行完这个任务只需一个小时。(这种工作模式的一个典型代表就是Hadoop的Map/Reduce分布式计算模型)
而采用集群方案,同样提供10台服务器,每台服务器都能独立处理这个任务。假设有10个任务同时到达,10个服务器将同时工作,1小时后,10个任务同时完成,这样,整身来看,还是1小时内完成一个任务!
集群一般被分为三种类型,高可用集群如RHCS、LifeKeeper等,负载均衡集群如LVS等、高性能运算集群;分布式应该是高性能运算集群范畴内。
分布式:不同的业务模块部署在不同的服务器上或者同一个业务模块分拆多个子业务,部署在不同的服务器上,解决高并发的问题
集群:同一个业务部署在多台机器上,提高系统可用性
简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
参考博客
那么这里的分布式也体现在了Hadoop中的分布式文件系统HDFS,它存储 Hadoop 集群中所有存储节点上的文件。对外部客户机而言,HDFS 就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。
HDFS集群主要由管理文件系统元数据NameNode和存储实际数据的数据元的DataNode组成。
这里涉及一个问题 NameNode怎么样去维护元数据信息呢?其实是通过维护两个文件fsimage和editlog进行保存元数据信息这篇文章进行了讲解
存储在 HDFS 中的文件被分成block块进行存储(默认一个block大小为128m),然后将这些块复制到多个计算机中(DataNode)。
这里就存在了一个容错机制他的一个副本策略的问题,默认一份数据会有三个block,当前机器存储一份(数据本地化),另外一个机架存储一份,该机架的不同机器存储一份。
NameNode 可以控制所有文件操作。这里就涉及到了HDFS的读写流程的问题,以及一些命令操作可以参考该篇文章
下面我们看看官方给我们的解释:
Hadoop MapReduce是一个易于编写应用程序的软件框架,该应用程序以可靠、容错的方式并行处理大量硬件(数千个节点)上的大量数据(多兆字节数据集)。
MapReduce作业通常将输入数据集拆分成独立的块,它们以完全并行的方式由MAP任务处理。该框架对映射的输出进行排序,然后将这些输出输入到还原任务中。通常,作业的输入和输出都存储在文件系统中。该框架负责调度任务,监视它们并重新执行失败的任务。
对于官方说的一个点个人感觉是有问题的,Hadoop MapReduce是一个易于编写应用程序的软件框架。。。。。感觉在扯淡,一个简单的例子,编写一个wordcount,使用mr编写还是使用spark进行编写方便,大家就不用我多说了吧。
总的来说他是一个计算框架
但是我们要知道在hadoop1.x和hadoop2.x区别,在没有yarn的时候Mapreduce作为计算和资源调度的框架,可以参考这篇博客
还有一个很重要的点就是Mapreduce的计算流程,涉及到了Shuffle一个奇迹发生的地方。
整个过程:MapReduce流程:input->Splitting->Mapping->Shuffling->Reducing-> result
shuffle是一个很影响性能的点,可以理解为它存在于Map结束到Reduce开始之间的过程。
map:HDFS(block)–>split–>map–>partion–>spil–>sort(默认)–>[combiner]–>merge
reduce:copy–>merger
以wc为例。 map 就是key+1 ,
Shuffle描述着数据从map task输出到reduce task输入的这段过程(map端:partion ,sort,[combiner:对每一个partition进行相同的key合并],spil reduce端:copy,merge(:对每个reudce上的多个partiton进行合并))。
reduce就是把结果输出到hdfs。
mr的整个计算过程参考该篇文章
Yarn作为集群的资源管理框架,由ResourceManager资源管理器和NodeManager每个节点上的框架代理组成。
我们需要知道的点是当用户向YARN中提交一个应用程序后,怎样进行资源管理和调度完成job的。
可以简单的分两个阶段运行该应用程序:
a. 第一个阶段是启动ApplicationMaster;
b. 第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完
详细的讲解可以参考该篇博客
yarn application -kill jobId (kill job的命令)
Yarn作为资源管理的框架,那么必然存在调优的问题,可以参考这篇文章
这里主要说的是hadoop的ha,在hadoop1.x的时代NameNode是存在单点故障的,如果NameNode挂了那就gg了。在hadoop2.x进行了改进,提供了ha,如果NameNode挂了,那么另外一个就会顶上去,但是,但是,但是,这里的ha其实是有坑的,实际生产上这个ha可能会没有用的哦。
这里需要大家去总结他的一个架构,即如何实现。
该篇文章介绍了NameNode的HA
对于Hadoop的优化,那肯定要对Hadoop要有一定的理解,大家思考下可以从哪些方面做优化?
大家可以参考这篇文章
总结:这篇博客这要介绍了在学习Hadoop中的一些重点知识点,但是并没有一一的展开进行细说,也为了让大家自己去整理,学习。后续也会进行更新,肯定不止这些问题啦。