Hadoop总结篇

1 概述

学了那么久的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是什么
通过这几个点进行我们的总结与学习。

2 分布式系统

分布式系统:多个能独立运行的计算机(称为结点)组成。各个结点利用计算机网络进行信息传递,从而实现共同的“目标或者任务”。
分布式计算:利用分布式系统解决来计算问题。在分布式计算里,一个问题被细化成多个任务,每个任务可以被一个或者多个计算机来完成。
分布式计算和并行计算:共同点都是大任务划分为小任务。不同点: 分布式计算:基于多台PC,每台PC完成同一任务中的不同部分。分布式的计算被分解后的小任务互相之间有独立性,节点之间的结果几乎不互相影响,实时性要求不高。并行计算:基于同一个台PC,利用CPU的多核共同完成一个任务。

分布式计算的优点
1. 可靠性、高容错性
一台服务器的系统崩溃不会影响到其他的服务器。
2. 可扩展性
在分布式计算系统可以根据需要增加更多的机器。
3. 计算速度快
分布式计算机系统可以有多台计算机的计算能力,使得比其它系统有更快的处理速度。
分布式计算机的缺点
1. 故障排除难度高
由于分布在多台服务器上,故障排除和诊断问题难度较高。
2. 网络基础设施成本高
网络基础设置问题,包括传输、高负载、信息丢失问题。
3. 安全性问题
开放式系统的特性让分布式计算机系统存在着数据的安全性和共享的风险问题。

3 HDFS

那么这里的分布式也体现在了Hadoop中的分布式文件系统HDFS,它存储 Hadoop 集群中所有存储节点上的文件。对外部客户机而言,HDFS 就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。

HDFS集群主要由管理文件系统元数据NameNode和存储实际数据的数据元的DataNode组成
这里涉及一个问题 NameNode怎么样去维护元数据信息呢?其实是通过维护两个文件fsimage和editlog进行保存元数据信息这篇文章进行了讲解

存储在 HDFS 中的文件被分成block块进行存储(默认一个block大小为128m),然后将这些块复制到多个计算机中(DataNode)。
这里就存在了一个容错机制他的一个副本策略的问题,默认一份数据会有三个block,当前机器存储一份(数据本地化),另外一个机架存储一份,该机架的不同机器存储一份。

NameNode 可以控制所有文件操作。这里就涉及到了HDFS的读写流程的问题,以及一些命令操作可以参考该篇文章

4 Mapreduce

下面我们看看官方给我们的解释:
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。

5 Yarn

Yarn作为集群的资源管理框架,由ResourceManager资源管理器和NodeManager每个节点上的框架代理组成。
我们需要知道的点是当用户向YARN中提交一个应用程序后,怎样进行资源管理和调度完成job的
可以简单的分两个阶段运行该应用程序:
a. 第一个阶段是启动ApplicationMaster;
b. 第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完
详细的讲解可以参考该篇博客

Yarn作为资源管理的框架,那么必然存在调优的问题,可以参考这篇文章

6 高可用

这里主要说的是hadoop的ha,在hadoop1.x的时代NameNode是存在单点故障的,如果NameNode挂了那就gg了。在hadoop2.x进行了改进,提供了ha,如果NameNode挂了,那么另外一个就会顶上去,但是,但是,但是,这里的ha其实是有坑的,实际生产上这个ha可能会没有用的哦。
这里需要大家去总结他的一个架构,即如何实现。

总结:这篇博客这要介绍了在学习Hadoop中的一些重点知识点,但是并没有一一的展开进行细说,也为了让大家自己去整理,学习。后续也会进行更新,肯定不止这些问题啦。

猜你喜欢

转载自blog.csdn.net/yu0_zhang0/article/details/81001421