05-成神之路_ambari_Ambari实战-013-代码生命周期-metainfo-configFiles详解

news2024/9/28 18:02:52

1.Redis 集群 metainfo.xml 示例

<?xml version="1.0"?>
<metainfo>
    <schemaVersion>2.0</schemaVersion>
    <services>
        <service>
            <!-- Redis 集群服务的基本信息 -->
            <name>REDIS</name>
            <displayName>Redis</displayName>
            <comment>
                Component Redis Power By JaneTTR . mail: 3832514048@qq.com ,git: https://gitee.com/tt-bigdata/ambari-env
            </comment>
            <version>7.4.0</version>

            <!-- Redis 集群组件定义 -->
            <components>
                <!-- Redis 主节点组件 -->
                <component>
                    <name>REDIS_MASTER</name>
                    <displayName>Redis Master</displayName>
                    <category>MASTER</category>
                    <cardinality>3+</cardinality> <!-- Redis 集群至少需要 3 个主节点 -->
                    <versionAdvertised>true</versionAdvertised>
                    <commandScript>
                        <script>scripts/redis_master.py</script> <!-- Python 脚本 -->
                        <scriptType>PYTHON</scriptType>
                    </commandScript>
                </component>

                <!-- Redis 从节点组件 -->
                <component>
                    <name>REDIS_SLAVE</name>
                    <displayName>Redis Slave</displayName>
                    <category>SLAVE</category>
                    <cardinality>3+</cardinality> <!-- 从节点可以是 0 或多个 -->
                    <versionAdvertised>true</versionAdvertised>
                    <commandScript>
                        <script>scripts/redis_slave.py</script> <!-- Python 脚本 -->
                        <scriptType>PYTHON</scriptType>
                    </commandScript>
                </component>

                <!-- Redis 客户端组件 -->
                <component>
                    <name>REDIS_CLIENT</name>
                    <displayName>Redis Client</displayName>
                    <category>CLIENT</category>
                    <cardinality>0+</cardinality> <!-- 客户端是可选的,可以部署多个 -->
                    <versionAdvertised>true</versionAdvertised>
                    <commandScript>
                        <script>scripts/redis_client.py</script> <!-- Python 脚本 -->
                        <scriptType>PYTHON</scriptType>
                    </commandScript>
                    <configFiles>
                        <configFile>
                            <type>env</type>
                            <fileName>redis-site.xml</fileName>
                            <dictionaryName>redis-site</dictionaryName>
                        </configFile>
                        <configFile>
                            <type>env</type>
                            <fileName>redis-env.sh</fileName>
                            <dictionaryName>redis-env</dictionaryName>
                        </configFile>
                    </configFiles>
                </component>
            </components>

            <!-- 操作系统相关 -->
            <osSpecifics>
                <osSpecific>
                    <osFamily>any</osFamily> <!-- 支持任何操作系统 -->
                    <packages>
                        <package>
                            <name>redis_${stack_version}</name>
                        </package>
                    </packages>
                </osSpecific>
            </osSpecifics>

            <!-- Redis 服务健康检查 -->
            <commandScript>
                <script>scripts/service_check.py</script> <!-- 健康检查 Python 脚本 -->
                <scriptType>PYTHON</scriptType>
                <timeout>300</timeout>
            </commandScript>

            <!-- Redis 服务不依赖其他服务 -->
            <!-- 如果有其他依赖项,可以在这里定义 -->

            <!-- 配置依赖 -->
            <configuration-dependencies>
                <config-type>redis-site</config-type>
                <config-type>redis-env</config-type>
            </configuration-dependencies>
        </service>
    </services>
</metainfo>

在这个文件中,我们定义了 Redis 集群的三个关键组件: Redis MasterRedis SlaveRedis Client。这些组件由 Python 脚本控制,它们的详细定义帮助 Ambari 在集群中进行服务管理。

2. configFiles 的作用 📂

configFiles 是 Redis 配置文件的重要部分。它的作用可以归纳为以下几点:

  1. type:指定生成文件的类型(如 xmlenvproperties 等)。
  2. fileName:指定生成的文件名称。
  3. dictionary:包含配置属性的数据字典,这与 Ambari 内部的配置包管理相关。

在这里插入图片描述

2.1 配置后的效果 🎯

在这里插入图片描述

下载客户端配置可以把当前环境的配置导出

请求地址:http://localhost:28080/api/v1/clusters/dev/services/REDIS/components/REDIS_CLIENT?format=client_config_tar

他会把配置全部导出,并可以查看实时的配置,但是前提要配置正确

