
# Spark应用开发简介
#### Spark简介
Spark是分布式批处理框架，提供分析挖掘与迭代式内存计算能力，支持多种语言（Scala/Java/Python）的应用开发。 适用以下场景：
- 数据处理（Data Processing）：可以用来快速处理数据，兼具容错性和可扩展性。
- 迭代计算（Iterative Computation）：支持迭代计算，有效应对多步的数据处理逻辑。
- 数据挖掘（Data Mining）：在海量数据基础上进行复杂的挖掘分析，可支持各种数据挖掘和机器学习算法。
- 流式处理（Streaming Processing）：支持秒级延迟的流式处理，可支持多种外部数据源。
- 查询分析（Query Analysis）：支持标准SQL查询分析，同时提供DSL（DataFrame）， 并支持多种外部输入。
- Apache Spark部件架构如[图1]所示。本文档重点介绍Spark、Spark SQL和Spark Streaming应用开发指导。MLlib和GraghX的详细指导请参见Spark官方网站：[http://spark.apache.org/docs/2.2.2/](https://spark.apache.org/docs/2.2.2/)。
图1Spark架构   
![](https://support.huaweicloud.com/devg-mrs/zh-cn_image_0250982138.jpg)
#### Spark开发接口简介
Spark支持使用Scala、Java和Python语言进行程序开发，由于Spark本身是由Scala语言开发出来的，且Scala语言具有简洁易懂的特性，推荐用户使用Scala语言进行Spark应用程序开发。
按不同的语言分，Spark的API接口如[表1]所示。
 表1Spark API接口 
| **接口**     | **说明**                                            |
|:---|:---|
| Scala API  | 提供Scala语言的API。由于Scala语言的简洁易懂，推荐用户使用Scala接口进行程序开发。 |
| Java API   | 提供Java语言的API。                                     |
| Python API | 提供Python语言的API。                                   |
   
按不同的模块分，Spark Core和Spark Streaming使用上表中的API接口进行程序开发。而SparkSQL模块，支持CLI或者ThriftServer两种方式访问。其中ThriftServer的连接方式也有Beeline和JDBC客户端代码两种。
![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/note_3.0-zh-cn.png)
spark-sql脚本、spark-shell脚本和spark-submit脚本（运行的应用中带SQL操作），不支持使用proxy user参数去提交任务。
