云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

虚拟主机_mysql查询所有数据库_返现

小七 141 0

通过可视化了解apachespark应用程序

一幅画最大的价值在于它迫使我们注意到我们从未期望看到的东西。–约翰·图基在过去,apachespark用户界面一直在帮助用户调试他们的应用程序。在最新的Spark 1.4版本中,我们很高兴地宣布,数据可视化浪潮已经找到了Spark UI的方式。此版本中新增的可视化功能包括三个主要组件:Spark事件的时间轴视图执行DAG火花流统计可视化这篇博文将是分为两部分的系列文章中的第一篇。这篇文章将涵盖前两个部分,并将最后一部分留到下周的文章中。Spark事件的时间轴视图从Spark的早期版本开始,Spark事件就是面向用户的API的一部分。在最新版本中,Spark UI在时间轴中显示这些事件,以便事件的相对顺序和交错可以一目了然。时间轴视图有三个级别:跨所有作业、一个作业内和一个阶段内。在登录页上,时间轴显示应用程序中所有作业的所有Spark事件。考虑以下示例:这里的事件顺序相当简单。在所有执行器注册后不久,应用程序将并行运行4个作业,其中一个作业失败,其余作业成功。然后,当所有作业都完成并且应用程序退出时,执行器也随之被移除。现在让我们点击其中一个作业。此作业在3个文件上运行字数计数,并在最后联接结果。从时间轴上看,很明显,3个单词计数阶段是并行运行的,因为它们并不相互依赖。但是,末尾的连接确实依赖于前3个阶段的结果,因此相应的阶段(末尾的收集)直到前面所有阶段都完成后才会开始。让我们进一步了解其中一个阶段。这个阶段有20个分区(并非全部显示)分布在4台机器上。每个条形图表示阶段中的单个任务。从这个时间轴视图,我们可以收集关于这个阶段的一些见解。首先,分区在机器上分布得相当好。第二,大部分任务执行时间由原始计算组成,而不是网络或I/O开销,这并不奇怪,因为我们正在对很少的数据进行洗牌。第三,如果我们为执行器分配更多的核心,则并行度可以提高;目前看来,每个执行器一次只能执行两个任务。我想借此机会展示Spark中使用这个时间轴的另一个特性:动态分配。这个特性允许Spark根据工作负载动态地调整执行器的数量,以便更有效地共享集群资源。让我们通过时间线来看看它的行动。首先要注意的是,应用程序在作业过程中获取执行者,而不是提前保留它们。然后,在第一个作业完成后不久,用于该作业的执行器集变为空闲并返回到集群。这允许在同一集群中运行的其他应用程序同时使用我们的资源,从而提高集群的利用率。只有当一个新的作业出现时,我们的Spark应用程序才会获得一组新的执行器来运行它。在时间轴中查看Spark事件的能力对于识别应用程序中的瓶颈非常有用。调试应用程序的下一步是将特定任务或阶段映射到产生它的Spark操作。执行DAG第二个可视化添加到最新的Spark版本显示每个作业的执行DAG。在Spark中,作业与RDD依赖项链相关联,这些RDD依赖项按如下所示的直接无环图(DAG)组织:此作业执行简单的字数统计。首先,它执行textFile操作以读取HDFS中的输入文件,然后执行flatMap操作将每一行拆分成单词,然后执行map操作以形成(word,1)对,最后执行reduceByKey操作来计算每个单词的计数。可视化中的蓝色阴影框表示用户在其代码中调用的Spark操作。这些框中的点表示在相应操作中创建的RDD。操作本身按运行阶段分组。从这个形象中可以得到一些观察结果。首先,它揭示了不被洗牌分离的流水线操作的Spark优化。特别是,从HDFS读取输入分区后,每个执行器直接将后续的flatMap和map函数应用于同一任务中的分区,从而无需触发另一个阶段。其次,一个RDD被缓存在第一个阶段(由绿色高亮显示表示)。由于封闭操作涉及到从HDFS读取,所以缓存这个RDD意味着在这个RDD上的未来计算可以从内存而不是HDFS访问至少一个子集的原始文件。DAG可视化的价值在复杂的工作中最为显著。例如,MLlib中的交替最小二乘(ALS)实现迭代地计算两个因子矩阵的近似乘积。这涉及到一系列的map、join、groupByKey操作。值得注意的是,在ALS中,在正确的位置进行缓存对性能至关重要,因为该算法在每次迭代中都会大量重用先前计算的结果。通过DAG可视化,用户和开发人员现在可以一目了然地确定某些rdd是否被正确地缓存,如果没有,就可以快速理解为什么实现速度慢。与时间轴视图一样,DAG可视化允许用户单击一个阶段并展开阶段内的细节。下面描述了ALS中单个阶段的DAG可视化。在阶段视图中,属于此阶段的所有RDD的详细信息都会自动展开。用户现在可以快速找到关于特定RDD的信息,而不必通过将鼠标悬停在作业页面上的各个点上进行猜测和检查。最后,我想强调DAG可视化和sparksql之间的初步集成。由于sparksql用户更熟悉高级物理运算符而不是低级Spark原语,因此应该显示前者。其结果类似于映射到底层执行DAG的SQL查询计划。Spark 1.4中也实现了与Spark流的集成,但将在单独的帖子中展示。在不久的将来,Spark UI将更加了解更高级别库的语义,以提供更多相关细节。sparksql将被赋予它自己的标签,类似于现有的Spark Streaming标签。在Spark Core中,当用户将鼠标悬停在RDD上时,诸如分区数、调用站点和缓存百分比等附加信息将显示在DAG上。摘要最新的Spark 1.4.0版本在Spark UI中引入了几个主要的可视化功能。这项工作源于项目认识到,以直观的方式呈现有关应用程序的详细信息与首先公开信息一样重要。未来的发行版将继续保持Spark UI对Spark Core和基于其构建的更高级别库的用户更易访问的趋势。请继续关注这个由两部分组成的系列文章的后半部分,介绍Spark流媒体的UI改进!承认本文展示的特性是Spark社区中几个贡献者的劳动成果。尤其是,@sarutak of NTT Data是时间轴视图功能的主要作者。免费试用Databricks。今天就开始吧