前段时间读完了谷歌的三大论文,现在开始正式学习hadoop,今天就先整理一下hadoop的一些基本要点。

一.从起源开始聊起

hadoop的起源也就是谷歌著名的三大论文,或者可以说是谷歌三大论文的开源实现。Hadoop的核心组件有三个:HDFS,Hadoop MapReduce,HBase,分别是谷歌的GFS,Google MapReduce和BigTable的开源实现。

另外,有趣的是,Hadoop名字不是一个缩写,而是一个生造出来的词。是Hadoop之父Doug Cutting儿子毛绒玩具象命名的。

这篇文章为我们详细介绍了hadoop自2002诞生之初到现在的详细发展历史,有兴趣的读者可以了解一下。

二.Hadoop的概念

Hadoop在官方上的解释是:hadoop是一个分布式系统基础架构,由apache基金会开发,用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。

所以说,hadoop主要解决的是海量数据的储存和计算的问题。可以用于搭建大型数据仓库,PB级数据的存储,处理,分析,统计等业务。

hadoop可以分为狭义和广义两种:

1、  狭义的Hadoop只是Hadoop本身 (HDFS+MapReduce)。

2、  广义的Hadoop指的是Hadoop生态系统,Hadoop生态系统是一个很庞大的概念,hadoop是其中最重要最基础的一个部分:生态系统的每一个子系统只解决某一个特定的问题域,不搞统一型的一个全能系统,而是小而精的多个小系统。

三.Hadoop生态系统

既然上面聊到了Hadoop的生态系统,就在这里先简单介绍一下,Hadoop的生态系统中有些什么

这里附上一张图

hadoop广告分析 hadoop相关_Hadoop

可以看出来,Hadoop的生态系统是非常庞大的,下面对生态系统中的几个主要部件作下简要介绍

  • HDFS Hadoop的分布式文件系统。是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。
  • MapReduce(分布式计算框架) MapReduce是一种计算模型,用以进行大数据量的计算。其中Map对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果。Reduce则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce这样的功能划分,非常适合在大量计算机组成的分布式并行环境里进行数据处理。
  • Hive(基于Hadoop的数据仓库)Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析。
  • Hbase(分布式列存数据库) HBase是一个针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。和传统关系数据库不同,HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。
  • Zookeeper(分布式协作服务) 解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。
  • Sqoop(数据同步工具) Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。
  • Pig(基于Hadoop的数据流系统) 由yahoo!开源,设计动机是提供一种基于MapReduce的ad-hoc(计算在query时发生)数据分析工具。定义了一种数据流语言—Pig Latin,将脚本转换为MapReduce任务在Hadoop上执行。通常用于进行离线分析。
  • Mahout(数据挖掘算法库) Mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout现在已经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。除了算法,Mahout还包含数据的输入/输出工具、与其他存储系统(如数据库、MongoDB 或Cassandra)集成等数据挖掘支持架构。
  • Flume(日志收集工具) Cloudera开源的日志收集系统,具有分布式、高可靠、高容错、易于定制和扩展的特点。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。总的来说,Flume是一个可扩展、适合复杂环境的海量日志收集系统。
  • Oozie作业流调度引擎 Oozie是一个基于工作流引擎的服务器,可以在上面运行Hadoop的Map Reduce和Pig任务。它其实就是一个运行在Java Servlet容器(比如Tomcat)中的Javas Web应用。

Hadoop生态系统的特点

  • 开源,社区活跃
  • 囊括了大数据处理的方方面面
  • 较为成熟的生态圈