背景
产生于加州大学伯克利分校AMP实验室,2013年6月成为Apache成为孵化项目,Spark使用Scala语言进行实现,Scala 建立在JAVA之上
设计理念 :改善 MAP REDUCE 的弱点: 交互式和迭代式 ,在集群多点内存中运行的分布式计算 ,容错数据集合,DAG
为什么用SPARK
先进的大数据分布式编程和计算框架
试图替代HADOOP (SPARK 可以独立于HADOOP)
内存分布式计算: 运行速度快
可以用 不同语言编程 (JAVA, SCALA, R and PYTHON)
可以从不同的数据源取数据 (HDFS、Cassandra、HBase)
实现不同的大数据功能:Spark Core、Spark SQL、Spark Streaming,Spark MLIB 以及 GraphX
SPARK 的几种运行模式
批处理 – 用于大规模的分布式数据处理 如:
spark-submit predict.py
spark-submit –class “SparkPi” target/scala-2.10/realtime-event_2.10-1.0.jar
流方式 – Spark流用于传送和处理实时数据
交互方式:常用于处理在内存中的大块数据.较低的延迟性 如:
spark-shell
pyspark
SPARK 的数据读取和存储
Spark可以从以下系统访问数据
Hadoop HDFS 以及HIVE, HBASE 等生态圈部件
Amazon S3
Cassandra, Mongodb
其他流工具如 Flume, Kafka所支持的各协议如 AVRO
另外Spark可以支持一下文件格式
Text (包括CSV JSON 等)
SequenceFiles
AVRO
Parquet
SPARK部件和应用平台
Spark 的主要部
SPARK CORE:包含spark的主要基本功能。所有跟RDD有关的API都出自于SPARK CORE。
Spark SQL: Spark 中用于结构化数据处理的软件包。用户用户可以在Spark环境下用 SQL语言处理数据。
Spark Streaming:Spark 中用来处理流数据的部件
MLlib:Spark 中用来进行机器学习和数学建模的软件包
GraphX:Spark 中用来进行图计算(如社交媒体关系) 的库函数
Cluster Managers:Spark 中用来管理机群或节点的软件平台.这包括Hadoop YARN, Apache Mesos, 和 Standalone Scheduler (Spark 自带的用于单机系统)
SPARK CORE
Spark生态圈的核心:
负责从HDFS、Amazon S3和HBase等持久层读取数据
在、YARN和Standalone为资源管理器调度Job完成分布式 计算
包括两个重要部件
有向无环图(DAG)的分布式并行计算框架
容错分布式数据RDD (Resilient Distributed Dataset)
总结SPARK CORE
SPARK CORE 就是 SPARK 功能调度中心,其中包括任务调动, 内存管理,容错管理及存储管理。同时也是一些列应用程序 的集中地。
这些应用程序用来定义和管理RDD (Resilient Distributed Dataset).
RDD代表了一系列数据集合分布在机群的内存中。SPARK CORE 的任务是对这些数据进行分布式计算。
解释RDD
弹性分布式数据集分布在不同集群节点的内存中
可以理解成一大数组
数组的每一元素是RDD的一分区
RDD的每一分区是一数据块
一个RDD可以分布并被运算在多台计算机节点的内存及硬盘中
RDD数据块可以放在磁盘上也可放在内存中(取决于设置)
如出现缓存失效或丢失,RDD的分区可以重新计算刷新
RDD本身是不能被修改的
但RDD可以通过API (底层采用Scala)被变换生成新的RDD
有两类对RDD的操作:变换和操作
RDD 编程
SPARK RDD 的API实现了MapReduce的基本map函数和reduce函数 及计算模型,还提供更为丰富的函数如filter、join、groupByKey 等。另外SPARK SQL 可以用来操作有数据结构的RDD 即 SPARK DATA FRAME
解释DAG
有向无环图(DAG,Directed Acycle graph)的分布式并行计算框架
反应RDD之间的依赖关系
提供Cache机制来支持多次迭代计算或者数据共享以减少迭代计算 之间读取数据局的开销
根据用户端对RDD的指令进行优化以减少系统开销
SPARK和MAPREDUCE
SPARK RDD 的运算原理和MR是一样的
但是它们的运行方式不同
MR的运算是内存磁盘交互读写.不能再内存中共享数据
MR弱点:replication, serialization和 disk IO
RDD可以被共享和持久化
大数据运算经常是交互式和迭代式的。所以数据的重用性很 重要。而MR的磁盘交互读写带来I/O 开销导致速度减慢