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

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.xdnf.cn/news/1549289.html

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

相关文章

VulnHub-SickOs1.1靶机笔记

SickOs1.1靶机笔记 概述 Vulnhub的靶机sickos1.1 主要练习从互联网上搜取信息的能力&#xff0c;还考察了对代理使用&#xff0c;目录爆破的能力&#xff0c;很不错的靶机 靶机地址&#xff1a; 链接: https://pan.baidu.com/s/1JOTvKbfT-IpcgypcxaCEyQ?pwdytad 提取码: yt…

Kali Linux上安装远程桌面服务VNC

在Kali Linux上安装远程桌面服务VNC&#xff0c;可以按照以下步骤进行&#xff1a; 一、安装VNC Server 更新软件包列表&#xff1a; 在终端中运行以下命令&#xff0c;以确保你的软件包列表是最新的。 sudo apt update在执行更新之前会先验证当前账号密码&#xff0c;输入密码…

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

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…

大数据毕业设计选题推荐-广东旅游数据分析系统-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

【牛Y】3DMAX快速构建低多边形城市建筑和道路插件CityBlocks教程

3DMAX快速构建低多边形城市建筑和道路插件CityBlocks&#xff0c;该插件功能主要分为两部分&#xff1a;一键城市建筑生成和一键城市道路生成。可用于城市配景建模、地图三维建模等使用。内置多种建筑组合方式&#xff0c;可使生成的建筑配景更加丰富、富于变换&#xff01; 【…

C++友元和运算符重载

目录 一. 友元 friend 1.1 概念 1.2 友元函数 1.3 友元类 1.4 友元成员函数 二. 运算符重载 2.1 概念 2.2成员函数运算符重载 2.3 成员函数运算符重载 2.4 特殊运算符重载 2.4.1 赋值运算符重载 2.4.2 类型转换运算符重载 2.5 注意事项 三、std::string 字符串类…

sentinel原理源码分析系列(一)-总述

背景 微服务是目前java主流开发架构&#xff0c;微服务架构技术栈有&#xff0c;服务注册中心&#xff0c;网关&#xff0c;熔断限流&#xff0c;服务同学&#xff0c;配置中心等组件&#xff0c;其中&#xff0c;熔断限流主要3个功能特性&#xff0c;限流&#xff0c;熔断&…

基于单片机语音智能导盲仪仿真设计

文章目录 前言资料获取设计介绍设计程序具体实现截图设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们…

计算机毕业设计Python+Spark知识图谱微博舆情预测 微博推荐系统 微博可视化 微博数据分析 微博大数据 微博爬虫 Hadoop 大数据毕业设计

《PythonSpark知识图谱微博舆情预测》开题报告 一、课题背景与意义 随着互联网技术的飞速发展&#xff0c;社交媒体平台如微博已成为人们表达观点、交流信息的重要渠道。微博每天产生海量的数据&#xff0c;这些数据中蕴含着丰富的社会情绪、事件动态等信息&#xff0c;对于政…

AI周报(9.22-9.28)

AI应用-Siipet宠物沟通师 Siipet是一款由SiiPet公司推出的创新宠物行为分析相机&#xff0c;旨在通过尖端技术加深宠物与主人之间的情感联系。这款相机利用先进的AI算法&#xff0c;能够自动识别和分析家中宠物的行为&#xff0c;并提供定制化的护理建议。 SiiPet相机的核心功…

影院管理革新:小徐的Spring Boot应用

第二章开发技术介绍 2.1相关技术 小徐影城管理系统是在Java MySQL开发环境的基础上开发的。Java是一种服务器端脚本语言&#xff0c;易于学习&#xff0c;实用且面向用户。全球超过35&#xff05;的Java驱动的互联网站点使用Java。MySQL是一个数据库管理系统&#xff0c;因为它…

进程间通信(一)【管道通信(下)】

目录 3. 编码通信3.1 管道的四种情况3.2 管道的大小3.3 总结管道的五个特征 4. 管道的应用场景4.1 命令行中的管道4.2 进程池中的管道 3. 编码通信 // 创建管道文件的系统调用 // pipefd&#xff1a;输出型参数&#xff0c;将以读写方式分别打开的文件的文件描述符带出&#x…

2025 年 IT 前景:机遇与挑战并存,人工智能和云计算成重点

云计算de小白 投资人工智能&#xff1a;平衡潜力与实用性 到 2025 年&#xff0c;人工智能将成为 IT 支出的重要驱动力&#xff0c;尤其是在生成式人工智能领域。人工智能的前景在于它有可能彻底改变业务流程、增强决策能力并开辟新的收入来源。然而&#xff0c;现实情况更加微…

突发:OpenAI o1颠覆了人类,o1为什么超越了人类,sam万字长文解读

要点速读 2024 年 9 月 12 日&#xff0c;OpenAI 发布了其最新的人工智能模型——o1&#xff08;Learning to Reason with LLMs[1]&#xff09;&#xff0c;这是一款经过强化学习训练的大型语言模型&#xff0c;能够执行复杂的推理任务。相比于此前的 GPT-4o&#xff08;GPT-4…

上交所服务器崩溃:金融交易背后的技术隐患暴露杭州BGP高防服务器43.228.71.X

一、上交所宕机事件始末 2024 年 9 月 27 日&#xff0c;上交所交易系统突发崩溃&#xff0c;这一事件犹如一颗巨石投入平静的湖面&#xff0c;引起了轩然大波。当天上午&#xff0c;众多投资者反馈券商交易出现延迟问题&#xff0c;随后上交所发布了《关于股票竞价交易出现异常…

【中医智慧解糖忧】血糖高?中医调理有妙招,自然平衡血糖不是梦!

在快节奏的现代生活中&#xff0c;高血糖已成为困扰许多人的健康难题。面对这一挑战&#xff0c;许多人第一时间想到的是西医的药物治疗&#xff0c;却往往忽略了中医这一博大精深的宝库。事实上&#xff0c;中医以其独特的理论体系和丰富的实践经验&#xff0c;在调理血糖方面…

C++里的随机数

想用C做最基础的猜数字,肯定少不了随机数; srand(unsigned(time(NULL))); rand() //是生成一个随机数 rand()%1001//就是一个从一到一百的随机数 合体: #include <iostream> #include <cstdlib> #include <time.h> int main() { int g 0; while (g < …

NSSCTF [HDCTF 2023]easy_re

文件有壳 先用upx脱壳 upx -d 文件地址 将文件拖入IDA shiftF12查看可疑字符串 先进入主函数查看 继续跟进function函数 发现这就是一个base64解码 void __cdecl func(char *x, char *y) {unsigned __int8 *v3; // 用于暂存字符的指针unsigned __int8 v4; // 用于暂存单个字符…

MyBatis——Plus——入门

常用注解 MyBatis——Plus怎么知道他是访问哪张表 常用配置

前端常用动画 直接可以用的代码加详细流程和案例 能应付90%的开发场景

前端项目&#xff0c;特别是Toc的项目&#xff0c;一定少不了各种动效和动画效果。 葫芦七兄弟&#xff1a; CSS 动画 优点&#xff1a;兼容性强&#xff1b;浏览器针对的流畅度优化&#xff1b;语法简单&#xff1b;某些属性&#xff08;如 transform 和 opacity&#xff09;…