月入过万的秘密,等你来看!!!

一、Hadoop生态圈

Hadoop是目前应用最为广泛的分布式大数据处理框架,其具备可靠、高效、可伸缩等特点。
Hadoop的核心组件是HDFS、MapReduce。随着处理任务不同,各种组件相继出现,丰富Hadoop生态圈

根据服务对象和层次分为:数据来源层、数据传输层、数据存储层、资源管理层、数据计算层、任务调度层、业务模型层。

1、核心组件

1.1.HDFS(分布式文件系统)
HDFS是整个hadoop体系的基础,负责数据的存储与管理。HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。
1.2.Map Reduce(分布式计算框架)

MapReduce是一种基于磁盘的分布式并行批处理计算模型,用于处理大数据量的计算。其中Map对应数据集上的独立元素进行指定的操作,生成键-值对形式中间,Reduce则对中间结果中相同的键的所有值进行规约,以得到最终结果。

1.3.Spark(分布式计算框架)

Spark是一种基于内存的分布式并行计算框架,不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。

1.4.Flink(分布式计算框架)

Flink是一个基于内存的分布式并行处理框架,类似于Spark,但在部分设计思想有较大出入。对 Flink 而言,其所要处理的主要场景就是流数据,批数据只是流数据的一个极限特例而已

1.5.Yarn/Mesos(分布式资源管理器)

YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的。
Mesos诞生于UC Berkeley的一个研究项目,现已成为Apache项目,当前有一些公司使用Mesos管理集群资源,比如Twitter。与yarn类似,Mesos是一个资源统一管理和调度的平台,同样支持比如MR、steaming等多种运算框架。

1.6.Zookeeper(分布式协作服务)

解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。
Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作。

1.7.Sqoop(数据同步工具)

Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性
Sqoop利用数据库技术描述数据架构,用于在关系数据库、数据仓库和Hadoop之间转移数据

1.8.Hive/Impala(基于Hadoop的数据仓库)

Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析
HQL用于运行存储在Hadoop上的查询语句,Hive让不熟悉MapReduce开发人员也能编写数据查询语句,然后这些语句被翻译为Hadoop上面的MapReduce任务。
Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎。 它是一个用C ++和Java编写的开源软件。 与Apache Hive不同,Impala不基于MapReduce算法。 它实现了一个基于守护进程的分布式架构,它负责在同一台机器上运行的查询执行的所有方面。因此执行效率高于Apache Hive

1.9.HBase(分布式列存储数据库)

HBase是一个建立在HDFS之上,面向列的针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。
HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。
HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。

1.10.Flume(日志收集工具)

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

1.11.Kafka(分布式消息队列)

Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。实现了主题、分区及其队列模式以及生产者、消费者架构模式。
生产者组件和消费者组件均可以连接到KafKa集群,而KafKa被认为是组件通信之间所使用的一种消息中间件。KafKa内部氛围很多Topic(一种高度抽象的数据结构),每个Topic又被分为很多分区(partition),每个分区中的数据按队列模式进行编号存储。被编号的日志数据称为此日志数据块在队列中的偏移量(offest),偏移量越大的数据块越新,即越靠近当前时间。生产环境中的最佳实践架构是Flume+KafKa+Spark Streaming

1.12.Oozie(工作流调度器)

Oozie是一个可扩展的工作体系,集成于Hadoop的堆栈,用于协调多个MapReduce作业的执行。它能够管理一个复杂的系统,基于外部事件来执行,外部事件包括数据的定时和数据的出现。
Oozie工作流是放置在控制依赖DAG(有向无环图 Direct Acyclic Graph)中的一组动作(例如,Hadoop的Map/Reduce作业、Pig作业等),其中指定了动作执行的顺序。
Oozie使用hPDL(一种XML流程定义语言)来描述这个图。

2、HDFS

1、存储机制
  • HDFS集群分为两大角色:NameNode、DataNode、(secondary NameNode)
  • NameNode负责管理整个文件系统的元数据
  • DataNode负责管理用户的文件数据块
  • 文件会按照固定的大小切成若干块后分布式存储在若干台DataNode上
  • 每一个文件块可以有多个副本,并存放在不同的DataNode上
  • DataNode会定期向NameNode汇报自身所保存的文件block信息,而NameNode则会负责保持文件的副本数量
  • HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向NameNode申请来进行
