Hadoop

Hadoop是一个开源的可运行于大规模集群上的分布式文件系统和运算处理基础框架;擅长于在廉价机器搭建的群集上进行海量数据的存储与离线处理

Hadoop能帮我们做什么?分布式 多节点协作;其核心组件:HDFS block dataNode

学习要求:Linux系统基本操作 Java开发 Hadoop核心组件 Mapreduce/spark编程模型 Zookeeper-sqoop-Flume等组件工具 NoSQL技术 Hbase 数据分析挖掘 机器学习Mahout

======Hadoop生态圈======

Sqoop主要用于传统关系型数据库和Hadoop之间传输数据。

Flume是海量日志收集系统,提供对日志数据进行简单处理的能力,如过滤、格式转换等,能够将日志写往各种数据目标。

------------------

HDFS是Hadoop体系中数据存储管理的基础,它是一个分布式文件系统,具有高容错性,提供高吞吐率的数据访问,能够有效处理海量数据集。

  -名称节点NameNode:保存文件属性信息的节点;管理HDFS的名字空间,维护管理所有文件的元数据。

  (1)管理HDFS的名字空间,维护管理所有文件的元数据。
  (2)管理DataNode上的数据块,决定文件数据块存储到哪个DataNode。
  (3)处理客户端的读写请求。
  (4)按用户确定的副本策略管理HDFS中数据的副本

  -数据节点DataNode:保存文件数据的节点;向 NameNode 定期汇报数据块信息,并定时向 NameNode 发送心跳信号保持联系

  (1)存储实际的数据块,每个HDFS数据块默认大小为128MB,存储在本地文件系统的单独文件中。

  (2)处理客户端的读写请求,执行数据块的读和写。
  (3)向 NameNode 定期汇报数据块信息,并定时向 NameNode 发送心跳信号保持联系。

  FSImage文件存储文件的元数据,HDFS运行时会将该文件加载到内存中。

  edits文件记录对文件的写操作(修改)。写文件操作只会对内存中的元数据进行修改,不会对FSImage文件进行修改。

  SecondaryNameNode,用于合并元数据文件FSImage。
  (1)将NameNode上的FSImage和edits文件复制到本地,并将两者合并生成新的FSImage文件,再将新的FSImage文件复制回NameNode。
  (2)不是NameNode的备份,但可以帮助恢复NameNode,因为其上保存了大部分的元数据信息。

HDFS优点:
(1)适合处理大数据:HDFS能够处理TB级甚至PB级的数据,文件数量也可达百万以上。
(2)高容错性:自动保存数据的多个副本,当某一副本丢失,可以自动重备。
(3)低成本运行:HDFS可以运行在廉价的商用计算机上。通过多副本机制提高可靠性。

HDFS缺点:
(1)不适合处理低延时的数据访问。
(2)不适合处理大量的小文件:小文件太多会消耗NameNode的内存。同时小文件的寻址时间超过读取时间,也违背了HDFS的设计目标。(3)不支持并发写入和文件随机修改:HDFS的文件同时只能有一个用户进行写操作,也仅支持文件的数据追加。

---------

HBase是一个建立在HDFS之上,面向列的针对结构化和半结构化数据的动态数据库。HBase提供了对大规模数据的随机、实时读写访问, HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。

Kafka是一种高吞吐量的分布式消息系统,它主要用于处理活跃的流式数据。这些数据通常以日志的形式记录下来,然后每隔一段时间进行一次统计处理。

------------

