logo头像

一路过来,不过游牧自己。。

Hadoop生态系统简介


在实验室一直牵涉到大数据hadoop和spark这方面的研究,一直没有时间整理,今天就把这些东西零零散散的都整理了吧,我们整理的路线就从了解Hadoop起源,Hadoop构成,架构体系,以及各部分组件的具体作用一点点说起!
如:HDFS、MapReduce、Yarn、Zookeeper、Hive、Hbase、Oozie、Mahout、Pig、Flume、Sqoop等组件!

一、Hadoop的起源

Doug Cutting是Hadoop之父 ,起初他开创了一个开源软件Lucene(用Java语言编写,提供了全文检索引擎的架构,与Google类似),Lucene后来面临与Google同样的错误。于是,Doug Cutting学习并模仿Google解决这些问题的办法,产生了一个Lucene的微缩版Nutch。
后来,Doug Cutting等人根据2003-2004年Google公开的部分GFS和Mapreduce思想的细节,利用业余时间实现了GFS和Mapreduce的机制,从而提高了Nutch的性能。由此Hadoop产生了。
Hadoop于2005年秋天作为Lucene的子项目Nutch的一部分正式引入Apache基金会。2006年3月份,Map-Reduce和Nutch Distributed File System(NDFS)分别被纳入Hadoop的项目中。
关于Hadoop名字的来源,是Doug Cutting儿子的玩具大象。

二、什么是Hadoop

Hadoop是一个开源框架,可编写和运行分布式应用处理大规模数据。 Hadoop框架的核心是HDFS和MapReduce。其中 HDFS 是分布式文件系统,MapReduce 是分布式数据处理模型和执行环境。

在一个宽泛而不断变化的分布式计算领域,Hadoop凭借什么优势能脱颖而出呢?

  1. 运行方便:Hadoop是运行在由一般商用机器构成的大型集群上。Hadoop在云计算服务层次中属于PaaS(Platform-as-a- Service):平台即服务。
  2. 健壮性:Hadoop致力于在一般的商用硬件上运行,能够从容的处理类似硬件失效这类的故障。
  3. 可扩展性:Hadoop通过增加集群节点,可以线性地扩展以处理更大的数据集。
  4. 简单:Hadoop允许用户快速编写高效的并行代码。

    三、Hadoop生态系统概况

    Hadoop是一个能够对大量数据进行分布式处理的软件框架。具有可靠、高效、可伸缩的特点。
    Hadoop的核心是HDFS和Mapreduce,hadoop2.0还包括YARN。
    下面看这张Hadoop家族图:
    Hadoop家族图
    1)浏览器
    2) Nutch,互联网数据及Nutch搜索引擎应用
    3) HDFS,Hadoop的分布式文件系统
    5) MapReduce,分布式计算框架
    6) Flume、Scribe,Chukwa数据收集,收集非结构化数据的工具。
    7) Hiho、Sqoop,讲关系数据库中的数据导入HDFS的工具
    8) Hive数据仓库,pig分析数据的工具
    10)Oozie作业流调度引擎
    11)Hue,Hadoop自己的监控管理工具
    12)Avro 数据序列化工具
    13)mahout数据挖掘工具
    14)Hbase分布式的面向列的开源数据库
    其特点是:
    源代码开源、社区活跃、参与者众多、涉及分布式存储和计算的方方面面、已得到企业界验证
    下图为hadoop的生态系统结构图,2.0版:
    生态系统结构图

    hadoop核心包括以下几个部分

    hadoop核心
    由上图可以看出Hadoop1.0与Hadoop2.0的区别。Hadoop1.0的核心由HDFS(Hadoop Distributed File System)和MapReduce(分布式计算框架)构成。而在Hadoop2.0中增加了Yarn(Yet Another Resource Negotiator),来负责集群资源的统一管理和调度。

    1、HDFS(Hadoop分布式文件系统)

    源自于Google的GFS论文,发表于2003年10月,HDFS是GFS克隆版。
    是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。
    HDFS
    Client:切分文件;访问HDFS;与NameNode交互,获取文件位置信息;与DataNode交互,读取和写入数据。
    NameNode:Master节点,在hadoop1.X中只有一个,管理HDFS的名称空间和数据块映射信息,配置副本策略,处理客户端请求。
    DataNode:Slave节点,存储实际的数据,汇报存储信息给NameNode。
    Secondary NameNode:辅助NameNode,分担其工作量;定期合并fsimage和fsedits,推送给NameNode;紧急情况下,可辅助恢复NameNode,但Secondary NameNode并非NameNode的热备。

    2、Mapreduce(分布式计算框架)

    源自于google的MapReduce论文,发表于2004年12月,Hadoop MapReduce是google MapReduce 克隆版。
    源自于google的MapReduce论文
    MapReduce是一种计算模型,用以进行大数据量的计算。其中Map对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果。Reduce则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce这样的功能划分,非常适合在大量计算机组成的分布式并行环境里进行数据处理。
    MapReduce
    JobTracker:Master节点,只有一个,管理所有作业,作业/任务的监控、错误处理等;将任务分解成一系列任务,并分派给TaskTracker。
    TaskTracker:Slave节点,运行Map Task和Reduce Task;并与JobTracker交互,汇报任务状态。
    Map Task:解析每条数据记录,传递给用户编写的map(),并执行,将输出结果写入本地磁盘(如果为map-only作业,直接写入HDFS)。
    Reducer Task:从Map Task的执行结果中,远程读取输入数据,对数据进行排序,将数据按照分组传递给用户编写的reduce函数执行。
    Mapreduce处理流程,以wordCount为例:
    WC

    3、Yarn(资源管理系统)

    Yarn是Hadoop2.0新增的系统,负责集群的资源管理和调度,使得多种计算框架可以运行在一个集群中。
    此处只是Yarn的概述,如果想了解Yarn详情,请查看《Yarn详解》这篇文章。