2、主要节点
1.NameNode(管理节点)
Namenode 管理着文件系统的命令空间(Namespace)。
维护着文件系统树(filesystemtree)以及文件树中所有的文件和文件夹的元数据(metadata),元数据包括编辑日志(edits)和镜像文件(fsimage)。
管理这些信息的文件有两个,分别是Namespace 镜像文件(fsimage)和编辑日志文件(edits),编辑日志主要是记录对hdfs进行的修改;镜像文件主要是记录hdfs的文件树形结构。这些信息被Cache在RAM中,当然,这两个文件也会被持久化存储在本地硬盘。
Namenode记录着每个文件中各个块所在的数据节点的位置信息,但是他并不持久化存储这些信息,因为这些信息会在系统启动时从数据节点重建。
没有namenode,文件系统是无法使用的。事实上,如果运行namenode服务的服务器坏掉,文件系统上的所有文件将会丢失,对NameNode进行容错冗余机制是非常重要的。
2.DataNode(工作节点)
Datanode是文件系统的工作节点,他们根据客户端或者是namenode的调度存储和检索数据,并且定期向namenode发送他们所存储的块(block)的列表。
集群中的从节点服务器都运行一个DataNode后台程序,这个后台程序负责把HDFS数据块读写到本地的文件系统。当需要通过客户端读/写某个数据时,先由NameNode告诉客户端去哪个DataNode进行具体的读/写操作,然后,客户端直接与这个DataNode服务器上的后台程序进行通信,并且对相关的数据块进行读/写操作。
3.secondary NameNode(相当于MySQL数据库中主从复制的从节点)
Secondary NameNode是一个用来监控HDFS状态的辅助后台程序
和NameNode一样,每个集群都有一个Secondary NameNode,并且部署在一个单独的服务器上。Secondary NameNode不同于NameNode,它不接受或者记录任何实时的数据变化,但是,它会与NameNode进行通信,以便定期地保存HDFS元数据的快照
由于NameNode是单点的,通过Secondary NameNode的快照功能,可以将NameNode的宕机时间和数据损失降低到最小。同时,如果NameNode发生问题,Secondary NameNode可以及时地作为备用NameNode使用。

3、Yarn

Yarn是Hadoop集群的资源管理系统,它主要包括两部分功能:

1、ResourceManger(资源管理)
2、ApplicationMaster(任务调度监控)
Yarn的另一个目标就是拓展Hadoop,使得它不仅仅可以支持MapReduce计算,还能很方便的管理诸如Hive、Hbase、Pig、Spark/Shark等应用。这种新的架构设计能够使得各种类型的应用运行在Hadoop上面,并通过Yarn从系统层面进行统一的管理,也就是说,有了Yarn,各种应用就可以互不干扰的运行在同一个Hadoop系统中,共享整个集群资源。

YARN的架构

Yarn主要由以下几个组件组成:

  • ResourceManager:Global(全局)的进程
  • ApplicationMaster:Application-specific(应用级别)的进程
  • Scheduler:是ResourceManager的一个组件*
  • NodeManager:运行在每个节点上的进程
  • Container:节点上一组CPU和内存资源*

二、Spark简介

1、Spark发展历程

Spark于2009年诞生于美国,但是当时的Spark主要是为交互式查询和迭代算法而设计的,支持内存存储和高效的容错恢复。在2013年时,Spark成为Apache软件基金会的孵化器项目。2014年2月,仅仅8个月的时间,Spark已成为Apache软件基金会的顶级开源项目之一。同月,大数据公司Cloudera宣称将加大对Spark框架的投入。

2、Spark的特点

(1)快速

逻辑回归算法一般需要多次迭代。分别使用Hadoop MapReduce和Spark运行逻辑回归算法,Spark的运行速度是Hadoop MapReduce运行速度的100多倍。Spark在内存中的运行速度是Hadoop MapRdeuce运行速度的100多倍,在磁盘上是10多倍。

【Spark与Hadoop MapRdeuce在运行速度上差异较大的原因:Spark的中间数据存放于内存中,有更高的迭代运算效率,而Hadoop MapReduce每次迭代的中间数据存放于HDFS中,涉及硬盘的读写,运算效率相对较低】

(2)易用

Spark支持使用Scala、Python、Java、R等语言快速编写应用。