YARN是通用资源管理系统,为上层应用提供统一资源管理调度。

  (1)Yarn就是通用资源管理系统,负责将系统资源分配给在 Hadoop 集群中运行的各种应用程序,并调度要在不同集群节点上执行的任务,相当于一个分布式操作系统平台。
  (2)YARN的组件有ResourceManager、ApplicationMaster、NodeManager和Container,采用的是Master/Slave(主/从)结构。

  ResourceManager(资源管理器),负责整个系统的资源管理与分配。由两个组件构成:
  (1)调度器(Scheduler):根据资源情况和预先定义的策略以及应用程序的资源需求,将系统中的资源分配给各个正在运行的应用程序。
  (2)应用程序管理器(Applications Manager):负责管理整个系统中所有应用程序,监控 ApplicationMaster 运行状态并在其失败时重新启动它。

  NodeManager管理单个节点上的资源。
  (1)定时向ResourceManager汇报节点的资源使用情况和节点中各Container的运行状态。
  (2)负责接收 ResourceManager 的资源分配要求,分配具体的 Container 给应用的某个任务。
  (3)处理来自 ApplicationMaster 的Container启动或停止请求。

  ApplicationMaster,应用程序的第一个进程,负责监控、管理应用程序所有任务的运行。
  (1)将要处理的数据进行切分,为每个切分的数据块在该数据块所在节点启动一个运算任务,由该任务对数据进行处理。
  (2)为了启动任务向ResourceManager申请资源,然后指示任务所在的NodeManager启动Container。
  (3)在任务的运行过程中,监视任务的运行状态,重新启动失败的任务。当任务运行完毕,负责返还资源。

  Container 是 YARN 中动态创建的资源容器,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。
  (1)当 ApplicationMaster为任务向 ResourceManager 申请资源时,ResourceManager 为 ApplicationMaster返回的资源便是用 Container 来表示的。
  (2)ResourceManager只负责告诉ApplicationMaster哪些Container可以用,ApplicationMaster还需要去找NodeManager请求分配具体的Container。

  yarn应用程序的运行过程:

  (1)客户端向ResourceManager提交应用程序并请求运行一个ApplicationMaster进程。

  (2)ResourceManager计算所需要的资源,指定某个NodeManager初始化Container,在NodeManager的协助下启动第一个Container,并在Container中启动ApplicationMaster进程。

  (3)ApplicationMaster向ResourceManager注册,为内部要执行的任务申请资源。

  (4)ApplicationMaste拿到资源后,根据资源信息指定相应的NodeManager启动Container,在Container中启动对应的任务。

  (5)所有任务运行完成后,ApplicationMaster向ResourceManager注销,归还所使用的全部资源,整个应用程序运行结束。

----------------

MapReduce是面向大型数据处理的并行计算模型和方法,仅适合离线数据处理。

(1)MapReduce是面向大型数据处理的、简化的、并行计算模型。(2)将用户编写的业务逻辑代码和自带的默认组件整合成一个完整的分布式运算程序,使得开发并行计算应用程序变得很容易。(3)MapReduce把对大数据的操作分发给多个子节点并行处理,然后整合各个子节点的输出结果,得到最终的计算结果。

  MapReduce运行流程:
  (1)读取数据阶段。从本地的HDFS文件系统中读取数据并分片。
  (2)Map处理阶段。每个分片会让一个Map任务来处理。
  (3)Shuffle阶段。分为两步:
  A. 在单个Map任务所在的节点上,将Map任务的输出数据进行分区、排序、合并。
  B. 在Reduce任务所在的节点上,将各个Map任务节点上对应的分区数据复制过来,进行排序、合并。
  (4)Reduce 阶段。Reduce任务读入Shuffle处理后的数据进行处理,处理后的结果写入磁盘。

  MapReduce优点:
  (1)易于编程:使用它的一些简单接口,就可以完成一个分布式程序。
  (2)良好的拓展性:当计算资源不足时,可以简单地通过增加计算机的数量来扩展它的计算能力。
  (3)高容错性:当运算节点出现故障时,MapReduce的计算任务可以自动转移到另一个节点运行,不需要人工干预。
  (4)适合处理离线大数据:能够处理PB级的离线数据。
  缺点:
  (1)不适合实时计算:MapReduce达不到在秒级以内反馈运算结果。
  (2)不适合流式计算:流式计算处理的数据是动态的,而MapReduce只能处理静态的数据。
  (3)不适合有向图计算:对于有向图计算,MapReduce在处理数据的过程中,每个任务的输出结果都会写入磁盘,会造成大量的磁盘读写,形成瓶颈,降低系统的性能。

Spark提供一个通用并行计算框架用于处理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理需求。

Hive是一种数据仓库技术,用于查询和管理存储在分布式环境下的大数据集,通常用于离线分析。

Mahout是一个开源的数据挖掘算法库,实现了一些可扩展的机器学习领域经典算法。

Oozie是 Hadoop 平台的一种工作流调度引擎,用于协调多个Hadoop作业的执行。

Azkaban是一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。

