在大数据的发展过程当中,出现了一批专门应用与大数据的处理分析工具,如Hadoop,Hbase,Hive,Spark等,咱们先从最基础的Hadoop开始进行介绍node
Hadoop是apache基金会下所开发的分布式基础架构,实现了一个分布式文件系统(HDFS),HDFS拥有高容错性、高可靠性、高扩展性、高效性、低成本的特性,可让用户在不了解相关的底层源码的状况下,在廉价的机器上搭配一台完整的服务器进行分布式程序开发,利用集群的高速运算和存储处理本身的业务。数据库
一个应用程序无非就是计算和存储两个部分,Hadoop也不例外,他的两大核心设计就是HDFS和MapReduce两个组建,HDFS实现了Hadoop的海量数据的存储,而MapReduce则为存储的海量数据提供了计算apache
核心架构:编程
在Hadoop官方网站上对于Hadoop项目的构成有详细的讲解,主要包括服务器
Hadoop Common:支持其余Hadoop模块的经常使用实用程序。网络
Hadoop分布式文件系统(HDFS™):一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。架构
Hadoop YARN:做业调度和集群资源管理的框架。app
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]一、[endif]由于HDFS实例是一个分布式的处理机制,因此可能包括成千上万台服务器计算机,每个计算机存储文件的一部分,可是,由于各类各样的缘由,每个计算机都有可能在使用过程当中出现各类问题,好比断电等,全部这就意味着在这么多的服务器中总有几个是处在没法使用的状态,所以检测故障并能快速的回复保证计算的正常进行是HDFS的核心架构目标
[if !supportLists]二、[endif]HDFS的设计主要是用于批处理而不是一般的用户的交互式的通用应用程序,数据访问的高吞吐量是重点,因此posix放松了对于HDFS的监管,能够经过流式处理的方式对于文件系统中的数据进行相应的处理。
[if !supportLists]三、[endif]由于要处理的数据量特别巨大,单一的服务器根本不可能完成这一任务,全部,HDFS被调整为支持大文件,将一个大的文件分解成多个同样大小的小文件而后分散到各个集群的节点上进行计算
[if !supportLists]四、[endif]为了简化数据的一致性问题以及实现高吞吐量的数据访问,HDFS提供了一个一次写入屡次读取的文件访问模型,当文件写入HDFS以后,能够被屡次读取进行计算,可是,在一次写入以后除了追加和截断以外,不能再次写入,可是能够经过append方法在文件的末尾进行追加,典型的就是MapReduce应用程序
[if !supportLists]五、[endif]在应用程序请求计算的时候,若是将数据向计算移动的话,由于数据量太大会形成大量的网络延迟以及时间的浪费,而且会消耗大量的资源,可是,若是计算向数据移动,由于计算的应用程序占用的内存很小,在进行传输的过程当中不会消耗太多的资源并且传输速度很快,不会产生网络拥塞并提升了系统的总体吞吐量
[if !supportLists]六、[endif]HDFS的设计便于在软件和硬件两个平台进行移植
基于以上6点,也会发现HDFS不适合应用在要求低延迟的数据访问、存储大量的小文件、多用户写入、任意修改文件的场景,由于这几个场景不只仅不会体现其在数据处理方面的超强的能力,相反还会成为一个拖累,处理能力还不如普通的处理方式
HDFS具备主从架构,集群由一个NameNode和多个DataNodes构成,以及辅助节点Secondary Namenode
NameNode对集群中的文件系统命名空间的主服务器和客户端对于文件的访问组成。存储DataNode中块的管理信息(块管理
经过处理注册和按期心跳来提供Datanode集群成员资格。
进程阻止报告并维护块的位置。
支持块相关操做,如建立,删除,修改和获取块位置。
管理副本放置,阻止复制下的块的复制,并删除过分复制的块。
)
DataNodes管理节点的存储,每个DataNode的上有多个block块构成,传入系统的大文件就被存储在着一个个的block块(默认大小为64MB)中并按期的向NameNode发送block块的列表信息(
一、能够存储大于磁盘容量的文件,将块存储在不一样的磁盘上,提升了集群磁盘的利用率。
二、将传入的文件转化成块存储,能够实现元数据和块的分离,用一个单独的节点存储块的地址信息等,便于管理。
数据块适合用于数据备份进而提供数据容错能力和提升可用性
)
Secondary Namenode:辅助NameNode进行fsimage和edit.log的合并,减轻namenode的压力
本文章主要翻译于官方网站,若有雷同,纯属巧合