DT时代,如果你不了解大数据那么注定了你将要落伍,而如果你学习大数据开发而不了解spark,那么也注定一无法成为一名顶尖大数据人才。如今,spark在企业进行大数据布局的过程中扮演着重要的角色,那么究竟是什么原因让spark在DT时代强势崛起呢?
首先,我们来先来了解一下spark的起源。Apache Spark是在2012年开源的,两年后又发布了第一个稳定版本,它很快就成为大数据领域的杰出工具。从那时起,大数据公司采用Spark就的增长速度引人注目。
其次,我们来具体分析spark为何能够在大数据时代强势崛起。
第一:spark的内存处理特性
毫无疑问,内存的处理是Spark的一个关键特性,从技术上,处理速度远远超过传统大数据处理的工具性能。但是内存中处理并不是一个新的概念,而且有一长串的数据库和数据处理产品,它们是基于内存处理设计的。Redis和VoltDB就是两个例子。另一个例子是Apache Ignite,它也具备内存处理能力,以增加WAL(前写日志)来处理大数据查询和ACID(原子性、一致性、隔离、持久性)事务的性能。显然,单内存处理的功能不足以区分Spark和其他产品。那么,在竞争激烈的大数据处理领域,什么让Spark脱颖而出呢?
第二:以速度见长的BI/ OLAP首先, Spark成功地捕捉到了其他产品很少的优势,从某种意义上说,对高要求的高速BI(商业智能)分析的需求开始模糊了OLAP(在线分析处理)和OLTP(在线事务处理)世界之间的界限。一方面,除了流行的分布式文件系统(HDFS)之外,我们还有分布式计算平台,比如Hadoop提供MapReduce编程模型。虽然MapReduce是一个很好的数据处理工具,但它是一个不能及时交付结果的批处理过程。另一方面,有大量的数据处理产品满足OLTP的需要。这类产品的例子包括HBase的Phoenix、Apache Drillhe Ignite。其中一些产品提供了查询引擎,它可以将标准SQL的事务性处理功能模拟到基于键值的或基于列的数据库中。在大数据的需求中,缺失的是一种以速度进行批量OLAP的产品。确实有一些BI分析/ OLAP产品,比如Apache Kylin和Presto。这些产品中的一些设法填补了空白,在很大程度上取得了一些成功。但Spark已经证明了成功同时解决了速度和规模。然而,Spark并不是“速度+规模”战斗中唯一的赢家。与Apache Spark同时出现的,Impala(现在是一个Apache孵化器项目)在其最近发布的速度和规模上都表现出色。然而,它从未像Spark那样获得如此高的人气。因此,Spark中的其他东西一定使它更吸引当代软件工程师。
第三:Spark是“惰性的”
在Spark的操作性能中扮演关键角色的基本设计原则是“懒惰”,Spark是惰性的,因为它可以推迟实际执行的转换,直到它接收到将返回到驱动程序的结果数据的请求,即在活动执行上下文中服务的已提交应用程序。这样的执行策略可以显著减少磁盘和网络I / O,使其能够在规模上表现良好。例如,在MapReduce过程中,不是返回通过映射生成的大量数据,而是通过reduce来消耗,Spark可以选择只返回从reduce到驱动程序的更小的结果数据。
第四:集群和编程语言支持
作为一个分布式计算框架,健壮的集群管理功能对于水平扩展非常重要。Spark以有效地使用数千个服务器节点的CPU核心而闻名。除了默认的独立集群模式之外,Spark还支持其他集群管理器,包括Hadoop YARN和Apache Mesos。在编程语言上,Spark支持Scala、Java、Python和R,Scala和R都是函数式编程语言,并且越来越多地被技术行业采用。在Scala中编程的Spark感觉就像在Scala里编写的home,而R则主要是为数据科学分析而定制的。
第五:SQL和用户定义函数的功能
符合sql的查询能力是Spark的重要组成部分,最近发行的Spark API支持SQL 2003标准。最受欢迎的查询特性之一是窗口函数,它甚至在一些主要的基于sql的RDBMS(如MySQL)中都没有。窗口函数允许在一个滑动窗口中排列或聚合数据行,从而帮助最小化昂贵的操作,例如加入DataFrames。Spark API的另一个重要特性是用户定义函数(UDF),它允许创建自定义函数,利用编程语言中可用的大量通用函数来应用于数据列。虽然有一些针对DataFrame API的特定功能,但是UDF可以扩展到使用几乎所有可用的方法,比如说,用Scala编程语言来组装自定义函数。
第六:Spark流
数据流是构建OLAP系统之上的需求的场景中,必要的集成工作可能具有挑战性。这样的集成不仅需要涉及第三方流媒体库,而且还需要确保这两个完全不同的api能够合作并可靠地解决几乎实时和批处理之间的巨大差异。Spark提供了一个提供容错分布式流媒体功能的流媒体库。它将小的连续数据块处理为一个RDD序列,这是Spark的核心数据结构。固有的流媒体功能无疑减轻了必须将高延迟批处理任务与低延迟流处理程序集成在一起的负担。
第七:可视化和超越
最后,Spark的基于web的可视化工具揭示了与数据处理作业的执行有关的详细信息。这些工具不仅显示了集群中各个工作节点上的任务的分解,还提供了单个执行过程的生命周期的详细信息。此外,Spark以DAG(定向acyclic图)形式的复杂作业流程的可视化提供了深入了解如何执行作业的方法。它在故障诊断或性能调优应用程序方面特别有用。
如今spark备受大数据行业的关注就是因为其这些超强的特性,当然,这也源于spark 不断成长和发展,其强大的能力在大数据领域能够扮演更多的角色,也就自然决定了其在DT时代能够快速的崛起。