LinkedIn开源Dr. Elephant:Hadoop和Spark性能监控工具

转载自:http://developer.51cto.com/art/201604/509314.htm?utm_source=tuicool&utm_medium=referral

-----------------------------

我们今天很荣幸的宣布项目Dr.Elephant的开源,这是一个强大的工具,可以帮助Hadoop和Spark用户理解、分析、以及改善系统的性能。在去年的Hadoop第八次年度峰会(一个Apache Hadoop社区的重要会议)期间,我们第一次将Dr. Elephant在社区面前展示。

我们的动机

Hadoop是用于大型分布式存储及计算的框架,同时其生态圈中引入了大量彼此相互作用的部件。由于其庞大而复杂的框架,确保每一个部件都高效执行是非常重要的。虽然我们总能优化底层的硬件资源、网络基础设施、操作系统,以及整个系统的其它部分,但只有用户才能优化集群上执行的任务。

Dr.Elephant的诞生

为了帮助用户了解和优化他们自己的流程,我们定期进行培训来告诉他们如何优化自己的任务,但这并没有真正解决我们的问题。在LinkedIn ,我们有不同Hadoop使用经验的员工使用不同的技术在集群中运行他们的任务。此外, Hadoop的用户数量不断增加。这意味着,针对不同的用户、不同的技术进行常规的培训变的越来越难,而且这样的工作根本不具备良好的扩展性。

直到几年前,LinkedIn的Hadoop团队开始代替员工进行工作流分析,并给出任务的优化建议。作为优化工作的第一步,基于一些简单规则,我们给予用户一些建议,并取得了明显的优化效果。但是,随着用户的增加,由于用户参与总会有些延迟,使得我们越来越难提供足够的支持资源。没有办法验证我们是否达到了任务性能的优化目标或者保证性能优化方向的全覆盖。因此,我们需要一个标准化和自动化的过程。

Hadoop的专家们审查流程时发现几个常见的经常性的优化模式,并在此基础上,我们决定开始一个新的实验项目,同时优化Hadoop平台开发者和Hadoop使用者的时间。这就是Dr.Elephant的诞生过程。

什么是Dr.Elephant

Dr.Elephant是Hadoop和Spark性能监控和调优工具。它会自动收集所有的指标,针对指标执行分析任务,并用简易的方式将其展示出来。它的目标是提高开发人员的工作效率,简化任务调优工作以更好的提高集群性能。它使用一组可插拔、可配置、基于规则的启发式(heuristics)来分析Hadoop和Spark任务并给出关于任务性能的详细报告信息,然后,基于该结果给出如何让任务执行得更为有效建议。

为何要使用Dr.Elephant

大多数Hadoop的优化工具,无论是开源还是专有的,旨在收集系统资源指标和监控集群资源。他们专注于简化Hadoop集群的部署和管理。很少有工具专注于帮助Hadoop用户优化他们的任务。可用的那几个要么不活跃,要么不能扩展并支持不断增长的Hadoop框架。Dr.Elephant支持Hadoop,并且可以很容易地扩展到新的框架。它也支持Spark。您可以加入、配置任意多的自定义启发式(heuristics)。它的目的是帮助Hadoop和Spark的用户了解他们的任务内部执行情况,并帮助他们很容易的优化自己的任务。

Dr.Elephant是如何工作的

Dr.Elephant以固定的间隔,从Yarn的Resource Manager获取所有最近成功和失败的应用程序列表。从JobHistory获取每个应用的元数据 - 即,counter,配置和任务数据。一旦它拥有所有的元数据,Dr.Elephant便运行一组启发式(heuristics),并产生对单个启发式和任务整体性能的诊断报告。然后,报告中用五个严重性级别来标记不同的结果,以表明潜在的性能问题。

Dr.Elephant仪表盘

启动Dr.Elephant的UI之后,仪表盘将被加载起来。这将显示几组集群统计数据,比如集群上有多少作业在执行,需要做性能调优的作业数量,以及基于启发式分析结果显示的处于严重(critical)状态的任务数量。从下面这些数字,你可以看到在过去24小时内所有由Dr.Elephant分析的任务。

Dr.Elephant的搜索页面

Dr.Elephant具有搜索功能,允许用户根据任务/应用程序ID、流程执行ID、作业提交者信息、任务的类型(Pig、Hive等)、作业的严重程度、具体的某个启发式指标的严重程度、以及作业完成的时间来搜索任务。

