Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS(Hadoop Distributed File System)。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。
Hadoop重要组成
Hadoop主要分3部分:
HDFS:分布式文件存储系统。目前还是最主流的文件存储系统
MapReduce:分布式计算框架。基本被淘汰
Yarn:分布式集群资源调度框架。目前还被广泛使用,我觉得更多是因为历史和HDFS的原因。另外它是一个开放系统,其他计算框架都可以使用它做资源调度。
一主多从的架构方案
Hadoop 几个主要产品的架构设计都是一主多从的架构方案。
HDFS:一个 NameNode,多个 DataNode;
MapReduce:一个 JobTracker,多个 TaskTracker;
Yarn:一个 ResourceManager,多个 NodeManager。
大数据因为要对数据和计算任务进行统一管理,所以和互联网在线应用不同,需要一个全局管理者。而在线应用因为每个用户请求都是独立的,而且为了高性能和便于集群伸缩,会尽量避免有全局管理者。
所以我们从 Hadoop 中可以学到大数据领域的一个架构模式,也就是集中管理,分布存储与计算。
问:通过类似的架构方案,如何利用个人设备构建一个存储共享的应用?
移动计算
在数据量极大的情况,移动计算会比移动数据更加划算。移动计算程序到数据所在位置进行计算是如何实现的呢?
-
将待处理的大规模数据存储在服务器集群的所有服务器上,主要使用 HDFS 分布式文件存储系统,将文件分成很多块(Block),以块为单位存储在集群的服务器上。
-
大数据引擎根据集群里不同服务器的计算能力,在每台服务器上启动若干分布式任务执行进程,这些进程会等待给它们分配执行任务。
-
使用大数据计算框架支持的编程模型进行编程,比如 Hadoop 的 MapReduce 编程模型,或者 Spark 的 RDD 编程模型。应用程序编写好以后,将其打包,MapReduce 和 Spark 都是在 JVM 环境中运行,所以打包出来的是一个 Java 的 JAR 包。
-
用 Hadoop 或者 Spark 的启动命令执行这个应用程序的 JAR 包,首先执行引擎会解析程序要处理的数据输入路径,根据输入数据量的大小,将数据分成若干片(Split),每一个数据片都分配给一个任务执行进程去处理。
-
任务执行进程收到分配的任务后,检查自己是否有任务对应的程序包,如果没有就去下载程序包,下载以后通过反射的方式加载程序。走到这里,最重要的一步,也就是移动计算就完成了。
-
加载程序后,任务执行进程根据分配的数据片的文件地址和数据在文件内的偏移量读取数据,并把数据输入给应用程序相应的方法去执行,从而实现在分布式服务器集群中移动计算程序,对大规模数据进行并行处理的计算目标。
Hadoop优缺点
优点:
1、有一整套 大数据存储、计算、资源调度方案;
2、存储、计算、资源调度 分离;
3、分布式存储与计算,适合水平伸缩;
4、文件分块存储,能处理非常大的文件;
5、高可用。冗余备份每一个block;
6、使用MapReduce编程模型,更灵活的移动计算;
7、资源调度灵活统一管理,需要多少用多少。
缺点:
1、数据读取速度慢。通过文件读取数据,没有索引等加快随机读取;
2、计算上主要基于硬盘而不是内存,当然这样也避免了内存不足的问题;
3、MapReduce计算过程只Reduce一次,不能迭代;
网友评论