摘要:
【场景】 Spark提交作业job的时候要指定该job可以使用的CPU、内存等资源参数,生产环境中,任务资源分配不足会导致该job执行中断、失败等问题,所以对Spark的job资源参数分配调优非常重要。 spark提交作业,yarn-cluster模式示例: ./bin/spark-submit\ 阅读全文
摘要:
【Java序列化与反序列化】 Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。序列化使用场景:1.数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里)。2.远程通信,即在网络上传送对象的字节序列。 这篇文章写的不错h 阅读全文
摘要:
【Spark内存模型】 Spark在一个executor中的内存分为3块:storage内存、execution内存、other内存。 1. storage内存:存储broadcast,cache,persist数据的地方。 2. execution内存:执行内存,join、aggregate、ma 阅读全文
摘要:
【生产实践经验】 【生产实践经验】 生产实践中的切身体会是:影响Spark性能的大BOSS就是shuffle,抓住并解决shuffle这个主要原因,事半功倍。 【Shuffle原理学习笔记】 【Shuffle原理学习笔记】 1.未经优化的HashShuffleManager 注:这是spark1.2 阅读全文
摘要:
数据本地化对于Spark Job性能有着巨大的影响,如果数据以及要计算它的代码是在一起的,那么性能当然会非常高。但是,如果数据和计算它的代码是分开的,那么其中之一必须到另外一方的机器上。移动代码到其匹配的数据节点,会比移动大量数据到代码所在的节点上去,速度要快得多,因为代码比较小。Spark也正是基 阅读全文
摘要:
聚合操作使用reduceByKey/aggregateByKey替代groupByKey 聚合操作使用reduceByKey/aggregateByKey替代groupByKey 参见我的这篇博客说明 【Spark调优】:如果实在要shuffle,使用map侧预聚合的算子 内存充足前提下使用mapP 阅读全文
摘要:
因业务上的需要,无可避免的一些运算一定要使用shuffle操作,无法用map类的算子来替代,那么尽量使用可以map侧预聚合的算子。 map侧预聚合,是指在每个节点本地对相同的key进行一次聚合操作,类似于MapReduce中的本地combine。map-side预聚合之后,每个节点本地就只会有一条相 阅读全文
摘要:
如果有可能的话,尽量避免使用shuffle类算子。因为Spark作业运行过程中,最消耗性能的地方就是shuffle过程。shuffle过程,就是将分布在集群中多个节点上的同一个key,拉取到同一个节点上,进行聚合或join等操作。比如reduceByKey、join等算子,都会触发shuffle操作 阅读全文
摘要:
Job->Stage->Task开发完一个应用以后,把这个应用提交到Spark集群,这个应用叫Application。这个应用里面开发了很多代码,这些代码里面凡是遇到一个action操作,就会产生一个job任务。 一个Application有一个或多个job任务。job任务被DAGScheduler 阅读全文
摘要:
Spark内部有若干术语(Executor、Job、Stage、Task、Driver、DAG等),需要理解并搞清其内部关系,因为这是性能调优的基石。 节点类型有: 1. Master 节点: 常驻master进程,负责管理全部worker节点。 2. Worker 节点: 常驻worker进程,负 阅读全文