概述

Hadoop一个开源的、可运行于大规模集群上的分布式计算平台,它实现了MapReduce计算模型和分布式文件系统HDFS等功能。

它被公认为行业大数据标准开源软件。

名字的是由小孩子取的“一头吃饱了的大象”。

由来

1997年年末,Doug Cutting道格·卡丁因工作不稳定,自己用Java编写了Lucene;(Doug Cutting是Lucene、Nutch、Hadoop、Avro的作者)Lucene其实是一个提供全文文本搜索的函数库,它不是一个应用软件;

2000年3月,Lucene被放到了SourceForge上

2001年10月,Lucene被捐献给Apache,作为Jakarta的一个子项目。

2002年8月, Doug Cutting创建了Nutch并托管于SourceForge上;

Nutch项目遇到了棘手的难题,该搜索引擎框架无法扩展到拥有数十亿网页的网络。

2003年10月,谷歌发布分布式文件系统GFS(The Google File System)Google论文《Google File System》

2004年,Nutch的开源版本基于GFS开发了NDFS(Nutch Distributed File System,NDFS)解决了存储的问题

2004年10月,谷歌发布《Google MapReduce》大数据分布式计算框架

2005年1月,Nutch加入Apache的孵化器

2005年,Nutch实现了谷歌的MpaReduce

2005年6月,Nutch孵化结束成为Lucene的子项目

2006年2月,Nutch中的NDFS和MapReduce独立出来 ,成为Apache Lucene项目的子项目,称为Hadoop;创始人Dong Cutting道格·卡丁加盟雅虎公司。

特性

  • 高可靠性

采用冗余数据存储方式,即使一个副本发生故障,其他副本也可以保证正常对外提供服务。

  • 高效性

作为并行分布式计算平台,采用分布式存储和分布式计算两大核心技术,能够高效地处理PB级数据。

  • 高扩展性

Hadoop的设计目标是可以高效稳定地运行在廉价的计算机集群上,可以扩展到以千计的计算机节点上。

  • 高容错性

采用冗余数据存储方式,自动保存数据的多个副本,并且能够自动将失败的任务进行重新分配。

  • 成本低

Hadoop采用廉价的计算机集群,成本比较低,普通用户也很容易用自己的PC搭建Hadoop运行环境。

  • 运行在Linux操作系统上

Hadoop基于Java开发的,可以较好地运行在Linux操作系统上。

  • 支持多种编程语言

Hadoop上的应用程序也可以使用其他语言编写,如C++。

Hadoop的版本

Apache Hadoop版本分为三代,分别是Hadoop 1.0、Hadoop 2.0和Hadoop 3.0。

Hadoop 1.0

Hadoop 1.0包含0.20.x、0.21.x和0.22.x三个版本,其中,0.20.x最后演化成1.0.x,就了稳定版,而0.21.x和0.22.x增加了HDFS HA等重要的新特性。

Hadoop1.0的核心组件(仅指MapReduce和HDFS,不包括Hadoop生态系统内的Pig、Hive、HBase等其他组件)主要存在以下不足:

  • 抽象层次低

功能实现需要手工编写代码来完成,有时只是为了实现一个简单的功能,也需要编写大量的代码

  • 表达能力有限

MapReduce把复杂的分布式编程工作高度抽象为两个函数,即Map和Reduce,在降低开发人员程序开发复杂度的同时,也带来了表达能力有限的问题,实际生产环境的一些应用是无法用简单的Map和Reduce来完成的。

  • 开发者自己管理作业之间的依赖关系

一个作业(Job)只包含Map和Reduce两个阶段,通常的实际应用问题需要大量的作业进行协作才能顺利解决,这些作业之间往往存在复杂的依赖关系,但是MapReduce框架本身并没有提供相关的机制对这些依赖关系进行有效管理,只能由开发者自己管理。

  • 难以看到程序整体逻辑

用户的处理逻辑都隐藏在代码细节中,没有更高层次的抽象机制对程序整体逻辑进行设计,这就给代码理解和后期维护带来了障碍。

  • 执行迭代操作效率低

