如何在100个节点集群上模拟10000个节点的集群?让DynoYARN来模拟吧

2022-04-08 18:43:30 浏览数 (1)

DynoYARN 是一种用于按需启动 YARN 集群并运行模拟 YARN 工作负载以进行规模测试的工具。由Linkedin开源。它可以在 100 个节点的 Hadoop 集群上模拟 10,000 个节点的 YARN 集群性能。

GitHub地址:https://github.com/linkedin/dynoyarn

创建 DynoYARN 是为了解决以下问题:

  1. 评估 YARN 功能和 Hadoop 版本升级对资源管理器性能的影响
  2. 预测大型 YARN 集群上的资源管理器性能

DynoYARN 由“驱动程序”和“工作负载”组成。 驱动程序负责启动模拟的 YARN 集群。 驱动程序假定资源管理器使用容量调度程序。 工作负载负责在模拟集群上实时重放跟踪。

驱动程序和工作负载可以配置为启动集群并重放任意大小的工作负载,这意味着 DynoYARN 可以模拟各种场景,从重放以前的生产性能问题到预测未来集群和工作负载的资源管理器性能。

驱动程序和工作负载都作为 YARN 应用程序实现,因此您需要一个功能强大的 Hadoop 集群来运行模拟。

构建

要构建运行模拟所需的 DynoYARN jar,请从根目录运行 ./gradlew build。 所需的 jar 在 dynoyarn-driver/build/libs/dynoyarn-driver--all.jar 和 dynoyarn-generator/build/libs/dynoyarn-generator--all.jar 中。

运行

DynoYARN 模拟可以通过命令行运行,手动运行驱动程序和工作负载应用程序,或者通过 Azkaban(将这些应用程序打包到一个 Azkaban 作业中)运行它。

命令行

预备知识

在具有 Hadoop 访问权限的机器上,将以下内容添加到目录中:

  1. dynoyarn-driver-*-all.jar jar
  2. dynoyarn-generator-*-all.jar jar
  3. 创建一个 dynoyarn-site.xml 文件。 这包含将添加到模拟集群守护进程(资源管理器和节点管理器)的属性。 此处提供了基本配置。
  4. 创建一个 dynoyarn.xml 文件。 这包含将用于模拟本身的属性(例如,要启动的节点管理器的数量、每个节点管理器的资源能力等)。 此处提供了基本配置。

接下来,您需要重播工作负载跟踪(请参阅工作负载规范格式)以获取更多信息。 此处提供了示例工作负载跟踪。 将要重放的工作负载跟踪复制到 HDFS:

代码语言:javascript复制
hdfs dfs -copyFromLocal workload-example.json /tmp/workload-example.json

在每个模拟的同一节点上运行模拟资源管理器很有用。 此外,我们希望确保资源管理器在隔离环境中运行,以准确再现资源管理器的行为。 为此,请将 dynoyarn.xml 中的 dynoyarn.resourcemanager.node-label 配置为 dyno(或您选择的任何标签名称),在集群中选择一个您希望模拟资源管理器运行的节点(例如主机名:8041),然后 运行yarn rmadmin -addToClusterNodeLabels dyno; yarn rmadmin -replaceLabelsOnNode hostname:8041=dyno 以便模拟资源管理器在每次模拟时在 hostname:8041 上运行。

运行模拟
  1. 要运行驱动程序应用程序,请从目录运行:
代码语言:javascript复制
CLASSPATH=$(${HADOOP_HDFS_HOME}/bin/hadoop classpath --glob):./:./* java com.linkedin.dynoyarn.DriverClient -hadoop_binary_path /hdfs/path/to/hadoop.tarball.tar.gz -conf dynoyarn.xml -capacity_scheduler_conf /hdfs/path/to/capacity-scheduler.xml

其中 hadoop_binary_path 参数包含驱动程序组件(RM 和 NM)将使用的 Hadoop 二进制文件和 conf(您可以使用在为 MapReduce 作业配置 mapreduce.application.framework.path 时使用的相同 tarball),以及 capacity_scheduler_conf 参数包含驱动程序的 RM 将使用的容量调度程序配置。

驱动应用程序的生命周期由 dynoyarn.driver.simulation-duration-ms 控制,之后应用程序(和模拟集群)将终止,并且 RM 应用程序摘要和 GC 日志将上传到 HDFS(到 dynoyarn.driver.rm-log -输出路径)。

要运行工作负载应用程序,请从目录运行:

代码语言:javascript复制
CLASSPATH=$(${HADOOP_HDFS_HOME}/bin/hadoop classpath --glob):./:./* java com.linkedin.dynoyarn.workload.WorkloadClient -workload_spec_location /tmp/workload-example.json -conf dynoyarn.xml -driver_app_id application_1615840027285_57002

其中,workload_spec_location 是 HDFS 上包含要重新运行的跟踪的位置,driver_app_id 是之前提交的驱动程序应用程序的 YARN 应用程序 ID。

Azkaban

要通过 Azkaban 运行 DynoYARN 模拟,请从根目录运行 ./gradlew build,然后将生成的 zip 上传到 Azkaban 的 dynoyarn-azkaban/build/distributions/dynoyarn-azkaban-*。

工作负载规范格式

工作负载跟踪采用 json 格式,每行一个应用程序。 一个示例应用程序:

代码语言:javascript复制
{
  "amResourceRequest": {
    "memoryMB": 2048,
    "vcores": 1
  },
  "appId": "application_1605737660848_3450869",
  "appType": "MAPREDUCE",
  "queue": "default",
  "user": "user2",
  "submitTime": 1607151674623,
  "resourceRequestSpecs": [
    {
      "runtimes": [13262, 41329],
      "numInstances": 2,
      "resource": {
        "memoryMB": 4096,
        "vcores": 1
      },
      "priority": 20
    },
    {
      "runtimes": [13292],
      "numInstances": 1,
      "resource": {
        "memoryMB": 8192,
        "vcores": 2
      },
      "priority": 10
    }
  ]
}

这取自在生产集群上运行的 MAPREDUCE 应用程序,该应用程序以 id application_1605737660848_3450869 运行并在 1607151674623 提交。重播此应用程序时,它将作为用户 user2 提交到队列默认值。 AM 将在 <2GB, 1 vcore> 容器中运行; 它将首先请求两个 <4GB, 1 vcore> 容器,优先级为 20,分别运行大约 13 秒和 41 秒。 两个容器完成后,应用程序将请求一个 <8GB, 2 vcore> 容器,优先级为 10,运行时间约为 13 秒。

跟踪中的应用程序相对实时地提交到模拟集群; 在示例中,第一个应用程序在 1607151674543 提交,标志着模拟的开始; 第二个应用程序在 1607151674623 提交,将在第一个应用程序后 80 毫秒提交 1607151674623 – 1607151674543 = 80 毫秒。

要生成跟踪,您可以将生产 RM 应用程序摘要日志与包含有关何时请求每个应用程序的容器(例如 MapReduce 的映射器/缩减器或 Spark 的执行器)的信息的审计日志结合起来。

本文为从大数据到人工智能博主「jellyfin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://cloud.tencent.com/developer/article/1975967

0 人点赞