#!/usr/bin/env python
# -*- coding: utf-8 -*--
"""
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.
"""
import json
import os
from resource_management.libraries.script.script import Script
from resource_management.core.logger import Logger
from resource_management.core.resources import Directory
from resource_management import *
# from elastic_common import kill_process
import pwd
import grp
from resource_management.core.logger import Logger
from time import sleep
class Master(Script):
def install(self, env):
import params
env.set_params(params)
# 下载Doris安装包
Execute('wget {0} -O apache-doris-2.0.2-bin-x64.tar.gz'.format(params.doris_download))
# 将安装包解压到指定目录
Execute('tar -zxvf apache-doris-2.0.2-bin-x64.tar.gz -C /usr/hdp/3.1.5.0-152/')
# 删除下载的安装包
Execute('rm -rf apache-doris-2.0.2-bin-x64.tar.gz')
# 初始化环境变量
cmd = format("cd {doris_scripts_dir}; chmod +x ./changeOsConf.sh && sh ./changeOsConf.sh")
Execute(cmd)
# 创建日志目录
Execute(format('mkdir -p {LOG_DIR} && chown -R {doris_user}:{user_group} {LOG_DIR}'))
# 将服务目录权限设置为doris
Execute(format('chown -R {doris_user}:{user_group} {doris_base_dir}'))
# 设置 pid 目录权限
Execute(format('mkdir -p {doris_pid_dir} && chown -R {doris_user}:{user_group} {doris_pid_dir}'))
Logger.info("Install complete")
def configure(self, env):
# Import properties defined in -config.xml file from the params class
import params
# This allows us to access the params.elastic_pid_file property as
# format('{elastic_pid_file}')
env.set_params(params)
# 初始化配置文件 , 配置文件中参数取值读取的是params.py里的变量,不是直接读取的fe.xml变量名
doris_fe_conf = InlineTemplate(params.doris_fe_conf)
Logger.info("path:"+params.doris_fe_conf)
Logger.info("read properties :"+format("{doris_fe_conf_base_dir}/fe.conf"))
File(format("{doris_fe_conf_base_dir}/fe.conf"),
owner=params.doris_user,
group=params.user_group,
content=doris_fe_conf)
File(format("{doris_fe_conf_base_dir}/fe2.conf"),
owner=params.doris_user,
group=params.user_group,
content=Template('fe.conf.j2')
)
print(params.config['configurations']['fe'])
XmlConfig(format("{doris_fe_conf_base_dir}/doris-env3.xml"), # 生成
configurations=params.config['configurations']['doris-env'],
configuration_attributes=params.config['configurationAttributes']['doris-env'],
owner=params.doris_user,
group=params.user_group
)
File(format("{doris_fe_conf_base_dir}/fe.properties"),
content=Template('fe.conf.j2'),
owner=params.doris_user,
group=params.user_group,
mode=0755
)
File(format("{doris_fe_conf_base_dir}/test-common.conf"),
owner=params.doris_user,
group=params.user_group,
content=Template('test-common.conf.j2')
)
# mkdir {meta_dir}
meta_dir = format("{meta_dir}")
Directory(meta_dir,
mode=0755,
cd_access='a',
owner=params.doris_user,
group=params.user_group,
create_parents=True
)
cmd = "chown -R {0}:{1} {2}".format(params.doris_user, params.user_group, meta_dir)
Execute(cmd)
Logger.info("Configuration complete")
def start(self, env):
import params
env.set_params(params)
# Configure Elasticsearch
self.configure(env)
# Start Elasticsearch
cmd = format("{doris_base_dir}/fe/bin/start_fe.sh --daemon")
Execute(cmd, user=params.doris_user)
# 获取Doris进程ID写入到文件
Execute(
'ps -ef | grep org.apache.doris.DorisFE | grep -v grep | awk \'{print $2}\' > ' + params.doris_pid_file,
user=params.doris_user)
# 1. 创建两个目录,一个目录是通过params.py获取到的目录,另外一个是指定的:/var/run/test目录
# 2. mode : 目录权限为0755
# 3. owner:目录所属用户
# 4. group:目录所属用户组
# 5. create_parents:父目录如果不存在,是否创建父目录
Directory(['/var/run/test2','/var/run/test'],
mode=0755,
cd_access='a',
owner=params.doris_user,
group=params.user_group,
create_parents=True
)
# 1. 创建两个目录,一个目录是通过params.py获取到的目录,另外一个是指定的:/var/run/test目录
# 2. mode :文件权限为0
# 3. owner:文件所属用户
# 4. group:文件所属用户组
# 5. content:文件创建后填写的内容
File(['/var/run/test/file2.txt', '/var/run/test/file.txt'],
mode=0644,
owner=params.doris_user,
group=params.user_group,
content='init content'
)
def stop(self, env):
import params
env.set_params(params)
# Kill掉 FE进程
Execute('ps -ef | grep org.apache.doris.DorisFE | grep -v grep | awk \'{print $2}\' | xargs kill -9',
user=params.doris_user,
ignore_failures=True)
# 删除pid文件
File([params.doris_pid_file],
action="delete")
# 1. 创建两个目录,一个目录是通过params.py获取到的目录,另外一个是指定的:/var/run/test目录
# 2. mode : 目录权限为0755
# 3. owner:目录所属用户
# 4. group:目录所属用户组
# 5. create_parents:父目录如果不存在,是否创建父目录
Directory(['/var/run/test2', '/var/run/test'],
action='delete',
owner=params.doris_user
)
# 1. 创建两个目录,一个目录是通过params.py获取到的目录,另外一个是指定的:/var/run/test目录
# 2. mode :文件权限为0
# 3. owner:文件所属用户
# 4. group:文件所属用户组
# 5. content:文件创建后填写的内容
File(['/var/run/test/file2.txt', '/var/run/test/file.txt'],
action='delete',
owner=params.doris_user
)
Logger.info("Stop complete!")
def status(self, env):
# Import properties defined in -env.xml file from the status_params class
import status_params
# This allows us to access the params.elastic_pid_file property as