对于一些大型的机器学习、数据挖掘任务,往往需要多轮迭代才能得到结果。采用MapReduce实现这些算法时,每次迭代都是一次执行Map、Reduce任务的过程,这个过程的数据来自分布式文件系统HDFS,本次迭代的处理结果也被存放到HDFS中,继续用于下一次迭代过程。反复读写HDFS中的数据,大大降低了迭代操作的效率。

  • 资源浪费

在MapReduce框架设计中,Reduce任务需要等待所有Map任务都完成后才可以开始,造成了不必要的资源浪费。

  • 实时性差

只适用于离线批数据处理,无法支持交互式数据处理、实时数据处理。

Hadoop 2.0

Hadoop框架自身的改进:从1.0到2.0

组件

Hadoop1.0的问题

Hadoop2.0的改进

HDFS

单一名称节点,存在单点失效的问题

设计了HDFS HA,提供名称节点热备份机制

单一命名空间,无法实现资源隔离

设计了HDFS联邦,管理多个命名空间

MapReduce

资源管理效率低

设计了新的资源管理框架YARN

不断完善的Hadoop生态系统

组件

功能

解决Hadoop中存在的问题

Pig

处理大规模数据的脚本语言,用户只需要编写几条简单的语句,系统会自动转换为MapReduce作业

抽象层次低,需要手工编写大量代码

Oozie

工作流和协作服务引擎,协调Hadoop上运行的不同任务

没有提供作业依赖关系管理机制,需要用户自己处理作业之间的依赖关系

Tez

支持DAG作业的计算框架,对作业的操作进行重新分解和组合,形成一个大的DAG作业,减少不必要操作

不同的MapReduce任务之间存在重复操作,降低了效率

Kafka

分布式发布订阅消息系统,一般作为企业大数据分析平台的数据交换枢纽,不同类型的分布式系统可以统一接入Kafka,实现和Hadoop各个组件之间的不同类型数据的实时高效交换

Hadoop生态系统中各个组件和其他产品之间缺乏统一的、高效的数据交换中介

