[TOC]
## 一、 引入 Spark
Spark 1.2.0 使用 Scala 2.10 寫應用程序,你需要使用一個兼容的 Scala 版本(例如:2.10.X)。寫 Spark 應用程序時,你需要添加 Spark 的 Maven 依賴,Spark 可以通過 Maven 中心倉庫來獲得:
```
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.10.5</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.6.2</version>
</dependency>
```
另外,如果你希望訪問 HDFS 集群,你需要根據你的 HDFS 版本添加 `hadoop-client` 的依賴。一些公共的 HDFS 版本 tags 在[第三方發行頁面](https://spark.apache.org/docs/latest/hadoop-third-party-distributions.html)中被列出。
```
groupId = org.apache.hadoop
artifactId = hadoop-client
version = <your-hdfs-version>
```
最后,你需要導入一些 Spark 的類和隱式轉換到你的程序,添加下面的行就可以了:
```scala
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
```
## 二、初始化 Spark
Spark 編程的第一步是需要創建一個 [SparkContext](https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.SparkContext) 對象,用來告訴 Spark 如何訪問集群。在創建 `SparkContext` 之前,你需要構建一個 [SparkConf](https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.SparkConf) 對象, SparkConf 對象包含了一些你應用程序的信息。
```scala
val conf = new SparkConf().setAppName(appName).setMaster(master)
new SparkContext(conf)
```
`appName` 參數是你程序的名字,它會顯示在 cluster UI 上。`master` 是 [Spark, Mesos 或 YARN 集群的 URL](https://spark.apache.org/docs/latest/submitting-applications.html#master-urls),或運行在本地模式時,使用專用字符串 “local”。在實踐中,當應用程序運行在一個集群上時,你并不想要把 `master` 硬編碼到你的程序中,你可以[用 spark-submit 啟動你的應用程序](https://spark.apache.org/docs/latest/submitting-applications.html)的時候傳遞它。然而,你可以在本地測試和單元測試中使用 “local” 運行 Spark 進程。
### 使用 Shell
在 Spark shell 中,有一個專有的 SparkContext 已經為你創建好。在變量中叫做 `sc`。你自己創建的 SparkContext 將無法工作。可以用 `--master` 參數來設置 SparkContext 要連接的集群,用 `--jars` 來設置需要添加到 classpath 中的 JAR 包,如果有多個 JAR 包使用**逗號**分割符連接它們。例如:在一個擁有 4 核的環境上運行 `bin/spark-shell`,使用:
```
$ ./bin/spark-shell --master local[4]
```
或在 classpath 中添加 `code.jar`,使用:
```
$ ./bin/spark-shell --master local[4] --jars code.jar
```
執行 `spark-shell --help` 獲取完整的選項列表。在這之后,調用 `spark-shell` 會比 [spark-submit 腳本](https://spark.apache.org/docs/latest/submitting-applications.html)更為普遍。
## 三、并行集合
并行集合 (_Parallelized collections_) 的創建是通過在一個已有的集合(Scala `Seq`)上調用 SparkContext 的 `parallelize` 方法實現的。集合中的元素被復制到一個可并行操作的分布式數據集中。例如,這里演示了如何在一個包含 1 到 5 的數組中創建并行集合:
```scala
val data = Array(1, 2, 3, 4, 5)
val distData = sc.parallelize(data)
```
一旦創建完成,這個分布式數據集(`distData`)就可以被并行操作。例如,我們可以調用 `distData.reduce((a, b) => a + b)` 將這個數組中的元素相加。我們以后再描述在分布式上的一些操作。
并行集合一個很重要的參數是切片數(_slices_),表示一個數據集切分的份數。Spark 會在集群上為每一個切片運行一個任務。你可以在集群上為每個 CPU 設置 2-4 個切片(slices)。正常情況下,Spark 會試著基于你的集群狀況自動地設置切片的數目。然而,你也可以通過 `parallelize` 的第二個參數手動地設置(例如:`sc.parallelize(data, 10)`)。
- Introduction
- 快速上手
- Spark Shell
- 獨立應用程序
- 開始翻滾吧!
- RDD編程基礎
- 基礎介紹
- 外部數據集
- RDD 操作
- 轉換Transformations
- map與flatMap解析
- 動作Actions
- RDD持久化
- RDD容錯機制
- 傳遞函數到 Spark
- 使用鍵值對
- RDD依賴關系與DAG
- 共享變量
- Spark Streaming
- 一個快速的例子
- 基本概念
- 關聯
- 初始化StreamingContext
- 離散流
- 輸入DStreams
- DStream中的轉換
- DStream的輸出操作
- 緩存或持久化
- Checkpointing
- 部署應用程序
- 監控應用程序
- 性能調優
- 減少批數據的執行時間
- 設置正確的批容量
- 內存調優
- 容錯語義
- Spark SQL
- 概述
- SparkSQLvsHiveSQL
- 數據源
- RDDs
- parquet文件
- JSON數據集
- Hive表
- 數據源例子
- join操作
- 聚合操作
- 性能調優
- 其他
- Spark SQL數據類型
- 其它SQL接口
- 編寫語言集成(Language-Integrated)的相關查詢
- GraphX編程指南
- 開始
- 屬性圖
- 圖操作符
- Pregel API
- 圖構造者
- 部署
- 頂點和邊RDDs
- 圖算法
- 例子
- 更多文檔
- 提交應用程序
- 獨立運行Spark
- 在yarn上運行Spark
- Spark配置
- RDD 持久化