Yarn具有如下特点:
良好的扩展性、高可用性
对多种数据类型的应用程序进行统一管理和资源调度
自带了多种用户调度器,适合共享集群环境
Yarn

4、Hive(基于MR的数据仓库)

Hive由facebook开源,最初用于解决海量结构化的日志数据统计问题;是一种ETL(Extraction-Transformation-Loading)工具。它也是构建在Hadoop之上的数据仓库;数据计算使用MR,数据存储使用HDFS。
Hive定义了一种类似SQL查询语言的HiveQL查询语言,除了不支持更新、索引和实物,几乎SQL的其他特征都能支持。它通常用于离线数据处理(采用MapReduce);我们可以认为Hive的HiveQL语言是MapReduce语言的翻译器,把MapReduce程序简化为HiveQL语言。但有些复杂的MapReduce程序是无法用HiveQL来描述的。
Hive提供shell、JDBC/ODBC、Thrift、Web等接口。

此处只是Hive的概述,如果想了解Hive详情,请查看<Hive详解>这篇文章。

Hive应用场景:
日志分析:统计一个网站一个时间段内的pv、uv ;比如百度。淘宝等互联网公司使用hive进行日志分析
多维度数据分析
海量结构化数据离线分析
低成本进行数据分析(不直接编写MR)
Hive

5、Pig(数据仓库)

Pig由yahoo!开源,设计动机是提供一种基于MapReduce的ad-hoc数据分析工具。它通常用于进行离线分析。
Pig是构建在Hadoop之上的数据仓库,定义了一种类似于SQL的数据流语言–Pig Latin,Pig Latin可以完成排序、过滤、求和、关联等操作,可以支持自定义函数。Pig自动把Pig Latin映射为MapReduce作业,上传到集群运行,减少用户编写Java程序的苦恼。
Pig有三种运行方式:Grunt shell、脚本方式、嵌入式。
此处只是Pig的概述,如果想了解Pig详情,请查看<Pig详解>这篇文章。

Pig与Hive的比较:

6、Hbase(分布式列存数据库)

源自Google的Bigtable论文,发表于2006年11月,HBase是Google Bigtable克隆版
HBase是一个针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。和传统关系数据库不同,HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。
数据模型:Schema–>Table–>Column Family–>Column–>RowKey–>TimeStamp–>Value
HBase的特点

高可靠性、高性能、面向列、良好的扩展性

Table(表):类似于传统数据库中的表
Column Family(列簇):Table在水平方向有一个或者多个Column Family组成;一个Column Family 中可以由任意多个Column组成。
Row Key(行健):Table的主键;Table中的记录按照Row Key排序。
Timestamp(时间戳):每一行数据均对应一个时间戳;也可以当做版本号。

7、Zookeeper(分布式协作服务)

Zookeeper源自Google发表于2006年11月的Chubby论文,也就是说Zookeeper是Chubby的克隆版。
Zookeeper解决分布式环境下数据管理问题:
(1)统一命名(2)状态同步(3)集群管理(4)配置同步
Zookeeper的应用:
HDFS、Yarn、Storm、HBase、Flume、Dubbo、Metaq

8、Sqoop(数据同步工具)

Sqoop是连接Hadoop与传统数据库之间的桥梁,它支持多种数据库,包括MySQL、DB2等;插拔式,用户可以根据需要支持新的数据库。
Sqoop实质上是一个MapReduce程序,充分利用MR并行的特点,充分利用MR的容错性。

9、Mahout(数据挖掘库)

Mahout起源于2008年,最初是Apache Lucent的子项目,它在极短的时间内取得了长足的发展,现在是Apache的顶级项目。
Mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout现在已经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。除了算法,Mahout还包含数据的输入/输出工具、与其他存储系统(如数据库、MongoDB 或Cassandra)集成等数据挖掘支持架构。
Mahout

10、Flume(日志收集工具)

Cloudera开源的日志收集系统,具有分布式、高可靠、高容错、易于定制和扩展的特点。
它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。总的来说,Flume是一个可扩展、适合复杂环境的海量日志收集系统。

下面是我在组会上做的关于这个的ppt的一个资源分享,有需要的可以下载:链接:http://pan.baidu.com/s/1pKMVBzt 密码:mdbr

这些只是粗略的一个查资料的过程,其中很多小细节也不是特别清楚,所以还需后期继续努力啊!

多走路,多思考,越努力,越幸运!
———————————————YoungerFary

微信打赏

赞赏是不耍流氓的鼓励