作者:菠萝和尚 | 来源:互联网 | 2023-08-24 12:00
1、什么是hadoop(搭建集群)
Hadoop是由java语言编写的,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架,其核心部件是HDFS与MapReduce。
HDFS是一个分布式文件系统:引入存放文件元数据信息的服务器Namenode和实际存放数据的服务器Datanode,对数据进行分布式储存和读取。
MapReduce是一个计算框架:MapReduce的核心思想是把计算任务分配给集群内的服务器里执行。通过对计算任务的拆分(Map计算/Reduce计算)再根据任务调度器(JobTracker)对任务进行分布式计算
应用:目前比较流行的广告推荐,个性化广告推荐
2.什么是storm
Storm是Twitter开源的分布式实时大数据处理框架,被业界称为实时版Hadoop。随着越来越多的场景对Hadoop的MapReduce高延迟无法容忍,比如网站统计、推荐系统、预警系统、金融系统(高频交易、股票)等等,大数据实时处理解决方案(流计算)的应用日趋广泛,目前已是分布式技术领域最新爆发点,而Storm更是流计算技术中的佼佼者和主流。
按照storm作者的说法,Storm对于实时计算的意义类似于Hadoop对于批处理的意义。Hadoop提供了map、reduce原语,使我们的批处理程序变得简单和高效。同样,Storm也为实时计算提供了一些简单高效的原语,而且Storm的Trident是基于Storm原语更高级的抽象框架,类似于基于Hadoop的Pig框架,让开发更加便利和高效。
应用:广告推荐系统、金融系统、预警系统、网站统计(实时销量、流量统计,如淘宝双11效果图)、交通路况实时系统等等。
3、spark
RDD替代了hadoop的MapReduce
Spark Core:包含Spark的基本功能;尤其是定义RDD的API、操作以及这两者上的动作。其他Spark的库都是构建在RDD和Spark Core之上的
Spark SQL:提供通过Apache Hive的SQL变体Hive查询语言(HiveQL)与Spark进行交互的API。每个数据库表被当做一个RDD,Spark SQL查询被转换为Spark操作。
Spark Streaming(其中spark中有两个:sparkStreaming和Structured Streaming):对实时数据流进行处理和控制。Spark Streaming允许程序能够像普通RDD一样处理实时数据
MLlib:一个常用机器学习算法库,算法被实现为对RDD的Spark操作。这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作。
GraphX:控制图、并行图操作和计算的一组算法和工具的集合。GraphX扩展了RDD API,包含控制图、创建子图、访问路径上所有顶点的操作
Spark提供了一个全面、统一的框架用于管理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理的需求
官方资料介绍Spark可以将Hadoop集群中的应用在内存中的运行速度提升100倍,甚至能够将应用在磁盘上的运行速度提升10
4、Filink
Apache Flink 是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时(Flink Runtime),提供支持流处理和批处理两种类型应用的功能。现有的开源计算方案,会把流处理和批处理作为两种不同的应用类型,因为他们它们所提供的SLA是完全不相同的:流处理一般需要支持低延迟、Exactly-once保证,而批处理需要支持高吞吐、高效处理,所以在实现的时候通常是分别给出两套实现方法,或者通过一个独立的开源框架来实现其中每一种处理方案。例如,实现批处理的开源方案有MapReduce、Tez、Crunch、Spark,实现流处理的开源方案有Samza、Storm。 Flink在实现流处理和批处理时,与传统的一些方案完全不同,它从另一个视角看待流处理和批处理,将二者统一起来:Flink是完全支持流处理,也就是说作为流处理看待时输入数据流是无界的;批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的。基于同一个Flink运行时(Flink Runtime),分别提供了流处理和批处理API,而这两种API也是实现上层面向流处理、批处理类型应用框架的基础。
Flink 与开源大数据处理生态系统中的许多项目都有集成。Flink 可以运行在 YARN 上,与 HDFS 协同工作,从 Kafka 中读取流数据,可以执行 Hadoop 程序代码,可以连接多种数据存储系统。
5、Blink
就是FLINK的企业定制版
Spark的数据模型是弹性分布式数据集 RDD(Resilient Distributed Dattsets),这个内存数据结构使得spark可以通过固定内存做大批量计算。初期的Spark Streaming是通过将数据流转成批(micro-batches),即收集一段时间(time-window)内到达的所有数据,并在其上进行常规批处,所以严格意义上,还不能算作流式处理。但是Spark从版本开始推出基于 Continuous Processing Mode的 Structured Streaming,支持按事件时间处理和端到端的一致性,但是在功能上还有一些缺陷,比如对端到端的exactly-once语义的支持。
Blink是统一的流和批处理框架,基本数据模型是数据流,以及事件(Event)的序列,Blink从设计之初秉持了一个观点:批是流的特例。每一条数据都可以出发计算逻辑,那么Blink的流特性已经在延迟方面占得天然优势。
Flink和Spark都是由Scla和Java混合编程实现,Spark的核心逻辑由Scala完成,而Flink的主要核心逻辑由Java完成。在对第三方语言的支持上,Spark支持的更为广泛,Spark几乎完美的支持Scala,Java,Python,R语言编程。
开源的 Blink 代码作为 Flink 的一个 branch 直接推回到 Apache Flink 项目中是最合适的方式。并且我们和社区也一起讨论规划出一套能够快速 merge Blink 到 Flink master 中的方案