Rumen 是为 Apache Hadoop 构建的数据提取和分析工具。Rumen 挖掘 JobHistory 日志以提取有意义的数据,并将其存储在易于解析的压缩格式或 摘要 中。MapReduce 日志中的原始跟踪数据通常不足以用于模拟、仿真和基准测试,因为这些工具通常尝试测量源数据中未出现的情况。例如,如果任务在原始跟踪数据中本地运行,但调度程序的模拟选择在远程机架上运行该任务,则模拟器需要其输入无法提供的运行时。为了填补这些空白,Rumen 对摘要执行统计分析,以估算跟踪未提供变量。Rumen 跟踪驱动 Gridmix(Hadoop MapReduce 集群的基准)和 SLS(资源管理器调度程序的模拟器)。
从 JobHistory 日志中提取有意义的数据是为 MapReduce 构建的任何工具的常见任务。编写与 MapReduce 框架紧密耦合的自定义工具非常繁琐。因此,需要一个内置工具来执行日志解析和分析的框架级任务。这样的工具将使依赖于作业历史记录的外部系统不受作业历史记录格式更改的影响。
对 MapReduce 作业 的各种属性(例如 任务运行时、任务失败等)执行统计分析是基准测试和模拟工具可能需要的另一项常见任务。Rumen 为 Map/Reduce 任务运行时生成 累积分布函数 (CDF) 。运行时 CDF 可用于推断不完整、缺失和合成任务的任务运行时。类似地,还计算每次尝试的成功任务总数的 CDF。
Rumen 由 2 个组件组成
跟踪生成器:将作业历史记录日志转换为易于解析的格式。目前,TraceBuilder
以 JSON 格式输出跟踪。
*文件夹*:用于缩放输入跟踪的实用工具。从跟踪生成器获取的跟踪仅汇总输入文件夹和文件中的作业。给定跟踪中所有作业完成的时间跨度可以视为跟踪运行时。文件夹可用于缩放跟踪的运行时。减少跟踪运行时可能涉及从输入跟踪中删除一些作业,并缩小剩余作业的运行时。增加跟踪运行时可能涉及向结果跟踪添加一些虚拟作业,并增加各个作业的运行时。
将作业历史记录日志转换为所需的作业跟踪包括 2 个步骤
将信息提取到中间格式
调整从中间跟踪获取的作业跟踪,使其具有所需的属性。
从作业历史记录日志中提取信息是一次性操作。此所谓的黄金跟踪可用于生成具有所需属性值(例如
输出持续时间
、浓度
等)的跟踪。
Rumen 提供 2 个基本命令
跟踪生成器
文件夹
首先,我们需要生成黄金跟踪。因此,第一步是在作业历史记录文件夹上运行跟踪生成器
。跟踪生成器
的输出是作业跟踪文件(以及可选的群集拓扑文件)。如果我们想要缩放输出,我们可以使用文件夹
实用工具将当前跟踪折叠到所需的长度。本节的其余部分将详细解释这些实用工具。
hadoop rumentrace [options] <jobtrace-output> <topology-output> <inputs>
此命令调用Rumen 的跟踪生成器
实用工具。
跟踪生成器将作业历史记录文件转换为一系列 JSON 对象,并将它们写入<作业跟踪输出>
文件。它还提取群集布局(拓扑)并将其写入<拓扑输出>
文件。<输入>
表示作业历史记录文件和文件夹的空格分隔列表。
1) 预计
跟踪生成器
的输入和输出是完全限定的文件系统路径。因此,使用 file:// 指定本地
文件系统上的文件,并使用 hdfs:// 指定 HDFS 上的文件。由于输入文件或文件夹是文件系统路径,因此这意味着它们可以被 glob。在使用正则表达式指定多个文件路径时,这可能很有用。2) 默认情况下,TraceBuilder 不会递归扫描输入文件夹以查找作业历史记录文件。只有直接放置在输入文件夹下的文件才会被考虑用于生成跟踪。要通过递归扫描输入目录来添加输入目录下的所有文件,请使用“ -recursive”选项。
群集拓扑结构如下所示
要重建拆分并确保正确建模在实际运行中看到的距离/延迟。
为缺少拆分详细信息或合成生成的作业推断拆分信息。
参数 | 说明 | 备注 |
---|---|---|
-demuxer |
用于读取作业历史记录文件。默认值为 DefaultInputDemuxer 。 |
Demuxer 决定输入文件如何映射到作业历史记录文件。作业历史记录日志和作业配置文件通常是小型文件,当嵌入到 SequenceFile 或 TFile 等某些容器文件格式中时,可以更有效地存储。为了支持此类使用案例,可以指定一个自定义 Demuxer 类,该类可以从源文件中提取各个作业历史记录日志和作业配置文件。 |
-recursive |
递归遍历作业历史记录日志的输入路径。 | 此选项应用于通知 TraceBuilder 递归扫描输入路径并处理其下的所有文件。请注意,默认情况下,仅考虑直接位于输入文件夹下的历史记录日志来生成跟踪。 |
hadoop rumentrace \ file:///tmp/job-trace.json \ file:///tmp/job-topology.json \ hdfs:///tmp/hadoop-yarn/staging/history/done_intermediate/testuser
这将分析存储在 HDFS
文件系统上的 /tmp/hadoop-yarn/staging/history/done_intermediate/testuser
中的所有作业,并将作业跟踪输出到存储在 local
文件系统上的 /tmp/job-trace.json
中,以及 /tmp/job-topology.json
中的拓扑信息。
hadoop rumenfolder [options] [input] [output]
此命令调用 Rumen 的 Folder
实用程序。折叠基本上意味着生成跟踪的输出持续时间是固定的,并且作业时间表会进行调整以尊重最终的输出持续时间。
输入和输出到
Folder
预计是完全限定的文件系统路径。因此,使用file://
指定local
文件系统上的文件,使用hdfs://
指定 HDFS 上的文件。
参数 | 说明 | 备注 |
---|---|---|
-input-cycle |
定义折叠操作的基本时间单位。input-cycle 没有默认值。必须提供输入周期。 |
'-input-cycle 10m ' 意味着整个跟踪运行现在将以 10 分钟的间隔进行切片。基本操作将在 10m 块上完成。请注意,*Rumen* 理解各种时间单位,如 m(分钟)、h(小时)、d(天) 等。 |
-output-duration |
此参数定义跟踪的最终运行时间。默认值为1 小时。 | '-output-duration 30m ' 表示生成的跟踪的最大运行时间为 30 分钟。输入跟踪文件中的所有作业都将折叠并缩放以适应此窗口。 |
-concentration |
设置生成跟踪的浓度。默认值为1。 | 如果生成跟踪的总运行时间小于输入跟踪的总运行时间,则生成跟踪包含的作业数将比输入跟踪少。这实质上意味着输出被稀释了。要增加作业密度,请将浓度设置为更高的值。 |
-debug |
在调试模式下运行 Folder。默认情况下,它设置为false。 | 在调试模式下,Folder 将打印用于调试的其他语句。此外,在暂存目录中生成的中间文件不会被清理。 |
-seed |
随机数生成器的初始种子。默认情况下,使用随机数生成器生成种子,并将种子值报告回用户以供将来使用。 | 如果传递了初始种子,则随机数生成器 将按相同顺序生成随机数,即如果使用相同的种子,则随机数序列保持不变。Folder 使用随机数生成器来决定是否发出作业。 |
-temp-directory |
Folder 的临时目录。默认情况下,输出文件夹的父目录用作暂存空间。 | 这是 Folder 使用的暂存空间。除非在调试 模式下运行 Folder,否则所有临时文件最终都会被清理。 |
-skew-buffer-length |
使Folder能够容忍倾斜作业。默认缓冲区长度为0。 | '-skew-buffer-length 100 ' 表示如果作业在 100 的窗口大小内按错误的顺序出现,则 Folder 将按顺序发出它们。如果作业在此窗口外按错误的顺序出现,则 Folder 将退出,前提是未设置-allow-missorting 。Folder报告输入跟踪中看到的最大倾斜大小以供将来使用。 |
-allow-missorting |
使Folder能够容忍按错误顺序出现的作业。默认情况下不允许错误排序。 | 如果允许错误排序,则Folder将忽略无法使用-skew-buffer-length 指定的缓冲区大小取消倾斜的按错误顺序出现的作业。如果不允许错误排序,则如果倾斜缓冲区无法容忍倾斜,Folder 将退出。 |
hadoop rumenfolder \ -output-duration 1h \ -input-cycle 20m \ file:///tmp/job-trace.json \ file:///tmp/job-trace-1hr.json
如果折叠作业乱序,则命令将退出。
hadoop rumenfolder \ -output-duration 1h \ -input-cycle 20m \ -allow-missorting \ -skew-buffer-length 100 \ file:///tmp/job-trace.json \ file:///tmp/job-trace-1hr.json
如果折叠作业乱序,则最多将去倾斜 100 个作业。如果第 101个作业乱序,则命令将退出。
hadoop rumenfolder \ -output-duration 1h \ -input-cycle 20m \ -debug -temp-directory file:///tmp/debug \ file:///tmp/job-trace.json \ file:///tmp/job-trace-1hr.json
这将折叠 10 小时作业跟踪文件 file:///tmp/job-trace.json
,使其在 1 小时内完成,并将 file:///tmp/debug
用作临时目录。临时目录中的中间文件将不会被清理。
hadoop rumenfolder \ -output-duration 1h \ -input-cycle 20m \ -concentration 2 \ file:///tmp/job-trace.json \ file:///tmp/job-trace-1hr.json
这将折叠 10 小时作业跟踪文件 file:///tmp/job-trace.json
,使其在 1 小时内完成,浓度为 2。如果将 10 小时的作业跟踪折叠为 1 小时,则默认情况下将保留 10% 的作业。如果浓度为 2,则将保留 20% 的总输入作业。
MAPREDUCE-751 是将Rumen引入MapReduce的主要 JIRA。查看 MapReduce rumen-component 了解更多详情。