(3)通用

Spark可以与SQL语句、实时计算及其他复杂的分析计算进行良好的结合。Spark框架包含多个紧密集成的组建,包括Spark SQL(即席查询)、Spark Streaming(实时流处理)、Spark MLlib(机器学习库)、Spark GraphX(图计算)。

(ps:Spark支持在一个应用中同时使用这些组件,Spark可极大的减少平台部署、开发和维护的人力和物力成本,相较于Hadoop的MapReduce框架,在性能和方案统一性方面都有着极大的优势)

(4)随处运行

用户可以使用Spark的独立集群模式运行Spark,也可以在亚马逊弹性计算云、Hadoop YARN资源管理器或者Apache Mesos上运行Spark。

(5)代码简洁

Spark支持使用Scala、Python等语言编写代码。

三、Spark的生态圈

1、生态圈简介

Spark生态圈也称为伯克利数据分析栈(Berkeley Data Analytics Stack,BDSA),由AMPLab打造,致力于在算法(Algorithm)、机器(Machine)、人(People)之间通过大规模集成展现大数据应用的平台。Spark生态圈的大部分软件都是开源软件。

2、特点

Spark生态圈以Spark Core为核心,从HDFS、Amazon S3和HBase等持久层读取数据,以MESS、YARN和自身携带的Standalone为资源管理器调度Job完成Spark应用程序的计算。 这些应用程序可以来自于不同的组件,如Spark Shell/Spark Submit的批处理、Spark Streaming的实时处理应用、Spark SQL的即席查询、BlinkDB的权衡查询、MLlib/MLbase的机器学习、GraphX的图处理和SparkR的数学计算等等。

Spark生态圈中重要组件的简介:

  • Spark Core:Spark的核心,提供底层框架及核心支持
  • BlinkDB:一个用于在海量数据上进行交互式SQL查询的大规模并行查询引擎,允许用户通过权衡数据精度缩短查询响应时间,数据的精度将被控制在允许的误差范围内

BlinkDB 使用两个核心思想:

1、一个自适应优化框架,从原始数据随着时间的推移建立并维护一组多维样本;

2、一个动态样本选择策略,选择一个适当大小的示例基于查询的准确性和(或)响应时间需求。

  • Spark SQL:可以执行SQL查询,支持基本的SQL语法和HiveQL语法,可读取的数据源包括Hive、HDFS、关系数据库等
  • Spark Streaming:进行实时数据流式计算
  • MLBase:MLBase是Spark生态圈的一部分,专注于机器学习领域,学习门槛较低。由四部分组成:MLlib、MLI、ML Optimizer和MLRuntime
  • GraphX:在数据量庞大时,GraphX中与图相关的算法,使用户自行编写相关的图计算算法,并且在集群中应用,变得简便,在移动社交关系分析中可以使用图计算相关算法进行处理和分析

跟其他分布式图计算框架相比,GraphX最大的贡献是,在Spark之上提供一栈式数据解决方案,可以方便且高效地完成图计算的一整套流水作业。GraphX最先是伯克利AMPLAB的一个分布式图计算框架项目,后来整合到Spark中成为一个核心组件。GraphX的核心抽象是Resilient Distributed Property Graph,一种点和边都带属性的有向多重图。它扩展了Spark RDD的抽象,有Table和Graph两种视图,而只需要一份物理存储

  • SparkR:SaprkR是AMPLab发布的一个R语言开发包,使得R语言编写的程序不只可以在单机运行,也可以作为Spark的作业运行在集群上,极大地提升了R语言的数据处理能力

SparkR的几个特性:

l  提供了Spark中弹性分布式数据集(RDD)的API,用户可以在集群上通过R shell交互性的运行Spark job。

l  支持序化闭包功能,可以将用户定义函数中所引用到的变量自动序化发送到集群中其他的机器上。

l  SparkR还可以很容易地调用R开发包,只需要在集群上执行操作前用includePackage读取R开发包就可以了,当然集群上要安装R开发包。

3、Spark的应用场景

  • 低延时的海量数据计算需求,针对的是Spark Core的应用
  • 低延时SQL交互查询需求,针对的是Spark SQL的应用
  • 准实时(秒级)海量数据计算需求,针对的是Spark Streaming的应用

四、Map Reduce的运行框架