Hadoop 2.0包含0.23.x和2.x两大版本,它们完全不同于Hadoop 1.0,是一套全新的架构,均包含HDFS Federationt [ˌfedə'reɪʃn](联邦、联合) 和YARN(Yet Another Resource Negotiator)两个系统。Hadoop 2.0是基于JDK 1.7开发的,2015年4月JDK 1.7停止更新,Hadoop社区基于JDK 1.8发布了新的Hadoop版本,即Hadoop 3.0。

Federation HDFS与HDFS的区别

HDFS的局限性(HDFS只有一个active的namenode):

1. 在name中存储所有的元数据(metadata),因此单个namenode所能存储的对象(块+文件)数据受到namenode所在JVM的heap size的限制。

2. 整个HDFS文件系统的吞吐量受限于单个namenode的吞吐量

3. 无法隔离namespace

Federation HDFS 与 HDFS的区别:

HDFS只有一个name space, 它使用全部的块。而Federation HDFS 中有多个独立的namespace,每个命名空间使用一个block Pool。

Bolck Pool : 维护单个命名空间的所有block。Data node是一个物理概念,而block pool是一个重新将block划分的逻辑概念。同一个DataNode可以存储 着属于多个blocknode的多个块。block允许一个命名空间在不通知其它命名空间的情况下为一个新的block创建blockID。同时,一个namenode失效不会影响旗下的DataNode为其它namenode服务。

Federation HDFS 架构图:

Federation HDFS HA架构图

其中 NN1 NN3 属于同一个namenode, NN2 NN4 属于同一个namenode

Hadoop 3.0

Hadoop 3.0 JDK版本的最低依赖从1.7变成了1.8;Haddop3.0中引入 了一些重要的功能和优化,包括HDFS可探险编码、多名称节点支持、任务级别的MapReduce本地优化、基于cgroup的内存和磁盘IO隔离等。

支持HDFS中的纠删码Erasure Encoding;(检错码、纠错码、删错码)代替副本机制

基于HDFS路由器的联合

支持多个NameNode

DataNode内部添加了负载均衡Disk Balancer

Hadoop生态系统

Hadoop除了核心的HDFS和MapReduce外,Hadoop生态系统还包括ZooKeeper、HBase、Hive、Pig、Mahout、Flume、Sqoop、Ambari等功能组件。

HDFS

HDFS 是Hadoop的分布式文件系统,是Hadoop的核心之一,是针对谷歌文件系统GFS的开源实现。HDFS具有处理超大数据、流式处理、可以运行在廉价的商用服务器上等优点。因为HDFS一开始就定位运行在廉价的商用服务器上,因此,在设计上把硬件故障作为一种常态来考虑,实现了在部分硬件发生故障的情况下仍然能保证文件系统的整体可用性和可靠性。HDFS放宽了一部分可移植操作系统接口(Portable Operating System Interface,POSIX)约束,从而实现以流的形式访问文件系统中的数据。HDFS在访问应用程序数据时,可以具有很高的吞吐率,因此选择HDFS作为底层数据存储系统是较好的选择。

HBase

HBase是一个提供高可靠性、高性能、可伸缩、实时读写、分布式的列式数据库,一般采用HDFS作为其底层数据存储系统。HBase是针对谷歌的BigTable的开源实现,二者都采用了相同的数据模型,具有强大的非结构化数据存储能力。HBase具有良好的横向扩展能力,可以通过不断增加廉价的商用服务器来提高存储能力。

MapReduce

Hadoop MapReduce是谷歌MapReduce的开源实现。MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算,它将复杂的、运行于大规模集群上的并行计算过程高度地抽象为两个函数----Map和Reduce。

MapReduce的核心思想就是“分而治之”,它把输入的数据集切分为若干个独立的数据块,分发给一个主节点管理下的各个分节点来共同并行完成;最后,通过整合各个节点的中间结果得到最终结果。

Hive

Hive是一个基础Hadoop的数据仓库工具,可以用于对Hadoop文件中的数据集进行整理、特殊查询和分析存储。它提供了类似关系数据库SQL的查询语言 ---- HiveSQL,Hive自身可以将HiveSQL语句转换为MapReduce任务运行,而不必开发专门的MapReduce应用,因而十分适合数据仓库的统计分析。

Pig

Pig是Hadoop生态系统的一个组件,提供了类似SQL的Pig Latin(包含Filter、GroupBy、Join、OrderBy等操作,同时也支持用户自定义函数),允许用户通过编写简单的脚本来实现复杂的数据分析,而不需要编写复杂的MapReduce应用程序。Pig会自动把用户编写的脚本转换成MapReduce作业在Hadoop集群上运行,而且具备对生成的MapReduce程序进行自动优化的功能。

Pig可以加载数据、表达转换数据以及存储最终结果。Pig通常用于数据提取、转换和加载(Extraction、Transformation、Loading,ETL)过程,即来自不同数据源的数据被收集过来后,使用Pig进行统一加工处理,然后加载到数据仓库Hive中,由Hive实现对海量数据的分析。

Pig并不适合所有的数据处理任务,特别是当需要查询大数据集中的一小部分数据时。

当数据查询只面向相关技术人员,并且属于即时性的数据处理需求时,比较适合采用Pig编写一个脚本来完成快速运行处理,从而避免创建表等相关操作。

Mahout

Mahout是Apache软件基金会旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。

Zookeeper

Zookeeper是针对谷歌Chubby的一个开源实现,是高效和可靠的协同工作系统,提供分布式锁之类的基本服务(如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等),用于构建分布式应用,减轻分布式应用程序所承担的协调任务。

Flume

Flume是Cloudera提供的一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理并写到各种数据接收方的能力。

Sqoop

Sqoop是SQL-to-Hadoop的缩写,主要用来在Hadoop和关系数据库之间交换数据,可以改善数据的互操作性。通过Sqoop可以方便地将数据从关系数据库导入Hadoop,或者将数据从Hadoop导出到关系数据库。Sqoop主要通过Java数据库连接JDBC和关系数据库进行交互。Sqoop是专门为大数据集设计的,支持增量更新。

Ambari

Ambari是一种基于Web的工具,支持Hadoop集群的安装、部署、配置和管理。

Tez

Tez是Apache开源的支持DAG作业的计算框架,直接源于MapReduce框架。其核心思想是将Map和Reduce两个操作进一步进行拆分,即将Map拆分成Input、Processor、Sort、Merge和Output等,将Reduce拆分成Input、Shuffle、Sort、Merge、Processor和Output等,经过分解后的这些元操作可以进行任意组合产生新的操作,经过一些控制程序组装后就可形成一个大的DAG作业。

通过DAG作业的方式运行MapReduce作业,提供了程序运行的整体处理逻辑,可以去除工作流当中多余的Map阶段,减少不必要的操作,提升数据处理的性能。

在Hadoop 2.0生态系统中,MapReduce、Hive、Pig等计算框架都需要最终以MapReduce任务的形式执行数据分析,因此Tez框架可以发挥重要的作用。可以让Tez框架运行在YARN框架之上,然后让MapReduce、Pig、Hive等计算框架运行在Tez框架之上,从而借助于Tez框架实现对Map、Pig和Hive等的性能优化,更好地解决现有MapReduce框架在迭代计算和交互计算方面存在的问题。

Tez在解决Hive、Pig延迟大、性能低等问题的思路上,和那些支持实时交互式查询分析的产品(如Impala、Dremel和Drill等)是不同的。Impala、Dremel和Drill解决问题的思路是抛弃MapReduce计算框架,不再将类似SQL语句的HiveSQL或者Pig语句翻译成MapReduce程序,而是采用与商用 并行关系数据库类似的分布式查询引擎,直接从HDFS或者HBase中用SQL语句查询数据,从而大大降低了延迟。Tez则不同,仍然采用MapReduce计算框架,但是对DAG的作业依赖关系进行了裁剪,并将多个小作业合并成一个大作业,这样不仅计算量减少了,而且读写HDFS次数也会大大减少。

Kafka

Kafka是由LinkedIn开发的一种高吞吐量的分布式发布/订阅消息系统,用户通过Kafka系统可以发布大量的消息,同时能实时订阅消费消息。Kafka设计的初衷是构建一个可以处理海量日志、用户行为和网站运行统计等的数据处理框架。Kafka可以同时提供在线实时处理的低延迟和批量离线处理的高吞吐量。

在公司的大数据生态系统中,可以把Kafka作为数据交换枢纽,不同类型的分布式系统(如关系数据库、NoSQL数据库、流处理系统、批处理系统等)可以统一接入Kafka,从而实现和Hadoop各个组件之间的不同类型数据的实时高效交换,较好地满足各种企业的应用需求。

第2章 大数据处理架构Hadoop相关推荐

  1. 大数据技术原理与应用(第二章 大数据处理架构Hadoop)

    目录 2.1Hadoop简介 HDFS(分布式文件系统) MapReduce(分布式并行编程框架) Hadoop的特点 Hadoop的应用 ​编辑Hadoop版本的变化 2.2Hadoop项目结构 T ...

  2. 第二章-大数据处理框Hadoop

    第二章-大数据处理框Hadoop 文章目录 第二章-大数据处理框Hadoop Hadoop简介 Hadoop概念 Hadoop版本 Hadoop优化与发展 Hadoop生态系统 Hive Pig Ha ...

  3. 第二章:大数据处理架构Hadoop

    本章内容: 1.Hadoop的发展历程 2.Hadoop生态系统的各个组件及其功能 3.Hadoop的安装和使用方法 4.Hadoop集群的部署和使用方法 1.Hadoop简介 Hadoop是Apac ...

  4. 大数据技术与架构——(二)大数据处理架构Hadoop(上)

    文章目录 1.Hadoop概述 1.1Hadoop简介 1.2Hadoop发展简史 1.3Hadoop的特性 1.4Hadoop的应用现状 1.5 Apache Hadoop版本演变 1.6 Hado ...

  5. 大数据处理架构Hadoop

    Hadoop项目结构 Hive 数据仓库:把SQL语句转换成MapReduce作业 Pig流数据处理:一个基于Hadoop的大规模数据分析平台提供类似SQL的查询语言pig Latin Oozie作业 ...

  6. 大数据技术原理与应用----大数据处理架构Hadoop

    一.Hadoop简介及其应用现状 1.Hadoop简介 Hadoop(是大数据技术的集合体,一整套解决方案的统称)是由Java开发的,支持多种编程语言. 2.Hadoop的理论基础 (1)Hadoop ...

  7. 1.大数据处理架构Hadoop

    一.Hadoop简洁 二.Hadoop特性 三.Hadoop版本演变 丰富的Hadoop生态系统 上面中组件以及对应的功能 一.Hadoop集群中节点类型以及作用 Hadoop框架两大核心设计: (1 ...

  8. 云计算与大数据第15章 分布式大数据处理平台Hadoop习题带答案

    第15章 分布式大数据处理平台Hadoop习题 15.1 选择题 1.分布式系统的特点不包括以下的(  D  ). A. 分布性     B. 高可用性        C. 可扩展性     D.串行 ...

  9. Hadoop专业解决方案-第1章 大数据和Hadoop生态圈

    一.前言: 非常感谢Hadoop专业解决方案群:313702010,兄弟们的大力支持,在此说一声辛苦了,经过两周的努力,已经有啦初步的成果,目前第1章 大数据和Hadoop生态圈小组已经翻译完成,在此 ...

  10. 大数据处理架构演进历程,文末留言有机会获取Flink图书

    关注 iteblog_hadoop 公众号并在本文末评论区留言(认真写评论,增加上榜的机会).留言点赞数排名前6名的粉丝,各免费赠送一本<深入理解Flink - 实时大数据处理实战>,活动 ...

最新文章

  1. agile organization
  2. win32api.sendmessage模拟鼠标点击_安卓模拟器一键宏设置教程
  3. 如何用JavaScript实现获取验证码的效果
  4. C#DNS域名解析工具(DnsLookup)
  5. spring定时每天早上八点_SpringBoot 如何实现并发定时任务?
  6. Excel、Exchange 和 C# (摘要)
  7. carla安装之clang版本问题
  8. matlab高级数据结构,Matlab讲义-第四章Matlab语言数据结构1-10.pdf
  9. 深夜不眠,爬起来写博客
  10. 链表 之 字典树(讲解+模板)的构建
  11. 前端特效 —— 八卦图旋转(纯css)
  12. 标准的项目管理完整流程图
  13. JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
  14. 滴滴的2019:巨亏和裁员之后,群狼将至
  15. 天才程序员之陨落:在业余项目创业 Cloudflare,公司上市前患病失去自理能力...
  16. 洛谷P1195 口袋的天空
  17. powder-puff 花拳绣腿
  18. ADC芯片CS1180的读取转换错误的情况记录
  19. Windows平台精选软件工具列表-Windows绝赞应用
  20. Vue项目实战——实现一个任务清单【基于 Vue3.x 全家桶(简易版)】

热门文章

  1. SQL数据库基础知识复习
  2. 前端es6文档大全,你想要的这都有
  3. Maven的安装与配置(详细版)
  4. kotori和糖果(OEIS)
  5. (转载)你的个人信息是如何被盗走的?MySQL脱库,脱库的原理,怎么脱库,脱库的步骤,一库三表六字段
  6. 公开课丨苏杰新著来袭,十年之后再谈人人都是产品经理!
  7. Blog说明--WaaSinn的专业窝
  8. WebLogic下载地址(各版本)
  9. 扫雷源代码(C语言)
  10. mysql默认端口号_什么是MySQL默认端口号?