度量指标
资源用量
资源使用情况是你作业在GB小时内使用的资源量。
计量统计
我们将作业的资源使用量定义为任务容器大小和任务运行时间的乘积。因此,作业的资源使用量可以定义为mapper
和reducer
任务的资源使用量总和。
范例
|
|
浪费的资源量
这显示了作业以GB小时浪费的资源量或以浪费的资源百分比。
计量统计
|
|
运行时间
运行时间指标显示了作业运行的总时间。
计量统计
作业运行时间是作业提交到资源管理器和作业完成时的时间差。
范例
作业的提交时间为1461837302868 ms
,结束时间为1461840952182 ms
,作业的runtime
时间是1461840952182 - 1461837302868 = 3649314 ms
,即1.01
小时。
等待时间
等待时间是作业处于等待状态消耗的时间
计量统计
|
|
启发式算法
Map-Reduce
Mapper数据倾斜
Mapper数据倾斜启发式算法能够显示作业是否发生数据倾斜。启发式算法会将所有Mapper分成两组,第一组的平均值会小于第二组。
例如,第一组有900个Mapper作业,每个Mapper作业平均数据量为7MB,而另一份包含1200个Mapper作业,且每个Mapper作业的平均数据量是500MB。
计算
首先通过递归算法计算两组平均内存消耗,来评估作业的等级。其误差为两组平均内存消耗的差除以这俩组最小的平均内存消耗的差的值。
|
|
参数配置
阈值参数deviation_severity
、num_tasks_severity
和files_severity
能够简单的进行配置。如果想进一步了解如何配置这些参数,可以点击这里进行查看。
Mapper GC
Mapper GC会分析任务的GC效率。它会计算出GC时间占所有CPU时间的百分比。
计算
启发式算法对Mapper GC
严重度的计算按照如下过程进行。首先,计算出所有作业的平均的CPU使用时间、平均运行时间以及平均垃圾回收消耗的时间。我们要计算Mapper GC
严重度的最小值,这个值可以通过平均运行时间和平均垃圾回收时间占平均CPU总消耗时间的比例来计算。
|
|
参数配置
阈值参数gc_ratio_severity
和runtime_severity
也是可以简单配置的。如果想进一步了解如何配置这些参数,可以参考这里。
Mapper内存消耗
此部分指标用来检查mapper
的内存消耗。他会检查任务的消耗内存与容器请求到的内存比例。消耗的内存指任务最大消耗物理内存快照的平均值。容器请求的内存是作业mapreduce.map/reduce.memory.mb
的配置值,是作业能请求到的最大物理内存。
计算
|
|
参数配置
阈值参数container_memory_severity
和memory_ratio_severity
也是可以简单配置的。如果想进一步了解如何配置这些参数,可以参考这里。
Mapper的运行速度
这部分分析Mapper
代码的运行效率。通过这些分析可以知道mapper
是否受限于CPU,或者处理的数据量过大。这个分析能够分析mapper
运行速度快慢和处理的数据量大小之间的关系。
计算
这个启发式算法的严重度值,是mapper
作业的运行速度的严重度和mapper
作业的运行时间严重度中较小的一个。
|
|
参数配置
阈值参数disk_speed_severity
和runtime_severity
可以很简单的配置。如果想进一步的了解这些参数配置,可以点击这里查看。
Mapper溢出
这个启发式算法通过分析磁盘I/O
来评判mapper
的性能。mapper
溢出比例(溢出的记录数/总输出的记录数)是衡量mapper
性能的一个重要指标:如果这个值接近2,表示几乎每个记录都溢出了,并临时写到磁盘两次(其中一次发生在内存排序缓存溢出时,另一次发生在合并所有溢出的块时)。当这些发生时表明mapper
输入输出的数据量过大了。
计算
|
|
参数配置
阈值spill_severity
和num_tasks_severity
可以简单的进行配置。如果想进一步了解配置参数的详细信息,可以点击这里查看。 here.
Mapper运行时间
这部分分析mapper
的数量是否合适。通过分析结果,我们可以更好的优化任务中mapper
的数量这个参数设置。有以下两种情况发生时,这个参数就需要优化了:
Mapper
的运行时间很短。通常作业在以下情况下出现:mapper
数量过多mapper
的平均运行时间很短- 文件太小
- 大文件或不可分割文件块,通常作业在以下情况下出现:
mapper
数量太少mapper
的平均运行时间太长- 文件过大 (个别达到 GB 级别)
计算
|
|
参数配置
阈值short_runtime_severity
、long_runtime_severity
以及num_tasks_severity
可以很简单的配置。如果想进一步了解参数配置的详细信息,可以点击这里查看。
Reducer数据倾斜
这部分分析每个Reduce
中的数据是否存在倾斜情况。这部分分析能够发现Reducer
中是否存在这种情况,将Reduce
分为两部分,其中一部分的输入数据量是否明显大于另一部分的输入数据量。
计算
首先通过递归算法计算均值并基于每个组消耗的平均内存消耗将任务划分为两组来评估该算法的等级。误差表示为两个部分Reducer
的平均内存消耗之差除以两个部分最小内存消耗之差得到的比例。
|
|
参数配置
阈值deviation_severity
、num_tasks_severity
和files_severity
,可以很简单的进行配置。如果想进一步了解这些参数的配置,可以点击这里查看。
Reducer GC
这部分分析任务的GC效率,能够计算并告诉我们GC时间占所用CPU时间的比例。
计算
首先,会计算出所有任务的平均CPU消耗时间、平均运行时间以及平均垃圾回收所消耗的时间。然后,算法会根据平均运行时间以及垃圾回收时间占平均CPU时间的比值来计算出最低的严重等级。
|
|
参数配置
阈值gc_ratio_severity
、runtime_severity
可以很简单的配置,如果想进一步了解参数配置的详细过程,可以点击这里查看。
Reducer内存消耗
这部分分析显示了任务的内存利用率。算法会比较作业消耗的内存以及容器要求的内存分配。消耗的内存是指每个作业消耗的最大内存的平均值。容器需求的内存是指任务配置的mapreduce.map/reduce.memory.mb
,也就是任务能够使用最大物理内存。
计算
|
|
参数配置
阈值container_memory_severity
和memory_ratio_severity
可以简单的进行配置。如果想进一步了解配置参数的详细信息,可以点击这里查看。
Reducer运行时间
这部分分析Reducer
的运行效率,可以帮助我们更好的配置任务中reducer
的数量。当出现以下两种情况时,说明Reducer
的数量需要进行调优:
Reducer
过多,hadoop任务可能的表现是:Reducer
数量过多Reducer
的运行时间很短
Reducer
过少,hadoop任务可能的表现是:Reducer
数量过少Reducer
运行时间很长
计算
|
|
参数配置
阈值参数short_runtime_severity
、long_runtime_severity
以及num_tasks_severity
可以很简单的配置,如果想进一步了解参数配置的详细过程,可以点击这里查看。
清洗&排序
这部分分析reducer
消耗的总时间以及reducer
在进行清洗和排序时消耗的时间,通过这些分析,可以评估reducer
的执行效率。
计算
|
|
参数配置
阈值参数avg_exec_time
、avg_shuffle_time
和avg_sort_time
可以很简单的进行配置。更多关于参数配置的相信信息可以点击这里查看。
Spark
Spark的事件日志限制
Spark
事件日志处理器当前无法处理很大的日志文件。Dr-Elephant
需要花很长的时间去处理一个很大的Spark
时间日志文件,期间很可能会影响Dr-Elephant
本身的稳定运行。因此,目前我们设置了一个日志大小限制(100MB),如果超过这个大小,会新起一个进程去处理这个日志。
计算
如果数据被限流了,那么启发式算法将评估为最严重等级CRITICAL
,否则,就没有评估等级。
Spark负载均衡处理器
和Map/Reduce
任务的执行机制不同,Spark
应用在启动后会一次性分配它所需要的所有资源,直到整个任务结束才会释放这些资源。根据这个机制,对Spark
的处理器的负载均衡就显得非常重要,可以避免集群中个别节点压力过大。
计算
|
|
参数配置
阈值参数looser_metric_deviation_severity
和metric_deviation_severity
可以简单的进行配置。如果想进一步了解参数配置的详细过程,可以点击这里查看。
Spark任务运行时间
这部分启发式算法对Spark
任务的运行时间进行调优分析。每个Spark
应用程序可以拆分成多个任务,每个任务又可以拆分成多个运行阶段。
计算
|
|
参数配置
阈值参数single_job_failure_rate_severity
和avg_job_failure_rate_severity
可以很简单的进行配置。更多详细信息,可以点击这里查看。
Spark内存限制
目前,Spark
应用程序缺少动态资源分配的功能。与Map/Reduce
任务不同,能够为每个map/reduce
进程分配所需要的资源,并且在执行过程中逐步释放占用的资源。而Spark
在应用程序执行时,会一次性的申请所需要的所有资源,直到任务结束才释放这些资源。过多的内存使用会对集群节点的稳定性产生影响。所以,我们需要限制Spark
应用程序能使用的最大内存比例。
计算
|
|
参数配置
阈值参数total_memory_severity_in_tb
和mem_utilization_severity
可以很简单的配置。进一步了解,可以点击这里查看。
Spark阶段运行时间
与Spark
任务运行时间一样,Spark
应用程序可以分为多个任务,每个任务又可以分为多个运行阶段。
计算
|
|
参数配置
阈值参数single_stage_tasks_failure_rate_severity
、stage_runtime_severity_in_min
和stage_failure_rate_severity
可以很简单的配置。进一步了解,请点击这里。
本章篇幅较长,一些专有名词及参数功能,可以在
Dr-Elephant
的Dashboard
中查。