Jast blog Jast blog
首页
  • 《Ambari自定义开发教程》笔记
  • 《CDH教程》笔记
  • 《ClickHouse教程》笔记
  • 《HDFS教程》笔记
  • 《DolphinScheduler教程》笔记
  • 《Hbase教程》笔记
  • 《Iceberg教程》笔记
  • 《Hive教程》笔记
  • 《Flume教程》笔记
  • 《Kafka教程》笔记
  • 《Impala教程》笔记
  • 《Hue教程》笔记
  • 《Spark教程》笔记
  • 《Flink教程》笔记
  • 《Phoenix教程》笔记
  • 《ElasticSearch教程》笔记
  • 《Kylin教程》笔记
  • 《Storm教程》笔记
  • 《Yarn教程》笔记
  • 《Presto教程》笔记
  • 《图数据库教程》笔记
  • 《Kerberos教程》笔记
  • 《Maxwell教程》笔记
  • 《MinIO教程》笔记
  • 《DataX教程》笔记
  • 《Superset教程》笔记
  • 《IOTDB教程》笔记
  • 《大数据相关》笔记
  • 《PaddleNLP教程》笔记
  • 《Nginx教程》笔记
  • 《Java技术文档》
  • 《Maven教程》笔记
  • 《IDEA使用教程》
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档

Jast-zsh

如果你知道你要去哪里,全世界都会给你让路。
首页
  • 《Ambari自定义开发教程》笔记
  • 《CDH教程》笔记
  • 《ClickHouse教程》笔记
  • 《HDFS教程》笔记
  • 《DolphinScheduler教程》笔记
  • 《Hbase教程》笔记
  • 《Iceberg教程》笔记
  • 《Hive教程》笔记
  • 《Flume教程》笔记
  • 《Kafka教程》笔记
  • 《Impala教程》笔记
  • 《Hue教程》笔记
  • 《Spark教程》笔记
  • 《Flink教程》笔记
  • 《Phoenix教程》笔记
  • 《ElasticSearch教程》笔记
  • 《Kylin教程》笔记
  • 《Storm教程》笔记
  • 《Yarn教程》笔记
  • 《Presto教程》笔记
  • 《图数据库教程》笔记
  • 《Kerberos教程》笔记
  • 《Maxwell教程》笔记
  • 《MinIO教程》笔记
  • 《DataX教程》笔记
  • 《Superset教程》笔记
  • 《IOTDB教程》笔记
  • 《大数据相关》笔记
  • 《PaddleNLP教程》笔记
  • 《Nginx教程》笔记
  • 《Java技术文档》
  • 《Maven教程》笔记
  • 《IDEA使用教程》
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • Ambari自定义服务开发-项目初始化
  • Ambari自定义服务开发-组件安装启动停止卸载介绍
  • Ambari自定义服务开发-自定义服务配置文件在Ambari中的设置方法
  • Ambari自定义服务开发-自定义服务配置文件生成
    • 方法一:创建模板文件
      • 生成方法
    • 方法二:配置文件全部内容在Ambari WebUI中展示修改配置
      • InlineTemplate 和 Template 区别
    • 方法三:通过Ambari WebUI配置Custom XX实现参数新增
      • 生成xml配置文件
      • 生成properties配置文件
  • Ambari自定义服务开发-代码如何获取配置参数
  • Ambari自定义服务开发-修改配置文件提示服务重启
  • Ambari自定义服务开发-自定义告警
  • Ambari自定义服务开发-查看历史版本配置
  • Ambari自定义服务开发-调试方法
  • Ambari自定义服务开发-执行Shell命令
  • Ambari自定义服务开发-快捷访问链接生成
  • Ambari自定义服务开发-服务组件启动顺序设置
  • Ambari自定义服务开发-服务组件安装依赖另外一个组件设置
  • Ambari自定义服务开发-监控指标Metrics介绍
  • Ambari自定义服务开发-使用客户端下载配置文件
  • Ambari自定义服务开发-美化(增强型)配置参数设置
  • Ambari自定义服务开发-自定义开发安装包整合到Ambari-Server中
  • Ambari自定义服务开发-自定义脚本运行
  • Ambari自定义服务开发-常用函数
  • Ambari自定义服务开发问题处理-中文乱码
  • Ambari自定义服务开发问题处理-告警项UNKWN
  • Ambari自定义服务开发问题处理-Agent安装服务报错unknown
  • Ambari自定义服务开发问题处理-修改源码配置,服务重启后未生效
  • 《Ambari自定义开发教程》笔记
