在大数据的发展过程中,出现了一批专门应用与大数据的处理分析工具,如Hadoop,Hbase,Hive,Spark等,我们先从最基础的Hadoop开始进行介绍
Hadoop是apache基金会下所开发的分布式基础架构,实现了一个分布式文件系统(HDFS),HDFS拥有高容错性、高可靠性、高扩展性、高效性、低成本的特性,可以让用户在不了解相关的底层源码的情况下,在廉价的机器上搭配一台完整的服务器进行分布式程序开发,利用集群的高速运算和存储处理自己的业务。
一个应用程序无非就是计算和存储两个部分,Hadoop也不例外,他的两大核心设计就是HDFS和MapReduce两个组建,HDFS实现了Hadoop的海量数据的存储,而MapReduce则为存储的海量数据提供了计算
核心架构:
在Hadoop官方网站上对于Hadoop项目的构成有详细的讲解,主要包括
Hadoop Common:支持其他Hadoop模块的常用实用程序。
Hadoop分布式文件系统(HDFS™):一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。
Hadoop YARN:作业调度和集群资源管理的框架。
Hadoop MapReduce:基于YARN的系统,用于并行处理大型数据集。
Apache的其他Hadoop相关项目包括:
Ambari™:基于Web的工具,用于配置,管理和监控Apache Hadoop集群,包括对Hadoop HDFS,Hadoop MapReduce,Hive,HCatalog,HBase,ZooKeeper,Oozie,Pig和Sqoop的支持。Ambari还提供了一个用于查看群集运行状况的仪表板,例如热图,以及可视化查看MapReduce,Pig和Hive应用程序的功能,以及以用户友好的方式诊断其性能特征的功能。
Avro™:数据序列化系统。
Cassandra™:可扩展的多主数据库,没有单点故障。
Chukwa™:用于管理大型分布式系统的数据收集系统。
HBase™:可扩展的分布式数据库,支持大型表的结构化数据存储。
Hive™:一种数据仓库基础架构,提供数据汇总和即席查询。
Mahout™:可扩展的机器学习和数据挖掘库。
Pig™:用于并行计算的高级数据流语言和执行框架。
Spark™:用于Hadoop数据的快速通用计算引擎。Spark提供了一种简单而富有表现力的编程模型,支持广泛的应用程序,包括ETL,机器学习,流处理和图形计算。
Tez™:基于Hadoop YARN构建的通用数据流编程框架,它提供了一个功能强大且灵活的引擎,可以执行任意DAG任务来处理批量和交互式用例的数据。Tez正在被Hadoop生态系统中的Hive™,Pig™和其他框架以及其他商业软件(例如ETL工具)采用,以取代Hadoop™MapReduce作为底层执行引擎。
ZooKeeper™:用于分布式应用程序的高性能协调服务
在知道了Hadoop集群的项目构成之后我们便开始挨个项目进行说明
Hadoop-----HDFS
[if !supportLists]1、[endif]因为HDFS实例是一个分布式的处理机制,所以可能包括成千上万台服务器计算机,每一个计算机存储文件的一部分,但是,因为各种各样的原因,每一个计算机都有可能在使用过程中出现各种问题,比如断电等,所有这就意味着在这么多的服务器中总有几个是处在无法使用的状态,因此检测故障并能快速的回复保证计算的正常进行是HDFS的核心架构目标
[if !supportLists]2、[endif]HDFS的设计主要是用于批处理而不是通常的用户的交互式的通用应用程序,数据访问的高吞吐量是重点,所以posix放松了对于HDFS的监管,可以通过流式处理的方式对于文件系统中的数据进行相应的处理。
[if !supportLists]3、[endif]因为要处理的数据量特别巨大,单一的服务器根本不可能完成这一任务,所有,HDFS被调整为支持大文件,将一个大的文件分解成多个一样大小的小文件然后分散到各个集群的节点上进行计算
[if !supportLists]4、[endif]为了简化数据的一致性问题以及实现高吞吐量的数据访问,HDFS提供了一个一次写入多次读取的文件访问模型,当文件写入HDFS之后,可以被多次读取进行计算,但是,在一次写入之后除了追加和截断之外,不能再次写入,但是可以通过append方法在文件的末尾进行追加,典型的就是MapReduce应用程序
[if !supportLists]5、[endif]在应用程序请求计算的时候,如果将数据向计算移动的话,因为数据量太大会造成大量的网络延迟以及时间的浪费,并且会消耗大量的资源,但是,如果计算向数据移动,因为计算的应用程序占用的内存很小,在进行传输的过程中不会消耗太多的资源而且传输速度很快,不会产生网络拥塞并提高了系统的整体吞吐量
[if !supportLists]6、[endif]HDFS的设计便于在软件和硬件两个平台进行移植
基于以上6点,也会发现HDFS不适合应用在要求低延迟的数据访问、存储大量的小文件、多用户写入、任意修改文件的场景,因为这几个场景不仅仅不会体现其在数据处理方面的超强的能力,相反还会成为一个拖累,处理能力还不如普通的处理方式
HDFS具有主从架构,集群由一个NameNode和多个DataNodes构成,以及辅助节点Secondary Namenode
NameNode对集群中的文件系统命名空间的主服务器和客户端对于文件的访问组成。存储DataNode中块的管理信息(块管理
通过处理注册和定期心跳来提供Datanode集群成员资格。
进程阻止报告并维护块的位置。
支持块相关操作,如创建,删除,修改和获取块位置。
管理副本放置,阻止复制下的块的复制,并删除过度复制的块。
)
DataNodes管理节点的存储,每一个DataNode的上有多个block块构成,传入系统的大文件就被存储在着一个个的block块(默认大小为64MB)中并定期的向NameNode发送block块的列表信息(
1、可以存储大于磁盘容量的文件,将块存储在不同的磁盘上,提高了集群磁盘的利用率。
2、将传入的文件转化成块存储,可以实现元数据和块的分离,用一个单独的节点存储块的地址信息等,便于管理。
数据块适合用于数据备份进而提供数据容错能力和提高可用性
)
Secondary Namenode:辅助NameNode进行fsimage和edit.log的合并,减轻namenode的压力
本文章主要翻译于官方网站,如有雷同,纯属巧合