在这里插入图片描述

2.2 配置作用域 🔍

根据代码的初步猜测,配置文件的定义仅对 metainfo/services/service/components/component/ 下,name 包含 _CLIENT 的组件生效。这意味着配置文件将主要用于客户端组件。

<?xml version="1.0"?>
<metainfo>
    <services>
        <service>
            <!-- Redis 集群组件定义 -->
            <components>
                <!-- Redis 主节点组件 -->
                <component>
                    <name>REDIS_MASTER</name>
                    <!-- 非重点忽略 -->
                </component>
                <!-- Redis 从节点组件 -->
                <component>
                    <name>REDIS_SLAVE</name>
                    <!-- 非重点忽略 -->
                </component>

                <!-- Redis 客户端组件 -->
                <component>
                    <name>REDIS_CLIENT</name>
                    <displayName>Redis Client</displayName>
                     <!-- 核心参数-------核心中的核心 请往这里看👀 -->
                     <!-- 核心参数-------核心中的核心 请往这里看👀 -->
                    <configFiles>
                        <configFile>
                            <type>xml</type>
                            <fileName>redis-site.xml</fileName>
                            <dictionaryName>redis-site</dictionaryName>
                        </configFile>
                        <configFile>
                            <type>env</type>
                            <fileName>redis-env.sh</fileName>
                            <dictionaryName>redis-env</dictionaryName>
                        </configFile>
                    </configFiles>
                    <!-- 核心参数-------核心中的核心 请往这里看👀 -->
                     <!-- 核心参数-------核心中的核心 请往这里看👀 -->
                </component>
            </components>
        </service>
    </services>
</metainfo>

这段代码定义了客户端的配置文件,它们将在生成时渲染为 xmlenv 格式的文件。

在这里插入图片描述

代码片段如下:

package org.apache.ambari.server.state;

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlElements;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

@XmlAccessorType(XmlAccessType.FIELD)
public class ComponentInfo {
  private String name;
  private String displayName;
  private String category;
  private boolean deleted;
  private String cardinality;
  
  @XmlElement(name="versionAdvertised")
  private Boolean versionAdvertisedField;
  //省略无关部分内容   
  //省略无关部分内容  
  //省略无关部分内容 
    
  /**
   * Client configuration files
   * List of files to download in client configuration tar
   */
  // 核心参数-------核心中的核心 请往这里看👀 
  // 核心参数-------核心中的核心 请往这里看👀 
  @XmlElementWrapper(name = "configFiles")
  @XmlElements(@XmlElement(name = "configFile"))
  private List<ClientConfigFileDefinition> clientConfigFiles;
  // 核心参数-------核心中的核心 请往这里看👀 
  // 核心参数-------核心中的核心 请往这里看👀
    
  //省略无关部分内容   
  //省略无关部分内容  
  //省略无关部分内容   
  /**
   * Added at schema ver 2
   */
  @XmlElementWrapper(name="customCommands")
  @XmlElements(@XmlElement(name="customCommand"))
  private List<CustomCommandDefinition> customCommands;

  /**
   * bulk commands shown in the Hosts actions
   * */
  @XmlElement(name="bulkCommands")
  private BulkCommandDefinition bulkCommandDefinition;

  /**
   * Component dependencies to other components.
   */
  @XmlElementWrapper(name="dependencies")
  @XmlElements(@XmlElement(name="dependency"))
  private List<DependencyInfo> dependencies = new ArrayList<>();

  @XmlElementWrapper(name="configuration-dependencies")
  @XmlElements(@XmlElement(name="config-type"))
  private List<String> configDependencies;

  /**
   * Auto-deployment information.
   * If auto-deployment is enabled and the component doesn't meet the cardinality requirement,
   * the component is auto-deployed to the cluster topology.
   */
  @XmlElement(name="auto-deploy")
  private AutoDeployInfo autoDeploy;

  @XmlElements(@XmlElement(name = "recovery_enabled"))
  private boolean recoveryEnabled = false;

  /**
   * Used to determine if reassign is allowed
   * */
  @XmlElements(@XmlElement(name = "reassignAllowed"))
  private String reassignAllowed;

  private String timelineAppid;

  @XmlElement(name="customFolder")
  private String customFolder;
  //省略无关部分内容   
  //省略无关部分内容  
  //省略无关部分内容  
}



2.3 type 类型的选择 🎛️

⬇️⬇️⬇️查看全部内容⬇️⬇️⬇️


更多详细内容请关注我们的微信公众号:发送"文章"关键字获取

