Hadoop(一):最通俗易懂的Hadoop概述
Hadoop(一):Hadoop概述
大数据概念
大数据(big data),IT行业术语,是指无法在一定时间范围内用常规软件工具(如mysql、ssm等)进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化(图像、语音等)的信息资产。主要解决海量数据的存储以及海量数据的分析计算
Hadoop概述
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。主要解决海量数据的存储以及海量数据的分析计算,Hadoop核心概念是HDFS(分布式存储),以及MapReduce。通俗来将就是,当一个海量数据,如果你使用传统方法去处理,比如10TB的数据,那么数据库就不太够用,并且即使数据库够用,那么在有限的资源(也就是CPU、内存)中处理的数据量是极少 的,10TB数据可能需要运作很久,那么有了Hadoop,HDFS是分布式存储文件系统,它将10TB数据分块存储在不同服务器(节点)中,然后在每个服务器中处理相应文件,也就是相当于n个服务器并行处理,并且每个服务器都不需要太高的配置。而这些处理的任务是由MapReduce分配的。
如果你不太清楚什么是并行:
传统处理方法,假如要写10000个字,你一个人写字速度为一分钟100个,那么就需要100分钟才能写完。
而采用并行处理,相当于有100同学一起写,并且分工明确,那么只需要一分钟,你们100个人就能写10000个字。
简单的例子
一个简单的案例就是WordCount,字数统计,假设有100G的文件,要统计里面所有单词出现的次数。
传统方法:
假设我们有个2G的机器。
首先这100G我们不可能都加载到内存中,内存不够,所以要将100G文件依次读入内存中并操作,就产生类似下图的一个队列,每次读取文件的一部分然后再处理,然后处理时间
需要加载至内存的次数 = 100G/2G = 50次
假设每次处理字数统计所用时间为T(process)
假设每次读取至内存所用时间为T(IO)
假设将所有的50次统计结果汇总时间为T(wordcount)
那么一共需要的时间为
50次 x [T(process) + T(IO)] + T(wordcount)
可以看出是非常耗时的
采用分布式并行计算后(Hadoop使用类似的方法,但是其多了reduce去汇总处理)
可以看到,同样将任务分割然后送到集群中不同的服务器(节点),每个服务器并行处理(可以理解为同时处理)。此时,依照上面传统方法的时间计算。共使用了
1次 x [T(process) + T(IO)] + T(wordcount)
这里要注意,hadoop实际应用中,会将汇总处理也分布式并行处理,所以其实更加省时,这里先忽略,依然能看出两者相差的耗时。
看完例子你可能就差不多知道hadoop是干什么的了:
- 分布式存储:将文件分布式存储在多个服务器(节点)上。
- 分布式并行处理:通过编写处理任务的代码,将文件进行切割,然后将文件以及任务资源(比如jar包,也就是你写的处理逻辑)分发给多个服务器,每个服务器进行并行处理。
下面会更具体讲解。
Hadoop优点
1.高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖 。
2.高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
3.高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快 。
4.高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配 。
5.低成本。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低 。
Hadoop架构
- MapReduce(计算)
- 并行计算框架,0.20前使用org.apache.hadoop.mapred旧接口,0.20版本开始引入org.apache.hadoop.mapreduce的新API
- HDFS (数据存储)
- Hadoop分布式文件系统(Distributed File System)-HDFS(Hadoop Distributed File System)
- Yarn (资源调度)
- 负责管理集群中的计算资源并使用它们来调度用户的应用程序
- Common (辅助工具)
- 在0.20及以前的版本中,包含HDFS、MapReduce和其他项目公共内容,从0.21开始HDFS和MapReduce被分离为独立的子项目,其余内容为Hadoop Common,包含其他Hadoop模块所需的库和实用程序;不关注
你可以理解为,将文件存储至HDFS,根据自己的需求编写业务代码(包括MapTask,ReduceTask,也就是MapReduce),然后发布,让Yarn负责调度集群中的资源,将任务分发出去,每个领到任务的集群执行任务。
HDFS架构
- NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的快列表和块所在的DateNode等。类似一个目录
- DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和。
- Secondary NameNode(2nn):用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。
客户端向NameNode咨询元数据,获取数据位置。然后从对应DateNode读取或写入数据。
Yarn架构
图自官网:
-
ResourceManager(RM)主要作用如下
-
处理客户端请求
-
监控NodeManager
-
启动或监控ApplicationMaster
-
资源的分配与调度
-
-
NodeManager(NM)主要作用如下:
-
管理单个节点上的资源
-
处理来自ResourceManager的命令
-
处理来自ApplicationMaster的命令
-
-
ApplicationMaster(AM)作用如下
-
负责数据的切分
-
为应用程序申请资源并分配给内部的任务
-
任务的监控与容错
-
-
Container
Container是YARN中的资源抽象,它封装了某个节点上的多韦弗资源,如内存、CPU、磁盘、网络等。
MapReduce架构
MapReduce将计算过程分为两个阶段:Map和Reduce
1)Map阶段并行处理输入数据
2)Reduce阶段对Map结果进行汇总