Hadoop 简介
Hadoop是一个由Apache软件基金会开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System,HDFS)。HDFS具有高容错性的特点,并设计它用来部署在价格低廉的硬件上,而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。Hadoop框架的核心设计就是HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。
1.1 项目起源
Hadoop被Apache软件基金会于2005年作为Lucene子项目Nutch的一部分正式引入。它受到谷歌实验室开发的MapReduce和Google File System(GFS)的启发。2006年3月,MapReduce和Nutch Distributed File System(NDFS)分别被纳入称为Hadoop的项目中。
1.2 发展历程
Hadoop原本来自于谷歌一款名为MapReduce的编程模型包。谷歌的MapReduce框架可以把一个应用程序分解为许多并行计算指令,跨大量的计算节点运行非常巨大的数据集。使用该框架的一个典型例子就是在网络数据上运行的搜索算法。Hadoop最初只与网页索引有关,但后来迅速发展成为分析大数据的领先平台。
1.3 名字起源
Hadoop这个名字不是一个缩写,而是一个虚构的名字。该项目的创建者Doug Cutting这样解释Hadoop的命名:这个名字是我孩子给一个棕黄色的大象玩具起的名字。我的命名标准就是简短、容易发音和拼写,没有太多的意义,并且不会被用于别处。小孩子恰恰是这方面的高手。
1.4 优点
Hadoop是一个能够对大量数据进行分布式处理的软件框架,以一种可靠、高效、可伸缩的方式进行数据处理。Hadoop是一个能够让用户轻松架构和使用的分布式计算平台,用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。
Hadoop主要有以下几个优点。
(1)高可靠性。因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。
(2)高扩展性。Hadoop是在可用的计算机集群间分配数据并完成计算任务的,这些集群可以方便地扩展到数以千计的节点中。
(3)高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,以并行的方式工作,通过并行处理加快处理速度,因此处理速度非常快。
(4)高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
(5)低成本。与一体机、商用数据仓库等工具相比,Hadoop是开源的,项目的软件成本会大大降低。Hadoop带有用Java语言编写的框架,因此运行在Linux生产平台上也是比较低成本的。
1.5 Hadoop 三大核心组件
(1)HDFS:hadoop分布式文件系统海量数据存储(集群服务)。
(2)MapReduce:分布式运算框架(编程框架),海量数据运算分析。
(3)Yarn:资源调度管理集群(可以理解为一个分布式的操作系统,管理和分配集群硬件资源)。 用MapReduce编写一个程序,到Yarn运行平台上去运行。
Hadoop 1.X和2.X的区别
Hadoop 3.X的新特性
相较于早期的Hadoop 1.X和Hadoop 2.X,Hadoop 3.X的主要新特性如下:
(1)Java的最低版本要求从Java 7更改成Java 8。
(2)HDFS支持纠删码(Erasure Coding),从而将数据存储空间节省了50%。
(3)引入YARN的时间轴服务v.2(YARN Timeline Service v.2)。
(4)重写了Shell脚本。
(5)隐藏底层jar包。
(6)支持containers和分布式调度。
(7)MapReduce任务级本地优化。
(8)支持多于两个的NameNodes。
(9)改变了多个服务的默认端口(例如HDFS的Web界面,默认端口由50070变成9870)。
(10)用Intra解决DataNode宕机负载不均衡的问题。
(11)重写守护进程以及任务的堆内存管理。
(12)支持Microsoft Azure Data Lake文件系统。
(13)解决了AMAZON S3的数据一致性问题。
Hadoop 生态子项目
尽管Hadoop因MapReduce及其分布式文件系统HDFS而出名,但Hadoop这个名字也用于泛指一组相关的项目,这些相关项目都使用这个基础平台进行分布式计算和海量数据处理,如下图所示。
项目名称 | 功能 | 项目描述 |
---|---|---|
Flume | 日志收集工具 | Flume 是一个分布式、高可靠、高可用的,海量日志采集、聚合和传输的系统。 |
YARN | 分布式资源管理器 | Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的。yarn是一个通用的运行时框架,用户可以编写自己的计算框架,在该运行环境中运行。 |
Mesos | 分布式资源管理器 | Mesos诞生于UC Berkeley的一个研究项目,现已成为Apache项目,当前有一些公司使用Mesos管理集群资源,比如Twitter。与yarn类似,Mesos是一个资源统一管理和调度的平台,同样支持比如MR、 steaming等多种运算框架。 |
HDFS | Hadoop分布式文件系统 | Apache Hadoop分布式文件系统(HDFS)是Hdoop应用程序使用的主要存储系统,HDFS创建多个数据块副本并将他们分布在整个集群的计算主机上,以启用可靠且级其快速的计算功能。 |
HBase | 分布式列存数据库 | 一种非关系型分布式NoSQL数据库,与传统数据库相比,采用列的方式进行存储,具有高加载、低延迟的特性,可于千亿级数据的快速查询。HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。 |
Phoenix | hbase sql接口 | Apache Phoenix 是HBase的SQL驱动,Phoenix 使得Hbase 支持通过JDBC的方式进行访问,并将你的SQL查询转换成Hbase的扫描和相应的动作。 |
Hive | 数据仓库 | 基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。 |
Presto | 分布式SQL查询引擎 | Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据层支持GB到PB字节。Presto的设计和编写完全是为了解决如Facebook这样规模的商业数据仓库的交互式分析和处理速度的问题,它拥有比Hive更高的执行效率,并针对不同的数据源提供了对应的连接器,用于实现统一的ETL。 |
MapReduce | 分布式计算框架 | MapReduce是一种编程模型,利用函数式编程思想,将对数据集的过程分为Map和Reduce两个阶段。MapReduce的这种编程模型非常适合进行分布式计算。Hadoop提供MapReduce的计算框架,实现了这种编程模型,用户可以通过Java\C++\Python\PHP等多种语言进行编程。 |
Oozie | 工作流调度器 | Oozie是一个工作流调度引擎,可按时间或数据变化触发运行,是集群中管理数据处理作业的工作流协调服务。Oozie 可以把多个 MR 作业组合到一个逻辑工作单元中,从而完成更大型的任务。Oozie 是一种 Java Web 应用程序,它运行在 Java Servlet 容器中(即:Tomcat)中。 |
Pig | ad-hoc脚本 | 数据流处理语言,按照语法以流利化的方式描述数据处理流程,并以分布式的方式完成数据的处理,适合于使用Hadoop和MapReduce平台查询大型半结构化数据集。 |
Sqoop | 数据ETL/同步工具 | 主要用于在Hadoop(Hive)与传统数据库(MySQL、PostGresql等)间进行高效批量数据传递,可以将一个关系型数据库(如MySQL、Oracle、Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导出到关系型数据库中。 |
Zookeeper | 分布式协作服务 | 一个开放源码的分布式应用程序协调服务,是谷歌的Chubby一个开源的实现,是Hadoop和HBase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括配置维护、域名服务、分布式同步、组服务等。 |
falcon | 数据生命周期管理工具 | Apache Falcon 是一个面向Hadoop的、新的数据处理和管理平台,设计用于数据移动、数据管道协调、生命周期管理和数据发现。它使终端用户可以快速地将他们的数据及其相关的处理和管理任务上载(onboard) 到Hadoop集群。 |
knox | hadoop安全网关 | Apache knox是一个访问hadoop集群的restapi网关,它为所有rest访问提供了一个简单的访问接口点,能完成3A认证(Authentication,Authorization, Auditing)和SSO(单点登录)等。 |
Kafka | 分布式消息队列 | 分布式消息发布-订阅系统,用于处理流式海量数据。Kafka 是一个由 LinkedIn 开发的消息队列。能嫁接 HDFS 这样的存储介质,能被 Storm,Spark这类实时或类实时数据模型消费。 |
Storm | 分布式流数据处理系统 | Apache Storm是一个分布式、可靠、容错的数据流处理系统,适用于实时分析、在线机器学习、连续计算、分布式RPC、分布式ETL等。 |
Spark | 内存DAG计算模型 | Spack具有支持循环数据流和内存计算的先进的DAG执行引擎,所以比Hadoop MapRecue在内存计算上快100倍,在硬盘计算上快10倍。Spark提供了Java,Scala,Python和R等语言的高级API,可以用于快速开发相关语言应用。Spark提供了超过80个高级的操作,可以轻松构建并行应用程序。 |
MLib | 机器学习库 | Spark MLlib是一个机器学习库,它提供了各种各样的算法,这些算法用来在集群上针对分类、回归、聚类、协同过滤等。 |
Kylin | 分布式分析引擎 | Kylin 是一款开源的分布式数据分析引擎由 eBay 公司提供,用于分布式的OLAP和多维数据分析工具。 |
Mahout | 数据挖掘算法库 | Mahout是一个机器学习和数据挖掘库,它利用MapReduce编程模型实现k-means,Native,Bayes,Collaborative Filtering等经典的机器学习算法,并使其具有良好的可扩展性。 |
Common | Hadoop底层模块工具 | Hadoop Common是Hadoop体系最底层的一个模块,为Hadoop各个子模块提供各种工具,比如系统配置工具Configuration、远程调用RPC、序列化机制和日志操作等等,是其他模块的基础。 |
Tachyon | 分布式内存文件系统 | Tachyon(/‘tæki:ˌɒn/ 意为超光速粒子)是以内存为中心的分布式文件系统,拥有高性能和容错能力,能够为集群框架(如Spark、MapReduce)提供可靠的内存级速度的文件共享服务。Tachyon诞生于UC Berkeley的AMPLab。 |
Tez | DAG计算模型 | Tez是Apache最新开源的支持DAG作业的计算框架,它直接源于MapReduce框架,核心思想是将Map和Reduce两个操作进一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成 Input、Shuffle、Sort、Merge、Processor和Output等,这样,这些分解后的元操作可以任意灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的DAG作业。目前hive支持mr、tez计算模型,tez能完美二进制mr程序,提升运算性能。 |
Giraph | 图计算模型 | Apache Giraph是一个可伸缩的分布式迭代图处理系统, 基于Hadoop平台,灵感来自 BSP (bulk synchronous parallel) 和 Google 的 Pregel。最早出自雅虎。雅虎在开发Giraph时采用了Google工程师2010年发表的论文《Pregel:大规模图表处理系统》中的原理。后来,雅虎将Giraph捐赠给Apache 软件基金会。 |
GraphX | 图计算模型 | Spark GraphX最先是伯克利AMPLAB的一个分布式图计算框架项目,目前整合在 spark运行框架中,为其提供BSP大规模并行图计算能力。 |
Streaming | 流计算模型 | Spark Streaming支持对流数据的实时处理,以微批的方式对实时数据进行计算。 |
Ambari | 安装部署配置管理工具 | Apache Ambari 的作用来说,就是创建、管理、监视 Hadoop 的集群,是为了让 Hadoop 以及相关的大数据软件更容易使用的一个web工具。 |