或加入QQ1群,了解版本动向,解答大数据问题。


⬆️⬆️⬆️查看全部内容⬆️⬆️⬆️

3.5 打包与下载 🗂️

生成配置文件后,Ambari 会将这些文件打包并返回给用户。这个打包和下载的过程发生在 ComponentService.java 中,通过 createClientConfigResource 方法实现:

private Response createClientConfigResource(String body, HttpHeaders headers, UriInfo ui,
                                      String componentName) {
    String fileName =  filePrefixName + "-configs" + Configuration.DEF_ARCHIVE_EXTENSION;
    Response response = handleRequest(headers, body, ui, Request.Type.GET,
            createResource(Resource.Type.ClientConfig, mapIds));

    // 如果响应有错误,直接返回
    if (response.getStatus() != 200) {
      return response;
    }

    Response.ResponseBuilder rb = Response.status(Response.Status.OK);
    String tmpDir = new Configuration().getProperty(Configuration.SERVER_TMP_DIR.getKey());
    File file = new File(tmpDir, fileName);
    InputStream resultInputStream = new FileInputStream(file);

    String contentType = Configuration.DEF_ARCHIVE_CONTENT_TYPE;
    rb.header("Content-Disposition",  "attachment; filename=\"" + fileName + "\"");
    rb.entity(resultInputStream);
    return rb.type(contentType).build();
}

该方法生成包含 Redis 配置文件的压缩包,并通过 HTTP 响应返回给用户进行下载。最终,用户可以获取包含所有配置文件的 .tar.gz 包。

在这里插入图片描述


3.6 最后 📝

从 HTTP 请求到配置文件生成和打包,Ambari 的整个流程可以总结如下:

  1. 用户发起 HTTP 请求,下载 Redis 客户端的配置文件包。

… 省略…

6.最后,Ambari 将打包好的配置文件通过 HTTP 响应返回给用户。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2174317.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

告别选择困难症,这些AI高效工具正改变着500万创作者的工作方式

本文背景 有个小伙子叫李光头&#xff0c;最近他为了紧跟 AI 的潮流&#xff0c;下载了不少新玩意&#xff1a;用 GPT 来写文案&#xff0c;用 Midjourney 来画图。 可当他准备开始这周的工作时&#xff0c;却发现自己陷入了一种奇怪的困境&#xff1a;虽然有了很多 AI 工具&am…

解决在vue项目中index.html中直接引入Cesium.js时候报错:Cesium is not defined

在vue项目直接引入Cesium&#xff1a; 报错&#xff1a;Cesium is not defined 原因&#xff1a;eslint报错&#xff0c;找不到Cesium 这个全局变量。 解决&#xff1a;向ESLint规则中添加全局变量&#xff1a; 找到package.json文件&#xff0c;在eslintConfig里加入 "…

【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯&#xff0c;你们的点赞收藏是我前进最大的动力&#xff01;&#xff01;希望本文内容能够帮助到你&#xff01; 目录 一&#xff1a;单例模式&#xff08;singleton&#xff09; 1&#xff1a;概念 二&#xff1a;“饿汉模…

CentOS 修改服务器登录密码的完整指南

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

众数问题,

在本实验中&#xff0c;需要编写一个程序来处理一组输入数据&#xff0c;找出其中的众数&#xff0c;即出现次数最多的数字。程序会读取文件中的数据进行处理&#xff0c;并将结果与标准答案进行比对&#xff0c;判断程序输出是否正确。 #include <bits/stdc.h> #define …

Spring-bean实例化的方式

前言 什么是bean的实例化&#xff1f; 通常我们使用spring管理java的对象&#xff0c;一般称这个java对象为一个实例化的bean。bean的实例化方式&#xff0c;实际上就是spring创建并管理java对象实例的方式 bean的实例化方式 在Java和Spring框架的上下文中&#xff0c;Bean的实…

测试用例的举例

1. 基于测试公式设计测试用例 通过功能&#xff0c;性能&#xff0c;安全性&#xff0c;界面&#xff0c;安全性&#xff0c;易用&#xff0c;兼容对于一个水杯进行测试用例的设计&#xff1b; 对于一个软件的测试用例设计&#xff1a; 功能&#xff1a;软件本质上能够用来干什…

京东健康高级项目经理段一凡受邀为第四届中国项目经理大会演讲嘉宾

全国项目经理专业人士年度盛会 京东健康技术产品部高级项目经理段一凡先生受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾&#xff0c;演讲议题为“项目经理如何做好资源管理——货币化资源管理实践”。大会将于10月26-27日在北京举办…

