1. Spark的概述
Apache Spark is a fast and general-purpose cluster computing system. It provides high-level APIs in Java, Scala, Python and R, and an optimized engine that supports general execution graphs. It also supports a rich set of higher-level tools including Spark SQL for SQL and structured data processing, MLlib for machine learning, GraphX for graph processing, and Spark Streaming.
Apache Spark是一个快速的、通用的集群计算系统。它提供Java、Scala、Python和R中的高级api,以及一个支持通用执行图的优化引擎。它还支持一组丰富的高级工具,包括用于SQL和结构化数据处理的Spark SQL、用于机器学习的MLlib、用于图形处理的GraphX和Spark Streaming。
2. 什么是Spark
Spark是一种基于内存的快速、通用、可扩展的大数据分析引擎
3. Spark内置模块
- spark core:实现了spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块;spark core中还包含了对弹性分布式数据集(RDD) 的API定义;
- spark sql:是spark用来操作结构化数据的程序包;对历史数据做交互查询(即席查询:用户根据自己的需求自定义查询);
- spark streaming:是spark提供的对实时数据进行流式计算的组件;
- spark mllib:提供常见的机器学习(ML) 功能的程序库;
- spark graghX:图计算(关注事物本身而且关注事物之间的联系);
- 集群管理器:spark设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计算;为了实现这样的要求,同时获得最大灵活性,spark支持在各种集群管理器(cluster,Manager)上运行,包括Hadoop YARN、Apache Mesos,以及Spark自带的一个简易调度器,叫做独立调度器。
4. Spark的特点
- 快:spark实现了高效的DAG(有向无环图)执行引擎
- 易用:API较为顶层,方便使用
- 通用:spark用于批处理,spark sql 用于交互式查询,spark streaming是实时流处理,spark mllib是机器学习,spark graghX是图计算;这些不同类型的处理都可以在同一个应用中无缝使用
- 兼容性:spark可恶意非常方便的与其他的开源产品进行融合
5. Spark和Hadoop的异同
Hadoop | Spark | |
---|---|---|
类型 | 基础平台,包含计算,存储,调度 | 分布式计算工具 |
场景 | 大规模数据集上的批处理 | 迭代计算,交互式计算,流计算 |
延迟 | 大 | 小 |
易用性 | API较为底层,算法适应性差 | API较为顶层,方便使用 |
价格 | 对机器要求低,便宜 | 对内存有要求,相对较贵 |
6. 运行一个Spark程序
- 启动Driver,创建SparkContext;
- Client提交程序给Driver,Driver想Cluster Manager申请集群资源;
- 资源申请完毕,在Worker中启动Executor;
- Driver将程序转化为Tasks,分发给Executor执行。
角色介绍:
-
Driver:该进程调用spark程序的main方法,并且启动sparkContext
-
主要负责(作用)?
把用户程序转为作业(job)
跟踪Executor的运行状况
为执行器节点调度任务
UI展示应用运行状况
-
启动模式分为两种:
Client:driver在当前的节点运行,driver需要频繁的和汲取通信占用大量的网络带宽,容易挂掉;好处是方便查看日志,便于调试,多用于学习和测试;
Cluster:driver在集群的节点运行,挂掉会自动重启。
-
cluster模式如何查看日志?
聚合日志方式(推荐,比较常用)
web ui(如果你有精力的话,可以去配一下)
分散查看(通常不推荐)
-
-
Diver失败了如何恢复?
在集群模式下,driver失败了自动重启
对driver的元数据做checkpoint
-
-
Cluster Manager:该进程负责和外部集群工具打交道,申请/释放集群资源
-
Worker:该进程是一个守护进程,负责启动和管理Executor
-
Executor:该进程是一个JVM虚拟机,负责进行Spark Task
-
作用:
负责运行组成Spark应用的任务,并将结果返回给驱动器进程;
通过自身的块管理器(Block Manager)为用户程序中要求缓存的RDD提供内存式存储;
RDD是直接缓存在Executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。
-
-
Spark Context:是Spark Core的入口组件,是一个spark程序的入口,是一个元老级API;主要作用是连接集群,创建RDD,累加器,广播变量等。
7. 实时计算框架Spark Streaming,Storm,Flink的区别?
Spark Streaming:批处理
Storm:实时处理;容错性,事务性;单一的框架
Flink:有批处理,实时处理;容错性,事务性;新兴的框架
sparkStreaming是spark里面的一个做流式准实时计算的组件,它使用的数据结构是Dstream,Dstream里面是一连串时间片的rdd。
相比于storm,sparkStreaming在实时性,保证数据不丢失方面都不占用优势;
spark streaming在spark支持者眼中的优势是spark Streaming具有高吞吐性;
sparkStreaming相比于storm的优势是sparkStreaming可以和spark core,spark sql无缝整合。
8. Spark的资源调度
模式 | Spark安装机器数 | 需启动的进程 | 所属者 |
---|---|---|---|
本地 | 1 | 无 | Spark |
standalone | 3 | Master及Worker | Spark |
spark on yarn | 1 | YARN及HDFS | Hadoop |
spark on mesos | / | Spark直接连接Mesos | / |
9. Spark为什么比MapReduce快?
- 基于内存计算,减少低效的磁盘交互;
- Spark实现了DAG引擎,高效的调度算法,基于DAG;
- Spark的容错机制Lineage,精华部分就是DAG和Lineage。
10. Spark为什么比Hadoop快?
- 消除了冗余的HDFS读写
- 消除了冗余的MapReduce阶段
- JVM的优化
注:Spark不能代替Hadoop,它仅仅是MapReducer的替代方案
11. Spark中spark-submit脚本的参数有哪些?
参数名 | 参数说明 |
---|---|
–master | master的地址,提交任务到哪里执行 |
–deploy-mode | 在本地(client)启动driver或在cluster上启动,默认是client |
–class | 应用程序的主类,仅针对java或scala应用 |
–name | 应用程序的名称 |
–jars | 用逗号分隔的本地jar包,设置后,这些jar将包含在driver和executor的classpath下 |
–packages | 包含在driver和executor的classpath中的jar的maven坐标 |
–exclude-packages | 为了避免冲突,而指定不包含的package |
–repositories | 远程repository |
–conf PROP=VALUE | 指定 spark 配置属性的值,例如 --conf spark.executor.extraJavaOptions="-XX:MaxPermSize=256m" |
–properties-file | 加载的配置文件,默认为conf/spark-defaults.conf |
–driver-memory | Driver内存,默认1G |
–driver-java-options | 传给driver的额外的java选项 |
–driver-library-path | 传给driver的额外的库路径 |
–driver-class-path | 传给driver的额外的类路径 |
–driver-cores | Driver的核数,默认是1。在yarn或者standalone下使用 |
–executor-memory | 每个executor的内存,默认是1G |
–total-executor-cores | 所有executor总共的核数。仅仅在mesos或者standalone下使用 |
–num-executors | 启动的executor数量。默认为2。在yarn下使用 |
–executor-core | 每个executor的核数。在yarn或者standalone下使用 |
12. Spark on Hive,Hive on Spark
Spark on Hive:hive作为数据源,spark进行计算
Hive on Spark:spark作为hive底层的计算引擎