大数据领域技术演变史
一、大数据技术划分
二、流式计算历史演进
目前主流的流式计算框架有Storm/Jstorm、Spark Streaming、Flink/Blink三种。
Apache Storm是一个分布式实时大数据处理系统。Storm设计用于在容错和水平可扩展方法中处理大量数据。它是一个流数据框架,具有最高的摄取率。在Storm中,需要先设计一个实时计算结构,我们称之为拓扑(topology)。之后,这个拓扑结构会被提交给集群,其中主节点(master node)负责给工作节点(worker node)分配代码,工作节点负责执行代码。在一个拓扑结构中,包含spout和bolt两种角色。数据在spouts之间传递,这些spouts将数据流以tuple元组的形式发送;而bolt则负责转换数据流。Jstorm则是阿里巴巴使用Java语言复刻的Apache Storm,号称性能四倍于Apache Storm,于2016年停止更新。
Spark Streaming,即核心Spark API的扩展,不像Storm那样一次处理一个数据流。相反,它在处理数据流之前,会按照时间间隔对数据流进行分段切分。Spark针对连续数据流的抽象,我们称为DStream(Discretized Stream)。DStream是小批处理的RDD(弹性分布式数据集),RDD则是分布式数据集,可以通过任意函数和滑动数据窗口(窗口计算)进行转换,实现并行操作。
Apache Flink(当前主流框架)是针对流数据+批数据的计算框架。把批数据看作流数据的一种特例,延迟性较低(毫秒级),且能够保证消息传输不丢失不重复。Flink创造性地统一了流处理和批处理,作为流处理看待时输入数据流是无界的,而批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的。Flink程序由Stream和Transformation这两个基本构建块组成,其中Stream是一个中间结果数据,而Transformation是一个操作,它对一个或多个输入Stream进行计算处理,输出一个或多个结果Stream。
这三种计算框架的对比如下:
三、离线计算历史演进
离线计算就是在计算开始前已知所有输入数据,输入数据不会产生变化。离线计算领域主要有Hadoop MapReduce、Spark、Hive/ODPS等计算框架。
使用Hadoop MapReduce进行数据处理,需要用java、python等语言进行开发调试,分别编写Map、Reduce函数,并需要开发者自己对于Map和Reduce过程做性能优化,开发门槛较高,计算框架提供给开发者的助益并不多。在性能优化方面,常见的有在做小表跟大表关联的时候,可以先把小表放到缓存中(通过调用MapReduce的api),另外可以通过重写Combine跟Partition的接口实现,压缩从Map到reduce中间数据处理量达到提高数据处理性能。
Spark基于内存计算的准MapReduce,在离线数据处理中,一般使用Spark SQL进行数据清洗,目标文件一般是放在HDFS或者NFS上。
Hive是一种建立在Hadoop文件系统上的数据仓库架构,并对存储在HDFS中的数据进行分析与管理。Hive在Hadoop上架了一层SQL接口,可以将SQL翻译成MapReduce去Hadoop上执行,这样就使得数据开发和分析人员很方便的使用SQL来完成海量数据的统计和分析,而不必使用编程语言开发MapReduce,从而降低了数据开发的门槛。
目前业内离线数据处理,阿里的Odps平台(阿里内部的离线处理平台)底层利用自己的一套Hadoop集群每天提供PB级的数据处理,华为目前还是在基于Hadoop集群云化ETL处理数据,而字节跳动的数据平台在离线计算方向也主要运用Hive。
综合来看,Hive的学习成本最低,各大公司应用最广泛。
四、列式存储NOSQL数据库历史演进
NOSQL的概念博大精深,有键值(Key-Value)数据库、面向文档(Document-Oriented)数据库、列存储(Wide Column Store/Column-Family)数据库、图(Graph-Oriented)数据库等,本章节主要讲述列存储数据库中最流行的HBase及其替代品Lindorm。
HBase是一个基于HDFS的、分布式的、面向列(列族)的非关系型数据库(NOSQL)。HBase巧妙地将大而稀疏的表放在商用的服务器集群上,单表可以有十亿行百万列,而且可以通过线性方式从下到上增加节点来进行横向扩展,读写性能优秀,支持批量导入,无需分库分表,存储计算分离,成本低,弹性好。
Lindorm是新一代面向在线海量数据处理的分布式数据库,适用于任何规模、多种模型的云原生数据库服务,其基于存储计算分离、多模共享融合的云原生架构设计,具备弹性、低成本、稳定可靠、简单易用、开放、生态友好等优势。
总体来说,Lindorm是HBase的升级版本,性能和稳定性等等通通优于HBase,如果需要使用海量数据提供在线服务,可以考虑Lindorm。
五、大数据开发语言历史演进
Scala语言曾是大数据开发的宠儿,行业内热度最高的消息中间件kafka就是使用Scala写就的,而大数据领域杀手级框架Spark也是由Scala编写的。另外,Scala语言函数式编程风格、天然适合处理大规模数据的Lambda表达式、简洁优雅的语法糖、陡峭的学习曲线也深受对代码美感有极致追求的程序员所喜爱。
曾经,Kafka + Scala + Spark + Spark Streaming的技术体系可以通吃批处理和流处理,直到一统批流、学习曲线也更平缓的Flink/Blink出现,彻底打破了这个局面,SQL语言在大数据处理中的占比大大提高。
当前,大数据开发语言可谓百花齐放、各领风骚。其中,SQL语言(编写Flink/Blink、Hive任务)在数据仓库建设和数据分析领域应用广泛,JVM语系(Java、Scala为主)在Hadoop生态中举足轻重并且是数据平台开发的首选,Python在人工智能方向极为受宠,R语言则是数据建模和数据可视化的利器。每种语言都有自己的适用场景,建议根据自身的工种和兴趣来做选择。
六、大数据学习建议
基于上述大数据技术栈演进史的分析,建议对数据开发感兴趣的同学学习以下大数据组件:
1)流式、实时计算:Flink
2)离线计算:Hive
3)列式存储NOSQL数据库:Lindorm
原文来自:大数据技术漫谈 ——从Hadoop、Storm、Spark、HBase到Hive、Flink、Lindorm - 知乎 (zhihu.com)