Jast-zsh
2024-04-08
目录

Ambari自定义服务开发-自定义服务配置文件生成

[toc]

在Ambari WebUI中配置的参数可以通过三种方式生成服务的真实配置文件。

  • 创建模板文件
  • 配置文件全部内容在Ambari WebUI中展示修改配置
  • 通过Ambari WebUI配置Custom XX实现参数新增

# 方法一:创建模板文件

默认读取模板目录为package/templates

我们在templates目录下创建模板文件test-common.conf.j2模板文件,内容如下

{ {doris_user}} - test - version:{ {version}} - { {doris_pid_dir}}
1
  • { {doris_user}} 获取params.py中的doris_user变量
    • doris_user = config['configurations']['doris-env']['doris_user']
  • { {version}} 获取params.py中的version变量
    • version = default("/commandParams/version", "3.1.5.0-152")
  • { {doris_pid_dir}}获取params.py中的doris_pid_dir变量
    • doris_pid_dir = config['configurations']['doris-env']['doris_pid_dir'].rstrip("/")
    • 这个值通过WebUI中doris-env配置文件配置的

# 生成方法

tip:一般生成配置文件都是在configure()方法中创建,start() 中调用 configure() 方法

File(format("{doris_fe_conf_base_dir}/fe2.conf"),
             owner=params.doris_user,
             group=params.user_group,
             content=Template('fe.conf.j2')
             )
1
2
3
4
5

Template():会把fe.conf.j2文件中{ {xxx}}引用的内容转换为params.py获取到的值

# 方法二:配置文件全部内容在Ambari WebUI中展示修改配置

第一种方法我们可以预设很多配置参数,但是如果遇到我们没有预设,需要新增的情况就不支持,这时我们第二种方法就可以支持(当然第三种也支持,下面会详细介绍)

这里我们用doris的fe的配置文件fe.conf来举例,fe.conf配置项比较多不可能全部都提取出来,这时我们将配置文件当成参数放到configuration/fe.xml中,就可以自定义配置修改参数了。

configuration.xml配置文件内容为:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>CUR_DATE</name>
        <display-name>CUR_DATE</display-name>
        <value>`date +%Y%m%d-%H%M%S`</value>
        <description></description>
    </property>
    <property>
        <name>LOG_DIR</name>
        <display-name>LOG_DIR</display-name>
        <value>/var/log/doris</value>
        <description></description>
    </property>
    <property>
        <name>JAVA_OPTS</name>
        <display-name>JAVA_OPTS</display-name>
        <value>"-Djavax.security.auth.useSubjectCredsOnly=false -Xss4m -Xmx8192m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:$DORIS_HOME/log/fe.gc.log.$CUR_DATE"</value>
        <description></description>
    </property>
    <property>
        <name>JAVA_OPTS_FOR_JDK_9</name>
        <display-name>JAVA_OPTS_FOR_JDK_9</display-name>
        <value>"-Djavax.security.auth.useSubjectCredsOnly=false -Xss4m -Xmx8192m -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xlog:gc*:$DORIS_HOME/log/fe.gc.log.$CUR_DATE:time"</value>
        <description></description>
    </property>
    <property>
        <name>sys_log_level</name>
        <display-name>sys_log_level</display-name>
        <value>INFO</value>
        <description></description>
    </property>
    <property>
        <name>sys_log_mode</name>
        <display-name>sys_log_mode</display-name>
        <value>NORMAL</value>
        <description></description>
    </property>
    <property>
        <name>meta_dir</name>
        <display-name>meta_dir</display-name>
        <value>/data/doris-meta</value>
        <description></description>
    </property>
    <property>
        <name>http_port</name>
        <display-name>http_port</display-name>
        <value>8030</value>
        <description></description>
    </property>
    <property>
        <name>rpc_port</name>
        <display-name>rpc_port</display-name>
        <value>9020</value>
        <description></description>
    </property>
    <property>
        <name>query_port</name>
        <display-name>query_port</display-name>
        <value>9030</value>
        <description></description>
    </property>
    <property>
        <name>edit_log_port</name>
        <display-name>edit_log_port</display-name>
        <value>9010</value>
        <description></description>
    </property>
    <property>
        <name>content</name>
        <display-name>Doris config file template</display-name>
        <value-attributes>
            <!-- 默认为input输入框,当type为content时,即为文本框 -->
            <type>content</type>
            <!-- 是否显示配置名称 -->
            <show-property-name>false</show-property-name>
        </value-attributes>
        <description>This is the template for fe.conf file</description>
        <value>
