本节书摘来自华章社区《spark大数据分析实战》一书中的第1章,第1.1节初识spark,作者高彦杰 倪亚宇,更多章节内容可以访问云栖社区“华章社区”公众号查看
1.1 初识spark
spark是基于内存计算的大数据并行计算框架,因为它基于内存计算,所以提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将spark部署在大量廉价硬件之上,形成集群。
1.?spark执行的特点
hadoop中包含计算框架mapreduce和分布式文件系统hdfs。
spark是mapreduce的替代方案,而且兼容hdfs、hive等分布式存储层,融入hadoop的生态系统,并弥补mapreduce的不足。
(1)中间结果输出
spark将执行工作流抽象为通用的有向无环图执行计划(dag),可以将多stage的任务串联或者并行执行,而无需将stage的中间结果输出到hdfs中,类似的引擎包括flink、dryad、tez。
(2)数据格式和内存布局
spark抽象出分布式内存存储结构弹性分布式数据集rdd,可以理解为利用分布式的数组来进行数据的存储。rdd能支持粗粒度写操作,但对于读取操作,它可以精确到每条记录。spark的特性是能够控制数据在不同节点上的分区,用户可以自定义分区策略。
(3)执行策略
spark执行过程中不同stage之间需要进行shuff?le。shuff?le是连接有依赖的stage的桥梁,上游stage输出到下游stage中必须经过shuff?le这个环节,通过shuff?le将相同的分组数据拆分后聚合到同一个节点再处理。spark shuff?le支持基于hash或基于排序的分布式聚合机制。
(4)任务调度的开销
spark采用了事件驱动的类库akka来启动任务,通过线程池的复用线程来避免系统启动和切换开销。
2.?spark的优势
spark的一站式解决方案有很多的优势,分别如下所述。
(1)打造全栈多计算范式的高效数据流水线
支持复杂查询与数据分析任务。在简单的“map”及“reduce”操作之外,spark还支持sql查询、流式计算、机器学习和图算法。同时,用户可以在同一个工作流中无缝搭配这些计算范式。
(2)轻量级快速处理
spark代码量较小,这得益于scala语言的简洁和丰富表达力,以及spark通过external datasource api充分利用和集成hadoop等其他第三方组件的能力。同时spark基于内存计算,可通过中间结果缓存在内存来减少磁盘i/o以达到性能的提升。
(3)易于使用,支持多语言
spark支持通过scala、java和python编写程序,这允许开发者在自己熟悉的语言环境下进行工作。它自带了80多个算子,同时允许在shell中进行交互式计算。用户可以利用spark像书写单机程序一样书写分布式程序,轻松利用spark搭建大数据内存计算平台并充分利用内存计算,实现海量数据的实时处理。
(4)与external data source多数据源支持
spark可以独立运行,除了可以运行在当下的yarn集群管理之外,它还可以读取已有的任何hadoop数据。它可以运行多种数据源,比如parquet、hive、hbase、hdfs等。这个特性让用户可以轻易迁移已有的持久化层数据。
(5)社区活跃度高
spark起源于2009年,当下已有超过600多位工程师贡献过代码。开源系统的发展不应只看一时之快,更重要的是一个活跃的社区和强大的生态系统的支持。
同时也应该看到spark并不是完美的,rdd模型适合的是粗粒度的全局数据并行计算;不适合细粒度的、需要异步更新的计算。对于一些计算需求,如果要针对特定工作负载达到最优性能,还需要使用一些其他的大数据系统。例如,图计算领域的graphlab在特定计算负载性能上优于graphx,流计算中的storm在实时性要求很高的场合要更胜spark streaming一筹。