当你点击一个特定的搜索结果,您可以查看任务的完整信息。该信息页面给出了具体MapReduce或Spark作业的详细信息。它包括对用户有用的启发式指标以及一些统计数据。此外,你可以获取任务的真实身份信息,如工作流的引用、作业引用和作业历史记录服务器的引用。它还提供方便的链接,用来查看作业的历史以及给定作业流中所包含的所有作业的信息。

Dr.Elephant的任务页面

Dr.Elephant中的一个工作流历史查看页

Dr.Elephant中的任务历史查看

除了对单个任务的报告,Dr.Elephant的任务和工作流历史记录页面还提供了任务的执行历史展示,以帮助您将某次特定的执行与之前的执行进行比较。它基于所有启发式严重性计算每次执行的得分并以图表和曲线图方式展现。该图将有助于分析为什么相比于其他执行,某次特定的任务执行性能较差。对于图中的每一个点,它也将列出需要注意的排在前三的任务(Job)或任务阶段(Stage)。每一个色点代表了任务流页面中的一个任务,以及任务历史页面中的一个启发式指标,而颜色代表指标的严重性。当鼠标悬停在这些点上时,你可以获取各个作业/启发式指标的更多信息。

Dr.Elephant的专家技能

Dr.Elephant自2014年年中诞生开始,经过不断的演进,已经包括基于专家建议和意见的许多有用功能。广义地说,这里是Dr.Elephant的技能和能力的列表:

  • 可插拔和可配置的基于规则的启发式指标,用于诊断任务;
  • 与Azkaban调度器开箱即用式的集成,同时支持添加任何其它的Hadoop调度器,比如Oozie;
  • 对任务及任务流的历史性能的展示;
  • 任务流中,任务级别的对比;
  • 对于MapReduce和Spark的启发式指标诊断;
  • 很容易扩展到新的任务类型、应用和调度;
  • 采用REST API获取所有信息。

家庭医生

Dr.Elephant在LinkedIn非常流行,人们喜欢它的简单。就像一个家庭医生,总是随叫随到,通过简单的诊断可以解决大约80%的问题。它的设计是不言自明的,着眼于通过提供任务级别的建议而不是集群级别的统计信息,帮助Hadoop的用户了解和优化他们的任务流。像一个真正的医生诊断问题一样,Dr.Elephant通过简单的流程图分析问题。只要你喜欢,你可以往Dr.Elephant中添加任意多的启发式或规则。

我们使用Dr.Elephant完成许多不同的任务,包括监测任务流如何在群集上执行,理解为什么一个任务流运行缓慢,知道可以调整什么参数以及如何改善一个任务流,将一个任务流与先前的执行进行比较,故障排除,等等。其他还有些工具使用Dr.Elephant的REST API生成有用的报告。例如,一个工具,用Dr.Elephant对任务流进行性能评估,最终决定其是否可以在生产集群上线执行。

Dr.Elephant已经彻底融入了我们的Hadoop生态系统。在LinkedIn,我们对开发人员做了强制要求,将Dr.Elephant作为其开发周期的一部分。在将一个任务流提交到生产环境之前必须从Dr.Elephant得到一个绿色的结果。对于任何的用户问题,我们首先使用Dr.Elephant测试并得到一个报告。这鼓励用户不断优化自己的任务,并设法使任务在Dr.Elephant中测试时能获得绿色结果。Dr.Elephant已经成为LinkedIn文化的一部分,并一直在帮助大家。

接下来

许多新功能都计划采用Dr.Elephant。我们正在不断寻找新的想法,以帮助提高开发人员的工作效率,提高集群使用效率。除了添加和改进启发式和支持更多的任务类型,在计划中的更新包括:

  • 基于实时指标的具体任务调优建议;
  • 集群资源使用情况和趋势的可视化;
  • 更好地与Spark集成;
  • 整合更多的调度器。

代码和文档

Dr.Elephant是Apache v2协议下的开源项目。你可以在我们的GitHub页面中找到源代码和文档。

我们为Dr.Elephant建立了一个Google Group,在那里你可以进行查询和讨论想法。当然,捐款和建议也是非常欢迎的。


你可能感兴趣的:(Dr.,Elephant,Hadoop)