目录
在大数据领域,Spark 是一款极为重要的计算引擎。本文将详细介绍 Spark 的相关知识,包括其分布式思想、自身简介、各组成部分、与其他计算引擎的对比、应用场景、运行模式、计算步骤以及它比 MapReduce 快的原因,并会涉及到 Spark 的单机模式安装和一些简单测试案例。
一、分布式的思想
(一)存储
在大数据存储中,没有一台能容纳所有数据的超级计算机。以存储 3T 文件为例,会将其拆分成多个小文件,比如每 500M 一个小文件,然后将这些小文件存储在不同的机器上,HDFS 就是这样的分布式存储系统,阿里巴巴的 FastDFS 也有类似功能。
(二)计算
- 分:对于大型计算任务,将其拆分成多个小任务,每台机器处理一个小任务,实现并行处理。
- 合:最后将各个小任务的结果合并,生成最终结果返回。像 MapReduce(Hive)就是这种分布式计算模式。需要注意的是,Spark 主要用于计算,不能解决存储问题。如果掌握了 Spark,之前的一些计算引擎可以被替代,Spark 可用于离线计算和准实时计算(目前实时计算更常用 Flink)。计算引擎有很多种,如 mapreduce (hive SQL)、impala、presto、spark、flink 等,而且存储通常还是依靠 HDFS。
- 发展历程:第一代计算引擎 MapReduce 用廉价机器实现分布式大数据处理;第二代计算引擎 Tez 基于 MR 优化了 DAG,性能更好;第三代计算引擎 Spark 是优先使用内存式计算引擎,在国内是主要应用的离线计算引擎;第四代计算引擎 Flink 是实时流式计算引擎,是国内目前最主流的实时计算引擎,计算引擎就如同汽车的发动机或计算机中的 CPU。
二、Spark 简介
(一)发展历程
Spark 诞生于 2009 年,是伯克利大学 AMPLab 的研究性项目。2014 年 2 月成为 Apache 顶级项目,同年 5 月发布 1.0 正式版本,2018 年发布的 2.4.0 版本使其成为全球最大的开源项目之一,目前我们学习的是 3.x 版本。可以在 DataBricks 官网(https://databricks.com/spark/about)和 apache 分配的网站(https://spark.apache.org/)获取更多信息。Spark 的诞生是因为 MR 计算引擎速度慢,MR 计算基于磁盘,而 Spark 计算基于内存,他是一个基于内存式计算的分布式的统一化的数据分析引擎。
(二)Spark 能做什么?
- 离线数据批处理:类似 MapReduce、Pandas,通过写代码处理离线数据。
- 交互式即时数据查询:类似 Hive、Presto、Impala,使用 SQL 进行即席查询分析,这属于 SQL 类的离线数据处理。
- 实时数据处理:类似 Storm、Flink,可实现分布式实时计算,包括代码类实时计算和 SQL 类实时计算。
- 机器学习开发:能代替传统的一些机器学习工具。
(三)spark 的组成部分
- Spark Core:是 Spark 最核心的模块,可以基于多种语言(Python、SQL、Scala、Java、R,Spark 源码是用 Scala 语言开发的)实现代码类的离线开发,类似 MR。
- Spark SQL:类似 Hive,基于 SQL 进行开发,SQL 语句会转换为 SparkCore 离线程序。
- Spark Streaming:基于 SparkCore 构建的准实时计算模块(目前已逐渐被淘汰)。
- Struct Streaming:基于 SparkSQL 构建的结构化实时计算模块,替代了 Spark Streaming。
- Spark ML lib:机器学习算法库,提供各种机器学习算法工具,可基于 SparkCore 或 SparkSQL 开发。
(四)各大计算引擎的对比
- Impala:集成 Hive 实现数据分析,性能最好,但数据接口少,只支持 Hive 和 Hbase 数据源。它是基于