目录 第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外部运行环境 参考文献