2021SC@SDUSC
本篇我将对hadoop-tools中的Gridmix进行分析
GridMix
概念
GridMix是Hadoop集群的基准。它提交多种合成作业,对从生产负载中挖掘的概要进行建模。
基本使用
Gridmix作为hadoop子命令提供。不带配置参数的基本命令行用法:
$ hadoop gridmix [-generate <size>] [-users <users-list>] <iopath> <trace>
配置参数的基本命令行用法:
$ hadoop gridmix \
-Dgridmix.client.submit.threads=10 -Dgridmix.output.directory=foo \
[-generate <size>] [-users <users-list>] <iopath> <trace>
这?<iopath>路径是GridMix的工作目录。需要注意的是,这可以在本地文件系统上,也可以在HDFS上,但大多数情况下它都与原始作业组合相同,以便GridMix分别在本地文件系统和HDFS上加载相同的负载。
这?-generate选项用于为合成作业生成输入数据和分布式缓存文件。它接受大小后缀的标准单位,例如100克将生成100 * 230次方字节作为输入数据。压缩格式输入数据的最小大小(默认为128兆字节)由下式定义gridmix.min.file.size。<iopath>/input是生成的输入数据的目标目录和/或从中读取输入数据的目录。基于HDFS的分布式缓存文件是在分布式缓存目录下生成的?<iopath>/distributedCache.?分布式缓存。如果分布式缓存目录中已经存在一些所需的分布式缓存文件,则在以下情况下,仅生成剩余的不存在的分布式缓存文件-生成选项已指定。
这<trace>参数是由Rumen生成的作业跟踪的路径。此跟踪可以压缩(必须使用群集支持的压缩编解码器之一可读)或解压缩。如果要传递一个未压缩的通过GridMix的标准输入流进行跟踪。
常见参数配置
工作类型
GridMix将作业跟踪作为输入,本质上是一个JSON编码的作业描述流。对于每个作业描述,提交客户端获取原始作业提交时间,对于该作业中的每个任务,读取和写入的字节和记录计数。给定这些数据,它构建一个合成作业,其字节和记录模式与跟踪中记录的相同。它构建两种类型的作业:
?
Job Submission Policies
GridMix控制作业提交的速率。该控件可以基于跟踪信息,也可以基于它从ResourceManager收集的统计信息。根据用户定义的提交策略,GridMix使用相应的算法来控制作业提交。目前有三种类型的策略:
?Emulating Users and Queues
典型的生产集群通常由不同的用户共享,集群容量通过作业队列在不同的部门之间分配。确保来自所有用户的作业之间的公平性、遵守队列容量分配策略以及避免不良作业接管集群增加了Hadoop软件的复杂性。为了能够充分测试和发现这些领域的缺陷,GridMix必须模拟来自不同用户和/或提交到不同队列的作业的争用。
模拟多个队列很容易-我们只需用与生产集群相同的队列配置设置基准集群,然后配置合成作业,使它们提交到跟踪中记录的相同队列。但是,并非跟踪中显示的所有用户在基准集群中都有帐户。相反,我们设置了许多测试用户帐户,并以循环方式将跟踪中的每个唯一用户与测试用户相关联。
以下配置参数会影响用户和队列的模拟:
?模拟分布式缓存加载
默认情况下,Gridmix为LOADJOB类型的作业模拟分布式缓存加载。这是通过为所有模拟作业预创建所需的分布式缓存文件来完成的,这些文件是单独的MapReduce作业的一部分。
通过配置属性,可以禁用gridmix模拟作业中分布式缓存加载的模拟grid mix . distributed-cache-仿真. enable到错误的。但是gridmix生成分布式缓存数据的驱动力是-生成选项,并且独立于此配置属性。
如果出现以下情况,分布式缓存文件的生成和分布式缓存负载的模拟都将被禁用:
- 输入跟踪来自标准输入流,而不是文件,或者
- <iopath>指定在本地文件系统上,或者
- 分布式高速缓存目录的任何上升目录,?i.e.?<iopath>/distributedCache分布式缓存(包括分布式缓存目录)对其他人没有执行权限。
模拟作业的配置
Gridmix3在它提交的模拟作业中设置一些配置属性,以便它们可以映射回输入作业跟踪中的相应作业。这些配置参数包括:
参数 | 描述 |
---|
gridmix.job.original-job-id | 对应于此模拟作业的原始群集作业的作业id。 | gridmix.job.original-job-name | 对应于此模拟作业的原始群集作业的作业名称。 |
模拟压缩/解压缩
MapReduce支持数据压缩和解压缩。可以压缩对MapReduce作业的输入。同样,地图和缩小任务的输出也可以压缩。GridMix中的压缩/解压缩仿真很重要,因为仿真压缩/解压缩会影响任务的CPU和内存使用。模拟压缩/解压缩的任务将影响同一节点上运行的其他任务和守护程序。
压缩仿真在以下情况下启用grid mix . compression-仿真. enable设置为真实的。默认情况下,压缩仿真对以下类型的作业启用LOADJOB。启用压缩模拟后,GridMix现在将生成具有恒定压缩比的压缩文本数据。因此,模拟的GridMix作业现在将使用可压缩文本数据(具有恒定的压缩比)来模拟压缩/解压缩,而不考虑实际作业中观察到的压缩比。
典型的MapReduce作业在以下阶段处理数据压缩/解压缩
-
作业输入数据解压缩:启用压缩仿真时,GridMix会生成可压缩的输入数据。基于原始作业的配置,模拟的GridMix作业将使用解压缩器来读取压缩的输入数据。目前,GridMix使用MapReduce . input . file input format . input dir以确定原始作业是否使用了压缩的输入数据。如果原始作业的输入文件是未压缩的,那么模拟作业将读取压缩的输入文件,而不使用解压缩器。 -
中间数据压缩和解压缩:如果原始作业启用了地图输出压缩,那么GridMix也会为模拟作业启用地图输出压缩。因此,减压器将使用解压缩器来读取地图输出数据。 -
作业输出数据压缩:如果原始作业的输出被压缩,那么GridMix也将为模拟作业启用作业输出压缩。
以下配置参数会影响压缩仿真
参数 | 描述 |
---|
grid mix . compression-仿真. enable | 在模拟的GridMix作业中启用压缩仿真。默认值为真。 |
打开压缩仿真后,GridMix将生成压缩的输入数据。因此,输入数据的总大小将小于预期大小。一组gridmix.min.file.size较小的值(大约为的10gridmix.gen.bytes.per.file)以使GridMix能够正确模拟压缩.
模拟高内存作业
MapReduce允许用户将作业定义为高内存作业。来自高内存作业的任务可能会在任务进程中占据更大的内存份额。模拟这种行为很重要,原因如下。
高内存特性仿真可以通过设置来禁用 grid mix . highlam-仿真. enable到错误的。
模拟资源使用
像中央处理器、物理内存、虚拟内存、JVM堆等资源的使用由MapReduce使用其任务计数器记录。GridMix使用这些信息来模拟模拟任务中的资源使用情况。模拟资源使用将有助于GridMix在测试集群上施加与实际集群相似的负载。
MapReduce任务在其整个生命周期内都会耗尽资源。GridMix还试图通过在模拟任务的整个生命周期中跨越资源使用仿真来模仿这种行为。每个要模拟的资源都应该有一个仿真器与之相关的。每一个这样的仿真器应该实现org . Apache . Hadoop . mapred . grid mix .仿真器. resourceusage。ResourceUsageEmulatorPlugin接口。资源仿真器在GridMix中有插件可以在每次运行前配置(插入或拔出)。GridMix用户可以配置多个仿真器插件通过传递逗号分隔的仿真器作为的值gridmix .仿真器.资源使用.插件参数。
列表仿真器随GridMix一起提供:
-
累计CPU使用量仿真器:GridMix使用瘤胃公布的累计CPU使用率值,并确保模拟任务的总累计CPU使用率接近瘤胃公布的值。可以配置GridMix来模拟累积的CPU使用,方法是添加org . Apache . Hadoop . mapred . grid mix .仿真器. resourceusage。累积量到模拟器列表插件为配置gridmix .仿真器.资源使用.插件参数。CPU使用模拟器的设计方式是,它只在任务的特定进度边界进行模拟。该时间间隔可通过以下方式配置gridmix .仿真器.资源-使用率. cpu .仿真-间隔。此参数的默认值为0.1即10%。 -
总堆使用量仿真器:GridMix使用瘤胃发布的总堆使用率值,并确保模拟任务的总堆使用率接近瘤胃发布的值。GridMix可以配置为通过添加org . Apache . Hadoop . mapred . grid mix .仿真器. resourceusage。TotalHeapUsageEmulatorPlugin到模拟器列表插件为配置gridmix .仿真器.资源使用.插件参数。堆使用模拟器的设计方式是,它只在任务的特定进度边界上进行模拟。该时间间隔可通过以下方式配置gridmix .仿真器.资源使用.堆.仿真-间隔。此参数的默认值为0.1即10%进度间隔。
|