C++ | 定长内存池 | 对象池

文章目录 C | 定长内存池 | 对象池一、内存池的引入二、代码中的内存池实现 - ObjectPool类&#xff08;一&#xff09;整体结构&#xff08;二&#xff09;内存分配 - New函数&#xff08;三&#xff09;内存回收 - Delete函数 三、内存池在TreeNode示例中的性能测试演示四、脱…

文件和目录

文件和目录 获取文件属性 通过 ls 命令可以查看到文件的很多属性内容&#xff0c;这些文件属性的内容可以通过以下几个函数获取: #include <sys/types.h> #include <sys/stat.h> #include <unistd.h>int stat(const char *pathname, struct stat *statbuf…

第一节- C++入门

1. &#x1f680;&#x1f680;C关键字(C98) &#x1f33c;&#x1f33c;C总计63个关键字&#xff0c;C语言32个关键字 ps&#xff1a;下面我们只是看一下C有多少关键字&#xff0c;不对关键字进行具体的讲解。后面我们学到以后再细讲。 2. 命名空间 在C/C中&#xff0c;变量…

基于深度学习的学情智能监测系统设计与实现(PYQT+YOLOv8+训练数据集+论文+部署文档)

摘要 本文设计并实现了一个基于深度学习的学情智能监测系统&#xff0c;该系统通过对学生学习状态的自动监测与分析&#xff0c;旨在辅助教师更精准地把握学生学习情况&#xff0c;进而优化教学策略和提升教学质量。在论文中&#xff0c;详细描述了系统的设计与实现过程&#…

【web开发】Spring Boot 快速搭建Web项目(三)

Date: 2024.08.31 18:01:20 author: lijianzhan 简述&#xff1a;根据上篇原文Spring Boot 快速搭建Web项目&#xff08;二&#xff09;&#xff0c;由于已经搭建好项目初始的框架&#xff0c;以及自动创建了一个启动类文件&#xff08;TestWebApplication.java&#xff09; …

一种路径敏感的数据依赖分析算法

Falcon 1.方法1.1.Basic Rule1.2.改进算法1.3.跨函数分析 2.Evaluation2.1.设置2.2.value-flow分析2.3.Thin Slicing2.4.Bug Detection 参考文献 这篇工作发表于PLDI 24&#xff0c;提出了一种context- 以semi-path-sensitive的数据依赖分析算法&#xff0c;解决path-sensitive…

如何使用ssm实现基于web的山东红色旅游信息管理系统的设计与实现

TOC ssm716基于web的山东红色旅游信息管理系统的设计与实现jsp 绪论 1.1研究背景 从古到今&#xff0c;信息的录入&#xff0c;存储&#xff0c;检索都受制于社会生产力的发展&#xff0c;不仅仅浪费大量的人力资源还需要浪费大量的社会物资&#xff0c;并且不能长时间的保…

信息安全工程师(24)网络安全体系建设原则与安全策略

一、网络安全体系建设原则 网络空间主权原则&#xff1a;维护网络空间主权是网络安全的首要原则。这要求国家在网络空间的管理、运营、建设和使用等方面具有完全自主的权利和地位&#xff0c;不受任何外部势力的干涉和侵犯。网络安全与信息化发展并重原则&#xff1a;网络安全与…

Midjourney 使用教程——入门篇

目录标题 一、前提二、Midjourney 使用文档三、如何注册使用Midjourney四、结合GPT快速生成Midjourney 构图指令五、其他 一、前提 先连接国外代理服务器。没有的可以退下了。 二、Midjourney 使用文档 Discord 快速入门 注意&#xff1a;如图所示&#xff0c;需要10美刀一…

【HTML5】html5开篇基础(4)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

已解决:“ModuleNotFoundError:No module named apex”

首先遇到这个问题不可以直接简单粗暴的使用&#xff1a;“pip install apex”直接安装模块来解决&#xff0c;这样的话程序还是会继续报错“ModuleNotFoundError&#xff1a;No module named apex”&#xff0c;别问我怎么知道&#xff0c;问就是深受其害&#xff01; 去网上查…

Android实现图片滚动和页签控件功能的实现代码

首先题外话&#xff0c;今天早上起床的时候&#xff0c;手滑一下把我的手机甩了出去&#xff0c;结果陪伴我两年半的摩托罗拉里程碑一代就这么安息了&#xff0c;于是我今天决定怒更一记&#xff0c;纪念我死去的爱机。 如果你是网购达人&#xff0c;你的手机上一定少不了淘宝…