跳转到: 导航, 搜索

Sahara/Templates


Hadoop 拥有大量的参数,终端用户很难找到合适的配置来使集群达到良好的性能。模板机制简化了 Hadoop 集群的创建和配置过程。终端用户只需要指定集群模板并提供需要更改的参数。集群配置将来自模板。假设模板是由经验丰富的 Hadoop 管理员创建的。如果用户需要重新定义一个参数,他可以创建一个自定义模板或在集群创建期间覆盖该参数。

模板的使用受到两件事的限制:插件和 Hadoop 版本。模板始终是插件特定的,因为它包含特定于插件的配置。这意味着只能将模板与创建它的插件一起使用。同样适用于 Hadoop 版本。

Sahara 有两种类型的模板:集群模板和节点组模板。

节点组模板

节点组模板包含集群中一个节点的配置。它的名称中带有“节点组”,是因为集群由具有相同配置的节点组组成。模板包括 Hadoop 进程和 VM 特性(例如,任务跟踪器的 reduce slots 数量、CPU 数量和 RAM 容量)的配置。VM 特性使用 OpenStack flavor 指定。

节点模板包含以下参数

姓名 类型 约束 评论
id 字符串 必需,唯一
flavor 字符串 必需,应包含有效的 flavor id
name 字符串 必需,唯一
description 字符串 可选
plugin 字符串 必需,应包含有效的 plugin id
hadoop_version 字符串 必需
node_processes 字符串列表 必需
node_configs 字典的字典 必需 有关确切结构,请参见下面的示例

示例

   {
       "id": "aee4-strf-o14s-fd34",
       "flavor": "4",
       "image": "ah91-aij1-u78x-iunm",
       "name": ”fat task tracker + data node”
       "description": “a template for big nodes ...”,
       "plugin": “apache-hadoop”,
       "hadoop_version": “1.1.1”
       "node_processes": [“task tracker”, “data node”]
       "node_configs":
           {
               ”service:mapreduce”:
                   {
                       "mapred.tasktracker.map.tasks.maximum": 8,
                       "mapred.tasktracker.reduce.tasks.maximum": 3,
                       ...
                   }
               ”service:hdfs”:
                   {
                         …
                   }
               ”general”:
                   {
                         …
                   }
           }
   }

集群模板

集群模板包含应用于整个集群的配置,例如 HDFS 复制因子或 HDFS 块大小。它还包含节点组模板列表。理想情况下,这将允许用户通过仅指定集群模板,一键创建集群。

姓名 类型 约束 评论
id 字符串 必需,唯一
name 字符串 必需,唯一
description 字符串 可选
plugin 字符串 必需
hadoop_version 字符串 必需
configs 字典 必需
node_groups 字典列表 必需 有关确切结构,请参见下面的示例

示例

 {
     "id": "asdf-wdvc-9as0-q23w",
     "name": ”small cluster”,
     "description": “a template for a small cluster”,
     "plugin": “apache hadoop”,
     "hadoop_version": “1.1.1”
     "configs": 
         {
             "service:mapreduce":
                 {
                     "compression": "snappy"
                 }
             "service:hdfs":
                 {
                     "hdfs_replication_factor": 3
                 }
             "general":
                 {
                     ...
                 }
     }
     "node_groups_templates":
     [
         {
             "name": "master node",
             "node-group-template": "aee4-strf-o14s-fd34",
             "count": 1
         },
         {
             "name": "workers",
             "node-group-template": "fe1t-2t4f-1oa4-fdik",
             "count": 3
         }
     ]	
 }

插件集成

插件应提供以下功能以支持模板

  • 通过实现 get_configs(...) 方法提供配置列表
  • 在 validate_cluster(...) 方法中,插件必须验证用户为 configs 指定的输入。

Savanna Templates.png

Configs

插件应提供用户可编辑的配置列表。本质上,“config”是单个参数的规范。该参数可以针对通用配置或特定服务(mapreduce、hdfs)配置。它也可以具有集群或特定节点组的范围。范围决定了配置将出现在哪种类型的模板中。范围为“cluster”的配置将出现在集群模板中。

范围为“node”的配置同时出现在集群模板和节点组模板中。当它们在集群模板中指定时,它们将作为节点模板中使用的默认值的新的默认值。

由于插件提供配置列表,因此它还必须能够在用户提供一些值时将它们应用于集群。

示例配置

 {
     "name": “mapred.tasktracker.map.tasks.maximum”,
     "applicable_target": ”service:mapreduce”,
     "scope": "node"
     "default": 2,
     "required": true,
     "type": “int”,
     "description": “amount of map tasks per node”
 }