# 部署應用程序
## Requirements
運行一個Spark Streaming應用程序,有下面一些步驟
- 有管理器的集群-這是任何Spark應用程序都需要的需求,詳見[部署指南](../../deploying/README.md)
- 將應用程序打為jar包-你必須編譯你的應用程序為jar包。如果你用[spark-submit](../../deploying/submitting-applications.md)啟動應用程序,你不需要將Spark和Spark Streaming打包進這個jar包。
如果你的應用程序用到了高級源(如kafka,flume),你需要將它們關聯的外部artifact以及它們的依賴打包進需要部署的應用程序jar包中。例如,一個應用程序用到了`TwitterUtils`,那么就需要將`spark-streaming-twitter_2.10`
以及它的所有依賴打包到應用程序jar中。
- 為executors配置足夠的內存-因為接收的數據必須存儲在內存中,executors必須配置足夠的內存用來保存接收的數據。注意,如果你正在做10分鐘的窗口操作,系統的內存要至少能保存10分鐘的數據。所以,應用程序的內存需求依賴于使用
它的操作。
- 配置checkpointing-如果stream應用程序需要checkpointing,然后一個與Hadoop API兼容的容錯存儲目錄必須配置為檢查點的目錄,流應用程序將checkpoint信息寫入該目錄用于錯誤恢復。
- 配置應用程序driver的自動重啟-為了自動從driver故障中恢復,運行流應用程序的部署設施必須能監控driver進程,如果失敗了能夠重啟它。不同的集群管理器,有不同的工具得到該功能
- Spark Standalone:一個Spark應用程序driver可以提交到Spark獨立集群運行,也就是說driver運行在一個worker節點上。進一步來看,獨立的集群管理器能夠被指示用來監控driver,并且在driver失敗(或者是由于非零的退出代碼如exit(1),
或者由于運行driver的節點的故障)的情況下重啟driver。
- YARN:YARN為自動重啟應用程序提供了類似的機制。
- Mesos: Mesos可以用[Marathon](https://github.com/mesosphere/marathon)提供該功能
- 配置write ahead logs-在Spark 1.2中,為了獲得極強的容錯保證,我們引入了一個新的實驗性的特性-預寫日志(write ahead logs)。如果該特性開啟,從receiver獲取的所有數據會將預寫日志寫入配置的checkpoint目錄。
這可以防止driver故障丟失數據,從而保證零數據丟失。這個功能可以通過設置配置參數`spark.streaming.receiver.writeAheadLogs.enable`為true來開啟。然而,這些較強的語義可能以receiver的接收吞吐量為代價。這可以通過
并行運行多個receiver增加吞吐量來解決。另外,當預寫日志開啟時,Spark中的復制數據的功能推薦不用,因為該日志已經存儲在了一個副本在存儲系統中。可以通過設置輸入DStream的存儲級別為`StorageLevel.MEMORY_AND_DISK_SER`獲得該功能。
## 升級應用程序代碼
如果運行的Spark Streaming應用程序需要升級,有兩種可能的方法
- 啟動升級的應用程序,使其與未升級的應用程序并行運行。一旦新的程序(與就程序接收相同的數據)已經準備就緒,舊的應用程序就可以關閉。這種方法支持將數據發送到兩個不同的目的地(新程序一個,舊程序一個)
- 首先,平滑的關閉(`StreamingContext.stop(...)`或`JavaStreamingContext.stop(...)`)現有的應用程序。在關閉之前,要保證已經接收的數據完全處理完。然后,就可以啟動升級的應用程序,升級
的應用程序會接著舊應用程序的點開始處理。這種方法僅支持具有源端緩存功能的輸入源(如flume,kafka),這是因為當舊的應用程序已經關閉,升級的應用程序還沒有啟動的時候,數據需要被緩存。
- 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 持久化