ZooKeeper是一个分布式数据管理和协调框架,保证分布式环境中数据的一致性,是Hadoop组件的一个监管系统。

====Hadoop优缺点及应用场景=====

优点(1)扩容能力强:Hadoop是在可用的计算机集群间分配数据并完成计算任务,这些集群可以方便地扩展到数以千计的节点。
(2)成本低:通过普通廉价的计算机组成服务器集群来分发以及处理数据,相比使用大型机乃至超级计算机成本低很多。
(3)高效率:通过并发数据,Hadoop可以在节点之间动态并行处理数据,使得处理速度非常快。
(4)高可靠性:能自动维护数据的多份复制,并且在任务失败后能自动地重新部署计算任务。

缺点:
(1)不适合处理低延时的数据访问。
(2)不适合处理大量的小文件:小文件太多会消耗NameNode的内存。同时小文件的寻址时间超过读取时间,也违背了HDFS的设计目标。
(3)不支持并发写入和文件随机修改:HDFS的文件同时只能有一个用户进行写操作,也仅支持文件的数据追加。

应用场景:

在线旅游:目前全球范围内80%的在线旅游网站都在使用Hadoop。
移动数据:美国有70%的智能手机数据服务背后都是由Hadoop来支撑的。 
电子商务:大型电子商务公司都在使用Hadoop处理自己的数据。 
能源开采:石油公司利用Hadoop进行数据的收集和处理,其中一些数据是海洋的地震数据,用于寻找油矿的位置。

节能:能源服务商使用Hadoop为消费者提供节约电费的服务。
IT基础架构管理:利用Hadoop从服务器、交换机以及其它的设备中收集并分析数据。
图像处理:使用Hadoop来存储并处理图片数据,从卫星拍摄的高清图像中探测地理变化。 
诈骗检测:金融服务或者政府机构利用Hadoop来存储所有的客户交易数据,能够帮助机构发现客户的异常活动,预防欺诈行为。 
IT安全:Hadoop可以用来处理计算机生成的数据,以便甄别来自恶意软件或者网络中的攻击。
医疗保健:医疗行业也会用到Hadoop作为其服务的基础,其中包括语义分析等高级分析技术。医疗机构可以利用语义分析为患者提供医护服务,并协助医生更好地为患者进行诊断。

=====Hadoop核心组件========

HDFS  YARN  MapReduce

=====Hadoop三种模式=====

Hadoop可以按三种模式进行安装和运行。
单机模式
(1)Hadoop的默认模式,安装时不需要修改配置文件。
(2)Hadoop运行在一台计算机上,不需要启动HDFS和YARN。
(3)MapReduce运行处理数据时只有一个JAVA进程,使用本地文件系统进行数据的输入输出。
(4)用于对MapReduce程序的逻辑进行调试,确保程序的正确。
伪分布式模式
(1)Hadoop安装在一台计算机上,需要修改相应的配置文件,用一台计算机模拟多台主机的集群。
(2)需要启动HDFS和YARN,是相互独立的Java进程。
(3)MapReduce运行处理数据时是每个作业一个独立进程,输入输出使用分布式文件系统。
(4)用来进行学习和开发测试Hadoop程序的执行是否正确。
完全分布式模式
(1)在多台计算机上安装JDK和Hadoop,组成相互连通的集群,需要修改相应的配置文件。
(2)Hadoop的守护进程运行在由多台主机搭建的集群上。
真正的生产环境。

=====发展史=====

 Hadoop起源于Apache Nutch项目,Apache Nutch 项目起源于Apache Lucene项目,这三个项目的创始人都是Doug Cutting。

2003年谷歌发表关于GFS(Google File System,Google文件系统)分布式存储系统的论文。
2004年:Doug Cutting和Mike Cafarella基于GFS论文实现Nutch的分布式文件系统NDFS。

2004年发表关于MapReduce分布式计算框架的论文。

2005年:Doug Cutting和Mike Cafarella基于MapReduce论文在Nutch上实现MapReduce系统。
2006年2月:MapReduce和HDFS(NDFS重新命名为HDFS)成为Lucene的一个子项目,称为Hadoop,Apache Hadoop项目正式启动。
2008年1月:Hadoop升级成为Apache顶级项目。此时,Hadoop发展到0.15.3版本。

原文地址:https://www.cnblogs.com/geryhz/p/10534793.html