# Jast
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

#####################################################################
## The uppercase properties are read and exported by bin/start_fe.sh.
## To see all Frontend configurations,
## see fe/src/org/apache/doris/common/Config.java
#####################################################################

CUR_DATE={ {CUR_DATE}}

# the output dir of stderr and stdout
LOG_DIR ={ {LOG_DIR}}

JAVA_OPTS={ {JAVA_OPTS}}

# For jdk 9+, this JAVA_OPTS will be used as default JVM options
JAVA_OPTS_FOR_JDK_9={ {JAVA_OPTS_FOR_JDK_9}}

##
## the lowercase properties are read by main program.
##

# INFO, WARN, ERROR, FATAL
sys_log_level = { {sys_log_level}}

# NORMAL, BRIEF, ASYNC
sys_log_mode = { {sys_log_mode}}

# store metadata, must be created before start FE.
# Default value is ${DORIS_HOME}/doris-meta
meta_dir = { {meta_dir}}

# Default dirs to put jdbc drivers,default value is ${DORIS_HOME}/jdbc_drivers
# jdbc_drivers_dir = ${DORIS_HOME}/jdbc_drivers

http_port = { {http_port}}
rpc_port = { {rpc_port}}
query_port = { {query_port}}
edit_log_port = { {edit_log_port}}

# Choose one if there are more than one ip except loopback address.
# Note that there should at most one ip match this list.
# If no ip match this rule, will choose one randomly.
# use CIDR format, e.g. 10.10.10.0/24 or IP format, e.g. 10.10.10.1
# Default value is empty.
# priority_networks = 10.10.10.0/24;192.168.0.0/16

# Advanced configurations
# log_roll_size_mb = 1024
# sys_log_dir = ${DORIS_HOME}/log
# sys_log_roll_num = 10
# sys_log_verbose_modules = org.apache.doris
# audit_log_dir = ${DORIS_HOME}/log
# audit_log_modules = slow_query, query
# audit_log_roll_num = 10
# meta_delay_toleration_second = 10
# qe_max_connection = 1024
# qe_query_timeout_second = 300
# qe_slow_log_ms = 5000
        </value>
    </property>

</configuration>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159

在master.py中configure方法会读取配置文件进行创建

# 初始化配置文件 , 配置文件中参数取值读取的是params.py里的变量,不是直接读取的fe.xml变量名
doris_fe_conf = InlineTemplate(params.doris_fe_conf)
File(format("{doris_fe_conf_base_dir}/fe.conf"),
     owner=params.doris_user,
     group=params.user_group,
     content=doris_fe_conf)
1
2
3
4
5
6

params.doris_fe_conf 读取的内容params.py为doris_fe_conf = config['configurations']['fe']['content']

这个时候我们就可以在Ambari WebUI中的fe.conf文件,进行自定义参数配置了,随便在最后面进行修改。

上面我们添加了ABC=1234重启服务验证:

image-20240226114619819

验证

# cat /usr/hdp/3.1.5.0-152/apache-doris-2.0.2-bin-x64/fe/conf/fe.conf 
....
ABC=1234
1
2
3

# InlineTemplate 和 Template 区别

上面有用到InlineTemplate方法,这里对这两个方法进行介绍

这两个方法返回的接口都是将{ {xxx}}变量进行转换后的文本

  • InlineTemplate 传入的是文本内容

  • Template 传入的是文本路径

方法二相对于方法一,支持了自定义修改配置文件参数,可以随意新增我们没有预设的配置。但这种方法我们将整个配置文件都暴露在Ambari WebUI,下面方法三我们通过在Ambari WebUICustom xx中实现新增配置参数。

# 方法三:通过Ambari WebUI配置Custom XX实现参数新增

