Spark性能調優與原理分析
內容描述
本書主要介紹了Spark運行原理及性能調優的相關實踐,
從Spark框架內部及外部運行環境等不同角度分析Spark性能調優的過程。
第1章介紹了Linux系統中各種監控工具的使用,對CPU、內存、網絡、
I/O等方面進行介紹, 並提供了集群監控報警的解決方案。
第2章介紹了Java虛擬機(JVM)的基本知識、垃圾回收機制,以及對JVM運行狀態的監控。
第3章和第4章介紹了Spark內核架構、任務運行的流程,對各個組件的實現進行了深入的剖析。
尤其在Spark 內存管理、存儲原理、Shuffle階段,詳細介紹了每個實現的細節,
這些實現的細節為後期Spark性能調優提供了參數調節的理論依據。
第5章介紹了Spark性能調優的詳細實踐過程,首先介紹了SparkUI和Spark日誌的使用,
通過這兩項可以迅速定位瓶頸問題; 然後根據定位的問題,分別從程序調優、
資源調優、Shuffle過程調優等不同角度介紹了調優的實踐過程。
本書在理論部分提供了大量的概念原理圖、運行流程圖,在實踐部分提供了大量的示例。
讓讀者對性能的調節不 僅停留在參數調節的層面,而且能理解每個參數的修改對程序的內部運行產生的影響。
本書既可以作為Spark開發者的參考用書,也可以作為高等院校電腦與軟件相關專業的教材。
目錄大綱
第1章常用工具簡介
1.1Linux中的性能監控命令
1.1.1程序準備
1.1.2top命令
1.1.3htop命令
1.1.4vmstat命令
1.1.5iostat命令
1.1.6iftop命令
1.2Prometheus
1.2.1Prometheus簡介
1.2.2Prometheus的組成
1.2 .3Prometheus的安裝及配置
1.2.4監測服務器
1.3Grafana
1.3.1Grafana簡介
1.3.2Grafana的安裝
1.3.3Grafana服務器監控
1.4Alluxio的使用
1.4.1Alluxio簡介
1.4.2Alluxio的安裝
1.4.3Alluxio與Spark集成
1.5本章小結
第2章Java虛擬機簡介
2.1Java虛擬機基本結構
2.1.1PC寄存器
2.1.2Java堆
2.1.3Java虛擬機棧
2.1.4方法區
2.1.5本地方法棧
2.2Java常用選項
2.2.1Java選項分類
2.2.2標準選項
2.2.3非標準選項
2.2.4高級運行時選項
2.2.5高級垃圾回收選項
2.3垃圾回收機制
2.3.1什麼是垃圾對象
2.3.2垃圾回收算法
2.3.3垃圾收集器
2.4JDK自帶命令行工具
2.4.1jps命令
2.4. 2jstat命令
2.4.3jinfo命令
2.4.4jmap命令
2.4.5jhat命令
2.4.6jstack命令
2.4.7jcmd命令
2.4.8jstatd命令
2.5JVM監控工具
2.5.1JConsole
2.5.2Visual VM
2.5.3Prometheus監控JVM
第3章Spark內核架構
3.1Spark編程模型
3.1.1RDD概述
3.1.2RDD的基本屬性
3.1.3RDD的緩存
3.1.4RDD容錯機制
3.1.5Spark RDD操作
3.1.6源碼分析
3.2Spark組件簡介
3.2.1術語介紹
3.2.2Spark RPC原理
3.2.3Driver簡介
3.2.4Executor簡介
3.2.5Spark運行模式
3.2.6存儲簡介
3.2.7源碼分析
3.3Spark作業執行原理
3.3.1整體流程
3.3.2Job提交
3.3.3Stage劃分
3.3.4Task劃分
3.3.5Task提交
3.3.6Task執行
3.3.7Task結果處理
3.3.8源碼分析
3.4Spark內存管理
3.4 .1內存使用概述
3.4.2內存池的劃分
3.4.3內存管理
3.4.4源碼分析
3.5Spark存儲原理
3.5.1存儲模塊架構
3.5.2磁盤存儲實現
3.5.3內存存儲實現
3.5.4塊管理器
3.5.5源碼分析
第4章Shuffle詳解
4.1為什麼需要Shuffle
4.1.1Shuffle的由來
4.1.2Shuffle實現的目標
4.2Spark執行Shuffle的流程
4.2.1總體流程
4.2.2ShuffleRDD的生成
4.2.3Stage的劃分
4.2.4Task的劃分
4.2.5Map端寫入
4.2.6Reduce端讀取
4.3Shuffle內存管理
4.3.1任務內存管理器
4.3.2內存消費者
4.3.3內存消費組件
4.3.4Tungsten內存管理
4.3.5Tungsten內存消費組件
4.4ShuffleWrite
4.4.1HashShuffleManager
4.4.2HashShuffleWriter
4.4.3SortShuffleManager
4.4.4BypassMergeSortShuffleWriter
4.4.5SortShuffleWriter
4.4.6UnsafeShuffleWriter
4.5ShuffleRead
4.5.1獲取ShuffleReader
4.5.2拉取Map端數據
4.5.3數據聚合
4.5.4key排序
第5章Spark性能調優
5.1Spark任務監控
5.1.1SparkUI使用
5.1.2Spark運行日誌詳解
5.2Spark程序調優
5.2.1提高並行度
5.2 .2避免創建重複的RDD
5.2.3RDD持久化
5.2.4廣播大變量
5.2.5使用高性能序列化類庫
5.2.6優化資源操作連接
5.3Spark資源調優
5.3.1CPU分配
5.3.2內存分配
5.3.3提高磁盤性能
5.3.4Executor數量的權衡
5.3.5Spark管理內存比例
5.3.6使用Alluxio加速數據訪問
5.4Shuffle過程調優
5.4.1Map端聚合
5.4.2文件讀寫緩衝區
5.4.3Reduce端並行拉取數量
5.4.4溢寫文件上限
5.4.5數據傾斜調節
5.5外部運行環境
參考文獻
作者介紹
1986-1992: 北方交通大學講師; 1992-1994: 比利時VUB大學應用信息技術碩士; 1994-1996: 比利時VUB大學MBA; 1996-2003: IT公司項目經理 2003-至今: 北航軟件學院副教授。已出版二十幾本教材(其中“計算機導論實踐教程”一書獲北航2010年教學成果三等獎;“大學計算機英語教程”獲北航2012年教學成果二等獎。 主講課程: 計算機導論、軟件工程、職業生涯規劃等。