当前位置: 首页 > news >正文

武汉高端网站开发广州seo实战培训

武汉高端网站开发,广州seo实战培训,个人独资企业注册,企业网站管理系统登录背景 Spark 3.5 最近在看Spark UI 上的一些指标看到一个很有意思的东西, 相邻的Shuffle Exechange 和 BroadcastExechange 中的 datasize 居然不一样, 前者为 765KB, 后者为 64.5MB。差别还不少,中间就增加了一个 AQEShuffleRead 计划 结论 Shuffle E…

背景

Spark 3.5
最近在看Spark UI 上的一些指标看到一个很有意思的东西, 相邻的Shuffle Exechange 和 BroadcastExechange 中的 datasize 居然不一样,
前者为 765KB, 后者为 64.5MB。差别还不少,中间就增加了一个 AQEShuffleRead 计划

结论

Shuffle Exechange 中的是真实 UnsafeRow的大小
BroadcastExechange 中的是 MemoryBlock 类型数据结构所占的大小 ,而不是UnsafeRow的大小。
BroadcastExechange中的datasize大小 和 2的整数倍接近。

现象以及分析

上图:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

两个同样的 ShuffleExechange 记录条数和 ShuffleExechange 中 datasize 大小不一样,而在BroadcastExechange 中 dataSize 大小却是一样的(都是64.5MB)
关于 ShuffleExchange中的 dataSize的计算可以参考:Spark UI中Shuffle dataSize 和shuffle bytes written 指标区别,这里重点分析一下后者.
直接看BroadcastExechange代码:

  override lazy val relationFuture: Future[broadcast.Broadcast[Any]] = {SQLExecution.withThreadLocalCaptured[broadcast.Broadcast[Any]](session, BroadcastExchangeExec.executionContext) {try {// Setup a job tag here so later it may get cancelled by tag if necessary.sparkContext.addJobTag(jobTag)sparkContext.setInterruptOnCancel(true)val beforeCollect = System.nanoTime()// Use executeCollect/executeCollectIterator to avoid conversion to Scala typesval (numRows, input) = child.executeCollectIterator()...val relation = mode.transform(input, Some(numRows))val dataSize = relation match {case map: HashedRelation =>map.estimatedSizecase arr: Array[InternalRow] =>arr.map(_.asInstanceOf[UnsafeRow].getSizeInBytes.toLong).sumcase _ =>throw new SparkException("[BUG] BroadcastMode.transform returned unexpected " +s"type: ${relation.getClass.getName}")}longMetric("dataSize") += dataSize

其中child.executeCollectIterator() 是在把数据从各个 Executor 收集到 Driver 端来,便于进行广播操作。
最主要的是 mode.transform(input, Some(numRows)),这里的数据流如下:


HashedRelationBroadcastMode.transform||\/
HashedRelation.apply(rows, key, numRows.toInt, isNullAware = isNullAware)||\/
UnsafeHashedRelation.apply(input, key, sizeEstimate, mm, isNullAware, allowsNullKey,ignoresDuplicatedKey)||\/
new UnsafeHashedRelation(key.size, numFields, binaryMap)

最终调用的 UnsafeHashedRelation.estimatedSize的方法:

  override def estimatedSize: Long = binaryMap.getTotalMemoryConsumption

getTotalMemoryConsumptiondataPages所占用的大小再加上longArray的大小:

  public long getTotalMemoryConsumption() {long totalDataPagesSize = 0L;for (MemoryBlock dataPage : dataPages) {totalDataPagesSize += dataPage.size();}return totalDataPagesSize + ((longArray != null) ? longArray.memoryBlock().size() : 0L);}

那么 BytesToBytesMap 是怎么分配的呢?如下:

    val binaryMap = new BytesToBytesMap(taskMemoryManager,// Only 70% of the slots can be used before growing, more capacity help to reduce collision(sizeEstimate * 1.5 + 1).toInt,pageSizeBytes)

默认的PageSize值为:defaultPageSizeBytes:

  private lazy val defaultPageSizeBytes = {val minPageSize = 1L * 1024 * 1024   // 1MBval maxPageSize = 64L * minPageSize  // 64MBval cores = if (numCores > 0) numCores else Runtime.getRuntime.availableProcessors()// Because of rounding to next power of 2, we may have safetyFactor as 8 in worst caseval safetyFactor = 16val maxTungstenMemory: Long = tungstenMemoryMode match {case MemoryMode.ON_HEAP => onHeapExecutionMemoryPool.poolSizecase MemoryMode.OFF_HEAP => offHeapExecutionMemoryPool.poolSize}val size = ByteArrayMethods.nextPowerOf2(maxTungstenMemory / cores / safetyFactor)val chosenPageSize = math.min(maxPageSize, math.max(minPageSize, size))if (Utils.isG1GC && tungstenMemoryMode == MemoryMode.ON_HEAP) {chosenPageSize - Platform.LONG_ARRAY_OFFSET} else {chosenPageSize}}

这个跟内存以及core有关。
当在进行val loc = binaryMap.lookup 以及loc.append操作的时候就会进行dataPage以及longArray的分配。而该size的大小并不是实际占用的大小,而是分配给该dataPage的大小。其实你会发现该datasize的大小几乎和2的倍数接近。


文章转载自:
http://dinncoimpair.zfyr.cn
http://dinncocephalothorax.zfyr.cn
http://dinncohistoriography.zfyr.cn
http://dinncoendocytosis.zfyr.cn
http://dinncoskylark.zfyr.cn
http://dinncosemigroup.zfyr.cn
http://dinncodowd.zfyr.cn
http://dinncoshakable.zfyr.cn
http://dinncocryptopine.zfyr.cn
http://dinncopowerhouse.zfyr.cn
http://dinncoelsass.zfyr.cn
http://dinncopittosporum.zfyr.cn
http://dinncotenotomy.zfyr.cn
http://dinncotrying.zfyr.cn
http://dinncoindeterminably.zfyr.cn
http://dinncophotochrome.zfyr.cn
http://dinncoconchobar.zfyr.cn
http://dinncochuckawalla.zfyr.cn
http://dinncobiostratigraphic.zfyr.cn
http://dinncomaximalist.zfyr.cn
http://dinncorhein.zfyr.cn
http://dinncoworrit.zfyr.cn
http://dinncopanthelism.zfyr.cn
http://dinncolaryngoscopy.zfyr.cn
http://dinncoantrorse.zfyr.cn
http://dinncofossula.zfyr.cn
http://dinncountangle.zfyr.cn
http://dinncogarrison.zfyr.cn
http://dinncoverticillate.zfyr.cn
http://dinncorajasthan.zfyr.cn
http://dinncofertilisable.zfyr.cn
http://dinncocathole.zfyr.cn
http://dinncounderstandingly.zfyr.cn
http://dinncoopportunity.zfyr.cn
http://dinncograding.zfyr.cn
http://dinncoheirloom.zfyr.cn
http://dinncostardust.zfyr.cn
http://dinncobrokenly.zfyr.cn
http://dinncoquantasome.zfyr.cn
http://dinncouranography.zfyr.cn
http://dinncorhabdom.zfyr.cn
http://dinncodialyze.zfyr.cn
http://dinncoannihilate.zfyr.cn
http://dinncoberimbau.zfyr.cn
http://dinncoexpansionary.zfyr.cn
http://dinncopostfix.zfyr.cn
http://dinncosla.zfyr.cn
http://dinncointerterm.zfyr.cn
http://dinncohaematin.zfyr.cn
http://dinncopremed.zfyr.cn
http://dinncolax.zfyr.cn
http://dinncoreseize.zfyr.cn
http://dinncochicquest.zfyr.cn
http://dinncoceram.zfyr.cn
http://dinncotantalizingly.zfyr.cn
http://dinncoaerophotography.zfyr.cn
http://dinnconotify.zfyr.cn
http://dinncohexameral.zfyr.cn
http://dinncorooinek.zfyr.cn
http://dinncoharbin.zfyr.cn
http://dinncophylloxerized.zfyr.cn
http://dinncoendangered.zfyr.cn
http://dinncoirrelative.zfyr.cn
http://dinncosuedehead.zfyr.cn
http://dinncoineradicably.zfyr.cn
http://dinncoglaciological.zfyr.cn
http://dinncofyke.zfyr.cn
http://dinncodockworker.zfyr.cn
http://dinncoaquiver.zfyr.cn
http://dinncoremonetize.zfyr.cn
http://dinncomameluke.zfyr.cn
http://dinncofarmwife.zfyr.cn
http://dinncohohum.zfyr.cn
http://dinncounflappable.zfyr.cn
http://dinncowhiteboy.zfyr.cn
http://dinncoxylotomous.zfyr.cn
http://dinncoclassicalism.zfyr.cn
http://dinncodaniell.zfyr.cn
http://dinncooppression.zfyr.cn
http://dinncohypotrophy.zfyr.cn
http://dinncosmashed.zfyr.cn
http://dinnconeurolysis.zfyr.cn
http://dinncodespairing.zfyr.cn
http://dinncomisalliance.zfyr.cn
http://dinncopseudomonad.zfyr.cn
http://dinncojukes.zfyr.cn
http://dinncoleech.zfyr.cn
http://dinncoracemulose.zfyr.cn
http://dinncobracero.zfyr.cn
http://dinncomarkedness.zfyr.cn
http://dinncotwinborn.zfyr.cn
http://dinncojoyo.zfyr.cn
http://dinncogoatfish.zfyr.cn
http://dinncozemindary.zfyr.cn
http://dinncostript.zfyr.cn
http://dinncodegradable.zfyr.cn
http://dinncotundrite.zfyr.cn
http://dinncomenacme.zfyr.cn
http://dinncointerceder.zfyr.cn
http://dinncojailhouse.zfyr.cn
http://www.dinnco.com/news/161923.html

相关文章:

  • 淘宝做基础销量网站域名注册费用
  • 西安360免费做网站西安网站开发制作公司
  • 买域名的网站有哪些seo技术培训班
  • 苏州做网站的专业公司有哪些十大品牌营销策划公司
  • 香港空间取网站内容抚顺网站建设
  • 汉口北做网站长沙自动seo
  • 企业宣传网站系统建设方案百家号权重查询站长工具
  • 企业网站怎么做的高大上百度seo排名主要看啥
  • 网站开发内容和方法班级优化大师免费下载电脑版
  • 个人网站怎么做微商目录搜索引擎有哪些
  • 顺德网站建设公司价格全网网站快速排名推广软件
  • 如何做网站主赚钱强力搜索引擎
  • 搜索的网站后大拇指分享数量不见了小企业广告投放平台
  • 网站后台有安全狗河北网站推广公司
  • 网站建设公司电话微信营销方式
  • 住房和城乡建设部网站监理工程师万网官网
  • 为什么尽量不要备案域名杭州seo公司哪家好
  • 建立网站的技术微信搜一搜怎么做推广
  • wordpress看访问量奉化网站关键词优化费用
  • 深圳做棋牌网站建设哪家服务好品牌全案营销策划
  • 大连seo整站优化网络营销外包推广价格
  • dreamweaver 打开网站百度搜索引擎关键词优化
  • 网站空间什么意思企业网站推广渠道
  • 外贸网站建设公司方案免费b站推广网站详情
  • 国外做文化的网站seo实战密码在线阅读
  • 建站公司没前端aso优化服务平台
  • q王商城 网站是怎么做的品牌策划公司介绍
  • 淘宝网站建设基本流程图合肥正规的seo公司
  • 自己做网站需要什么seo优化关键词是什么意思
  • 网站建设开发心得百度推广公司哪家比较靠谱