上面方法二实现自定义新增配置,但是整个配置文件文件都是暴露在外边,这里我们通过使用Ambari WebUICustom XX进行新增配置。

在WebUI页面中我们可以看到一个配置文件有两种配置:Advanced fe和Custom fe两种

image-20240226115420138

不同类型的配置文件获取Custom fe写入配置文件方式不同

# 生成xml配置文件

在configure()方法中添加以下代码生成配置文件

XmlConfig(format("{doris_fe_conf_base_dir}/doris-env.xml"), # 生成的配置文件绝对路径
                  configurations=params.config['configurations']['doris-env'], # configurations 固定值,doris-env 读取的configuration目录的.xml文件名前缀
                  configuration_attributes=params.config['configurationAttributes']['doris-env'],# configurationAttributes 固定值,doris-env 读取的configuration目录的.xml文件名前缀
                  owner=params.doris_user, # 文件所属用户
                  group=params.user_group  # 文件所属用户组
                  )
# 和上面实现的完全相同
XmlConfig("doris-env2.xml", # 生成的配置文件名称
                  conf_dir=params.doris_fe_conf_base_dir, # 生成的配置文件目录
                  configurations=params.config['configurations']['doris-env'], # configurations 固定值,doris-env 读取的configuration目录的.xml文件名前缀
                  configuration_attributes=params.config['configurationAttributes']['doris-env'],# configurationAttributes 固定值,doris-env 读取的configuration目录的.xml文件名前缀
                  owner=params.doris_user, # 文件所属用户
                  group=params.user_group  # 文件所属用户组
                  )
1
2
3
4
5
6
7
8
9
10
11
12
13
14

执行后会自动生成doris-env.xml文件。

tip:这里只是用作演示XmlConfig方法,实际Doris FE是不用doirs-env.xml这个配置文件

# 生成properties配置文件

在params.py中创建doris_properties_map变量,用来接收所有配置参数

if 'fe' in config['configurations']:
    doris_properties_map = config['configurations']['fe']
else:
    doris_properties_map = {}
    
enable_test=True
1
2
3
4
5
6

创建模板文件templates/fe.conf.j2来定义配置文件内容结构

# loop output paramaters for doris_properties_map
{% for key, value in doris_properties_map.iteritems() -%}
  { {key}}={ {value}}
{% endfor %}

# if enable_test is true,execute this code,enable_test is defined in params.py.
{% if enable_test -%}
# if fe.test.field is defined in doris_properties_map , output fe.test.field=default value
{% if not "fe.test.field" in doris_properties_map -%}
fe.test.field=default value
{% endif %}
{% endif %}
1
2
3
4
5
6
7
8
9
10
11
12

tip: 在.j2文件中获取params.py变量,直接使用变量名,比如上面的enable_test就是直接获取的,不能使用{ {xxx}}获取

在configure()中添加方法

File(format("{doris_fe_conf_base_dir}/fe.properties"),
             content=Template('fe.conf.j2'),
             owner=params.doris_user,
             group=params.user_group,
             mode=0755
             )
1
2
3
4
5
6

启动服务后查看fe.properties文件

# loop output paramaters for doris_properties_map
LOG_DIR=/var/log/doris
JAVA_OPTS_FOR_JDK_9="-Djavax.security.auth.useSubjectCredsOnly=false -Xss4m -Xmx8192m -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xlog:gc*:$DORIS_HOME/log/fe.gc.log.$CUR_DATE:time"
rpc_port=9020
meta_dir=/data/doris-meta

# if enable_test is true,execute this code,enable_test is defined in params.py.
# if fe.test.field is defined in doris_properties_map , output fe.test.field=default value
fe.test.field=default value
1
2
3
4
5
6
7
8
9
上次更新: 2024/04/08, 10:55:49
Ambari自定义服务开发-自定义服务配置文件在Ambari中的设置方法
Ambari自定义服务开发-代码如何获取配置参数

← Ambari自定义服务开发-自定义服务配置文件在Ambari中的设置方法 Ambari自定义服务开发-代码如何获取配置参数→

最近更新
01
Linux可视化监控
02-26
02
Maven私服搭建
02-26
03
当ElasticSearch时间字段设置多个格式到底是用的哪个?
01-19
更多文章>
Theme by Vdoing | Copyright © 2016-2025 Jast-zsh | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式