1、什么是mapreduce

首先让我们来重温一下 hadoop 的四大组件:
HDFS:分布式存储系统
MapReduce:分布式计算系统
YARN: hadoop 的资源调度系统
Common: 以上三大组件的底层支撑组件,主要提供基础工具包和 RPC 框架等

Mapreduce 是一个分布式运算程序的编程框架,是用户开发“基于 hadoop 的数据分析应用”的核心框架
Mapreduce 核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个 hadoop 集群上。

MapReduce 本质就是两个过程:Map切分 和 reduce聚合。

2、MapReduce程序的运行模式

(1)本地运行模式:在当前的开发环境模拟MapReduce执行环境,处理的数据及输出结果在本地操作系统。

(2)集群运行模式:把MapReduce程序打成一个jar包,提交至YARN集群上去运行任务。由于YARN集群负责资源管理和任务调度,程序会被框架分发到集群中的节点上并发地执行,因此处理的数据和输出结果都在HDFS中。

集群运行模式只需要将MapReduce程序打成jar包上传至集群即可,比较简单。

3、MapReduce的工作原理

  通过Client、JobTrask和TaskTracker的角度来分析MapReduce的工作原理。

五、Spark与MapReduce的区别

1、内存计算

spark 将数据存储在内存中进行计算;MapReduce 将数据存储在磁盘上。由于内存访问速度更快,spark 在处理迭代计算和交互式查询等工作负载时通常比 MapReduce 更高效。

Spark 基于内存的计算:

Spark中我们有一种优化策略:移动计算、不移动数据。旨在减少数据传输的开销提高计算效率。其核心思想是将计算任务尽可能的放在数据所在的节点上执行,而不是将数据传输到计算节点。具体来说,包括下面两个方面:

1. 数据本地性:

         Spark 会尽量将计算任务分配到存储有数据的节点上,以利用数据的本地性。这样可以减少数据传输的开销。通过在数据所在节点上执行计算任务,可以避免将数据传输到其他节点,从而提高计算性能。

2. 任务调度:

        Spark 不会移动实际的数据。数据仍然保留在存储节点上,只有计算任务被分发到存储数据的节点上执行。

MapReduce基于磁盘的计算:

1. 数据读取:

        输入数据从磁盘读取到内存中进行处理。也就是说,每次需要处理数据时,都需要从磁盘读取相应的数据块到内存中进行计算操作。

2. 中间结果存储:

        MapReduce 框架会将 Map 和 Reduce 阶段的中间结果存储在磁盘上。在 Map 阶段,将 Map 任务的输出写入磁盘中的临时文件。在 Reduce 阶段,Reduce 任务会从磁盘上读取中间结果,并根据键值对进行合并和排序。

3. 数据持久性:

        将数据存储在持久化的磁盘介质上,及时在节点故障或计算过程中断的情况下,数据也能够持久保存。这样可以确保数据的可靠性和容错性。

2、执行速度

        Spark 的内存计算特性和基于DAG有向无环图 的执行模型,通常比 MapReduce 更快。Spark可以在内存中保留数据和计算结果,并通过多个任务合并为更少的阶段来减少磁盘的读写开销。

3、API 和编程模型

        Spark提供了丰富的API,包括 scala、Java、Python等。开发起来更加灵活、表达能力更强。而 MapReduce 使用 Java 编程语言来编写 Map 和 Reduce 函数,需要手动编写更多的代码来实现处理逻辑。

4、扩展性

        Spark 有更好的扩展性,可以方便的与其他数据处理框架和工具集成。如:Spark Streaming用于流处理、Spark SQL 用于查询和结构化数据处理、Spark MLlib用于机器学习等。

5、容错性

        Spark提供了弹性式分布数据集RDD,具有自动容错和数据恢复机制。能够在节点故障时重新计算丢失的数据。

        MapReduce 需要在每个任务的开始和结束时将数据写入磁盘,因此在故障情况下需要重新启动整个计算。

六、冷备、热备和温备

  • 冷备(离线备份):在数据库停止时进行备份。读写操作均不可进行
  • 热备(在线备份):在数据库运行时直接备份,对数据库操作没有任何影响。读写操作均可执行
  • 温备:在数据库运行时加全局读锁备份,保证了备份数据的一致性,但对性能有影响。读操作可执行;但写操作不可执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值