大数据处理系统

只愿长相守 提交于 2020-03-12 08:29:04

大数据处理系统可以分为批式(batch)大数据和流式(streaming)大数据两类。其中,批式大数据又被称为历史大数据,流式大数据又被称为实时大数据。
目前主流的三大分布式计算系统Hadoop、Storm、Spark被广泛运用于大数据领域。
批处理大数据系统代表:Hadoop
注:这类系统虽然可对完整大数据集实现高效的即席查询,但无法查询到最新的实时数据,存在数据迟滞高等问题
流处理大数据系统代表:Spark Streaming、Storm(计算系统)
注:此类系统可以对最新实时数据实现高效预设分析处理模型的查询,数据迟滞低

1、分布式计算架构Hadoop

Hadoop作为分布式系统的基础架构,数据处理工作在硬盘层面,借助HDFS(分布式文件系统),可以将架构下每一台电脑中的硬盘资源聚集起来,不论是存储计算还是调用都可以视为一块硬盘使用。之后使用集群管理和调度软件YARN,相当于Windows操作系统,最后利用Map/Reduce计算框架就可以在这上面进行计算编程。从而大幅降低了整体计算平台的硬件投入成本。

2、流数据处理Spark和Storm

由于Hadoop的计算过程放在硬盘,受制于硬件条件限制,数据的吞吐和处理速度明显不如使用内存来的快。于是Spark和Storm开始登上舞台。
Spark和Storm两者最大的区别在于实时性:Spark是准实时,先收集一段时间的数据再进行统一处理;而Storm则是完全实时,来一条数据就处理一条。
(1)spark streaming和storm的对比:
Storm实时处理方式所带来的缺点是:不论离线批处理,高延迟批处理还是交互式查询都不如Spark框架。Spark实时计算延迟度是秒级,Storm的实时计算延迟度是1ms(0.001秒)。
1、使用范围/吞吐量对比:Storm以数据记录为最小单位进行处理和容错,单条记录处理的成本较高。spark streaming首先将数据切分成一定时间范围内Duration的数据集,然后积累一批(batch)Duration数据集后单独启动一个任务线程处理。这种方式大大提供了spark streamming流式计算处理的吞吐量。
2、容错比较。由于storm用于传统关系型数据库类,以数据记录为单位容错,所以一条条数据恢复显然很慢。而spark streamming借助于spark核心提供了从DAG重新调度任务和并行,能快速的完成数据从故障中的恢复工作。
注:Spark Streaming是Spark上的一个流式处理框架,可以面向海量数据实现高吞吐量、高容错的实时计算。更适用于大数据背景。
(2)Spark Streaming与Storm的应用场景
适用Storm的场景:
1)需要纯实时,不能忍受1秒以上延迟的场景下使用,比如实时金融系统,要求纯实时进行金融交易和分析
2)对于实时计算的功能中,要求可靠的事务机制和可靠性机制,即数据的处理完全精准,一条也不能多,一条也不能少,也可以考虑使用Storm
3)若还需要针对高峰低峰时间段,动态调整实时计算程序的并行度,以最大限度利用集群资源(通常是在小型公司,集群资源紧张的情况),也可以考虑用Storm
4)如果一个大数据应用系统,它就是纯粹的实时计算,不需要在中间执行SQL交互式查询、复杂的transformation算子等,那么用Storm是比较好的选择
适用Spark Streaming的场景:
1)如果对上述适用于Storm的三点,一条都不满足的实时场景,即:不要求纯实时,不要求强大可靠的事务机制,不要求动态调整并行度,那么可以考虑使用Spark Streaming
2)考虑使用Spark Streaming最主要的一个因素,应该是针对整个项目进行宏观的考虑,即:如果一个项目除了实时计算之外,还包括了离线批处理、交互式查询等业务功能,而且实时计算中,可能还会牵扯到高延迟批处理、交互式查询等功能,那么就应该首选Spark生态,用Spark Core开发离线批处理,用Spark SQL开发交互式查询,用Spark Streaming开发实时计算,三者可以无缝整合,给系统提供非常高的可扩展性。

3、Spark与Hadoop

Hadoop有两个核心模块,分布式存储模块HDFS和分布式计算模块MapReduce
Spark本身并没有提供分布式文件系统,因此Spark的分析大多依赖于Hadoop的分布式文件系统HDFS
Hadoop的MapReduce与Spark都可以进行数据计算,而相比于MapReduce,Spark的速度更快并且提供的功能更加丰富
市场出现新兴的诉求(机器学习与人工智能),Spark更好的解决机器学习的困境。
关系如下图:
在这里插入图片描述
优劣对比:
(1)Spark把中间数据放到内存中,迭代运算效率高。MapReduce中计算结果保存到磁盘上,这样势必会影响整体速度。而Spark支持分布式并行计算的编程框架,提高了处理效率。
(2)Spark容错性高。
Spark引进了弹性分布式数据集RDD的抽象,如果数据集一部分丢失,则可以根据数据衍生过程对它们进行重建。另外在RDD计算时可以通过CheckPoint来实现容错。
MapReduce使用nodemanager节点,它为 Appmaster节点提供了心跳(heartbeat)。如果没有心跳,那么Appmaster节点重新调度所有将执行的操作和正在进行的操作,交给另一个nodemanager节点。这种方法在提供容错性方面很有效,可是会大大延长某些操作(即便只有一个故障)的完成时间。
(3)Spark更加通用。
Hadoop提供了Map和Reduce两种操作,Spark提供的数据集操作类型有很多种,大致分为:Transformations和Actions两大类。另外各个处理节点之间的通信模型不再像Hadoop只有Shuffle一种模式,用户可以命名、物化,控制中间结果的存储、分区等。
注:Transformations包括Map、Filter、FlatMap、Sample、GroupByKey、ReduceByKey、Union、Join、Cogroup、MapValues、Sort和PartionBy等多种操作,同时提供Count, Actions包括Collect、Reduce、Lookup和Save等操作。
(4)交互模式
Spark还有一种交互模式,那样开发人员和用户都可以获得查询和其他操作的即时反馈。MapReduce没有交互模式,附加有Hive和Pig等模块,使用MapReduce会容易一点。

4、混合架构

每一种架构都有其自身的独特优缺点,就像Hadoop,尽管数据处理的速度和难易度都远比不过Spark和Storm。但硬盘断电后数据可以长期保存,在处理需要长期存储的数据时还是需要借助Hadoop。且Hadoop具有非常好的兼容性,非常容易的同Spark和Storm进行结合,从而满足公司的不同需求。
目前来看Hadoop,Spark和Storm不能说谁取代谁。
例如:Spark的Hadoop YARN模式.
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!