欢迎来到天天文库
浏览记录
ID:42474301
大小:1.90 MB
页数:39页
时间:2019-09-15
《陈超-Spark Summit China》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、Spark内核探索与性能优化陈超@CrazyJvmSparkSummitChinaDidyouknow?cache/persistislazy!unpersistiseager!Didyouknow?groupByKey:notcombinelocally!reduceByKey:combinelocallyDidyouknow?vallevel=MEMORY_AND_DISKwillnotspilldatatodiskimmediatelyafteryoucallsc.persist(level)!Didyouknow?Howtodecidetaskn
2、umber?!if…elseif…else…Let’sgo!!!再看RDD!分区protecteddefgetPartitions:Array[Partition]!依赖protecteddefgetDependencies:Seq[Dependency[_]]=deps!函数defcompute(split:Partition,context:TaskContext):Iterator[T]!最佳位置(可选)protecteddefgetPreferredLocations(split:Partition):Seq[String]=Nil!分区策略(可
3、选)@transientvalpartitioner:Option[Partitioner]=None7HadoopRDD•分区:每个HDFSblock•依赖:无•函数:读取每一个block•最佳位置:HDFSblock所在位置•分区策略:无8FilteredRDD•分区:与父RDD一致•依赖:与父RDD一对一•函数:计算父RDD的每个分区并过滤•最佳位置:无(与父RDD一致)•分区策略:无9JoinedRDD•分区:每个reduce任务一个分区•依赖:依赖所有父RDD•函数:读取shuffle数据并计算•最佳位置:无可以指定Partitioner•分区策
4、略:HashPartitioner(partitions:Int)10ClusterOverviewWorkerNodeExecutorCacheTaskTaskDriverProgramSparkContextClusterManagerWorkerNodeExecutorCacheTaskTask11核心组件Sparkclient!(appmaster)SparkworkerRDDgraphYourprogramCluster!TaskThreadsSchedulermanagervalsc=newSparkContext!valdata=sc.te
5、xtFile(“…”)!data.filter(…).countTaskThreadsBlocktrackerShuffletrackerHDFS,HBase,…12CODEvalconf=newSparkConf()conf.setMaster(“spark://....”).setAppName(“Analysis”).setSparkHome(“…”).setJars(“…”)valsc=newSparkContext(conf)vallines=sc.testFile(“hdfs://...“)!valerrors=lines.filter(_.sta
6、rtsWith(“ERROR”))!errors.cache()!mysql_error=errors.filter(_.contains(“MySQL”)).count!http_errors=errors.filter(_.contains(“Http”)).countRDD图每个partition都会分配一个task数据层面Partition层面HadoopRDDfile:path=hdfs://…FilteredRDDerrors:func=_.contains(…)rdd.cacheTask1Task2Task3……14数据本地性第一次运行时数据不在
7、内存中,所以文件系统本地性从HDFS上取,任务最好运行在数据所在的节点上!内存本地性第二次运行,数据已经在内存中,所以任务最好运行在该数据所在内存的节点上。LRU置换万一有数据被置换出内存,则仍然从HDFS上取。15任务调度!16DAGScheduler目标RDD计算每个分区的函数结果侦听器!!DAGScheduler•根据DAG构建Stage,决定每个任务的最佳位置•将taskset传给底层调度器TaskScheduler•重新提交shuffle输出丢失的stage17调度器优化灰颜色代表之前已经算好的分区!••一个Stage内的窄依赖进行pipelin
8、e操作1+1+1+1=4①1+1=2;2+1=3;3+1=4②•重用已经缓存过的
此文档下载收益归作者所有