本文目录导读:

我来为您提供一个自动配置Kylin OLAP引擎的脚本,这个脚本包含多个配置选项,可以根据您的需求进行调整。
Kylin自动配置脚本
#!/bin/bash
# Kylin OLAP Engine 自动配置脚本
# 适用于 Apache Kylin 4.x 版本
set -e
# ===== 配置参数(根据实际环境修改) =====
KYLIN_VERSION="4.0.3"
KYLIN_HOME="/opt/kylin"
HADOOP_HOME="/opt/hadoop"
HIVE_HOME="/opt/hive"
HBASE_HOME="/opt/hbase"
SPARK_HOME="/opt/spark"
ZK_HOME="/opt/zookeeper"
# 集群配置
HOSTNAME=$(hostname)
MASTER_NODE="node1" # 主节点主机名
NODES=("node1" "node2" "node3") # 所有节点
# 数据库配置(用于存储Kylin元数据)
MYSQL_HOST="localhost"
MYSQL_PORT=3306
MYSQL_USER="kylin"
MYSQL_PASSWORD="kylin123"
MYSQL_DATABASE="kylin"
# JVM配置
KYLIN_JVM_HEAP="4g"
KYLIN_JVM_PERM="256m"
KYLIN_JVM_DIRECT="512m"
# ===== 颜色输出函数 =====
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# ===== 前置检查 =====
pre_check() {
log_info "执行前置检查..."
# 检查Java环境
if ! command -v java &> /dev/null; then
log_error "Java未安装,请先安装JDK 8+"
exit 1
fi
log_info "Java已安装: $(java -version 2>&1 | head -1)"
# 检查必需环境变量
for var in HADOOP_HOME HIVE_HOME; do
if [ ! -d "${!var}" ]; then
log_warn "${var}=${!var} 目录不存在,请检查路径"
fi
done
}
# ===== 创建Kylin用户 =====
create_kylin_user() {
log_info "创建kylin用户..."
if id "kylin" &>/dev/null; then
log_info "kylin用户已存在"
else
useradd -m -s /bin/bash kylin
echo "kylin:kylin123" | chpasswd
log_info "kylin用户创建成功"
fi
}
# ===== 下载并安装Kylin =====
install_kylin() {
log_info "下载并安装Kylin..."
if [ -d "${KYLIN_HOME}" ]; then
log_warn "Kylin已安装在 ${KYLIN_HOME}"
return
fi
# 创建安装目录
mkdir -p ${KYLIN_HOME}
# 下载Kylin(使用清华镜像加速)
KYLIN_URL="https://mirrors.tuna.tsinghua.edu.cn/apache/kylin/apache-kylin-${KYLIN_VERSION}/apache-kylin-${KYLIN_VERSION}-bin-spark3.tar.gz"
cd /tmp
if [ ! -f "apache-kylin-${KYLIN_VERSION}-bin-spark3.tar.gz" ]; then
wget ${KYLIN_URL} -O apache-kylin-${KYLIN_VERSION}-bin-spark3.tar.gz
fi
# 解压并安装
tar -xzf apache-kylin-${KYLIN_VERSION}-bin-spark3.tar.gz -C ${KYLIN_HOME} --strip-components=1
chown -R kylin:kylin ${KYLIN_HOME}
log_info "Kylin安装完成"
}
# ===== 配置Kylin环境变量 =====
configure_env() {
log_info "配置环境变量..."
cat >> /etc/profile.d/kylin.sh << 'EOF'
# Kylin环境变量
export KYLIN_HOME=/opt/kylin
export PATH=$PATH:$KYLIN_HOME/bin
EOF
source /etc/profile.d/kylin.sh
log_info "环境变量配置完成"
}
# ===== 配置Kylin核心文件 =====
configure_kylin() {
log_info "配置Kylin核心参数..."
# 配置kylin.properties
cat > ${KYLIN_HOME}/conf/kylin.properties << EOF
# Kylin 核心配置
kylin.metadata.url=kylin_metadata@jdbc,url=jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE},username=${MYSQL_USER},password=${MYSQL_PASSWORD},maxActive=10,maxIdle=10
# 存储配置
kylin.storage.hbase.hfile-size-gb=2
kylin.storage.hbase.max-region-size-gb=8
# 查询配置
kylin.query.pull-limit=10000
kylin.query.timeout-seconds=3600
kylin.query.cache-threshold-duration=3600
kylin.query.cache-threshold-count=10000
# 构建配置
kylin.engine.spark.rdd-partition-num=100
kylin.engine.spark.input-partition-num=50
kylin.engine.spark.spark-conf.spark.executor.memory=4g
kylin.engine.spark.spark-conf.spark.executor.cores=2
kylin.engine.spark.spark-conf.spark.executor.instances=5
kylin.engine.spark.spark-conf.spark.driver.memory=2g
kylin.engine.spark.spark-conf.spark.sql.shuffle.partitions=100
# 缓存配置
kylin.query.cache-enabled=true
kylin.query.cache.algorithm=lru
kylin.query.cache.max-size-in-mb=1024
# 安全配置
kylin.security.profile=ldap
kylin.security.ldap.connection-server=ldap://localhost:389
kylin.security.ldap.connection-base-dn=dc=example,dc=com
# 日志配置
kylin.log.timezone=Asia/Shanghai
kylin.log.level=INFO
EOF
# 配置JVM参数
cat > ${KYLIN_HOME}/conf/setenv.sh << EOF
#!/bin/bash
# JVM 配置
KYLIN_JVM_SETTINGS="-Xms${KYLIN_JVM_HEAP} -Xmx${KYLIN_JVM_HEAP} -XX:MaxPermSize=${KYLIN_JVM_PERM} -XX:MaxDirectMemorySize=${KYLIN_JVM_DIRECT}"
# GC 配置
KYLIN_GC_SETTINGS="-XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=30"
# Debug 配置
# KYLIN_DEBUG_SETTINGS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
# 最终JVM参数
export KYLIN_JVM_OPTS="\${KYLIN_JVM_SETTINGS} \${KYLIN_GC_SETTINGS}"
EOF
chmod +x ${KYLIN_HOME}/conf/setenv.sh
chown -R kylin:kylin ${KYLIN_HOME}/conf/
log_info "Kylin核心配置完成"
}
# ===== 配置MySQL元数据库 =====
configure_mysql() {
log_info "配置MySQL元数据库..."
# 检查MySQL连接
if command -v mysql &> /dev/null; then
mysql -h ${MYSQL_HOST} -u root -e "
CREATE DATABASE IF NOT EXISTS ${MYSQL_DATABASE} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER IF NOT EXISTS '${MYSQL_USER}'@'localhost' IDENTIFIED BY '${MYSQL_PASSWORD}';
CREATE USER IF NOT EXISTS '${MYSQL_USER}'@'%' IDENTIFIED BY '${MYSQL_PASSWORD}';
GRANT ALL PRIVILEGES ON ${MYSQL_DATABASE}.* TO '${MYSQL_USER}'@'localhost';
GRANT ALL PRIVILEGES ON ${MYSQL_DATABASE}.* TO '${MYSQL_USER}'@'%';
FLUSH PRIVILEGES;
" 2>/dev/null || log_warn "MySQL配置失败,请手动创建数据库和用户"
log_info "MySQL数据库配置完成"
else
log_warn "MySQL客户端未安装,请手动配置数据库"
fi
}
# ===== 配置Hadoop集成 =====
configure_hadoop() {
log_info "配置Hadoop集成..."
# 配置core-site.xml
cat > ${KYLIN_HOME}/conf/core-site.xml << EOF
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://${MASTER_NODE}:9000</value>
</property>
</configuration>
EOF
# 配置hdfs-site.xml
cat > ${KYLIN_HOME}/conf/hdfs-site.xml << EOF
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.client.use.datanode.hostname</name>
<value>true</value>
</property>
</configuration>
EOF
log_info "Hadoop集成配置完成"
}
# ===== 配置Hive集成 =====
configure_hive() {
log_info "配置Hive集成..."
# 复制Hive配置文件
if [ -f "${HIVE_HOME}/conf/hive-site.xml" ]; then
cp ${HIVE_HOME}/conf/hive-site.xml ${KYLIN_HOME}/conf/
log_info "Hive配置文件已复制"
else
log_warn "未找到Hive配置文件,请手动复制"
fi
# 复制MySQL JDBC驱动
if [ -f "${HIVE_HOME}/lib/mysql-connector-java.jar" ]; then
cp ${HIVE_HOME}/lib/mysql-connector-java.jar ${KYLIN_HOME}/lib/
log_info "MySQL JDBC驱动已复制"
else
log_warn "未找到MySQL JDBC驱动,请手动下载放置到 ${KYLIN_HOME}/lib/"
fi
}
# ===== 初始化Kylin元数据 =====
init_kylin_metadata() {
log_info "初始化Kylin元数据..."
# 切换到kylin用户执行
su - kylin -c "${KYLIN_HOME}/bin/kylin.sh init"
log_info "Kylin元数据初始化完成"
}
# ===== 检查服务状态 =====
check_services() {
log_info "检查依赖服务状态..."
# 检查HDFS
hdfs dfsadmin -report &>/dev/null && log_info "HDFS服务正常" || log_warn "HDFS服务异常"
# 检查YARN
yarn node -list &>/dev/null && log_info "YARN服务正常" || log_warn "YARN服务异常"
# 检查Hive
beeline -u "jdbc:hive2://${MASTER_NODE}:10000" -e "show databases;" &>/dev/null && log_info "Hive服务正常" || log_warn "Hive服务异常"
# 检查ZooKeeper
echo "ruok" | nc localhost 2181 | grep "imok" &>/dev/null && log_info "ZooKeeper服务正常" || log_warn "ZooKeeper服务异常"
}
# ===== 启动Kylin服务 =====
start_kylin() {
log_info "启动Kylin服务..."
# 切换到kylin用户启动
su - kylin -c "KYLIN_HOME=${KYLIN_HOME} ${KYLIN_HOME}/bin/kylin.sh start"
sleep 5
# 检查启动状态
if curl -s http://localhost:7070/kylin/api/health &>/dev/null; then
log_info "Kylin服务启动成功,访问 http://${HOSTNAME}:7070/kylin"
else
log_error "Kylin服务启动失败,请检查日志"
exit 1
fi
}
# ===== 主函数 =====
main() {
log_info "开始自动配置Kylin OLAP引擎..."
log_info "版本: ${KYLIN_VERSION}"
log_info "安装路径: ${KYLIN_HOME}"
# 执行配置步骤
pre_check
create_kylin_user
install_kylin
configure_env
configure_mysql
configure_hadoop
configure_hive
configure_kylin
# 询问是否初始化元数据和启动服务
read -p "是否初始化Kylin元数据并启动服务? (y/n): " choice
case "$choice" in
y|Y)
check_services
init_kylin_metadata
start_kylin
;;
n|N)
log_info "跳过初始化和启动,您可以稍后手动执行"
;;
*)
log_error "无效输入"
exit 1
;;
esac
log_info "Kylin OLAP引擎配置完成!"
log_info "Web界面地址: http://${HOSTNAME}:7070/kylin"
log_info "默认管理员账号: ADMIN / KYLIN"
}
# 执行主函数
main "$@"
使用说明
使用方法
# 1. 保存脚本 chmod +x configure_kylin.sh # 2. 以root用户执行 sudo ./configure_kylin.sh # 3. 根据需要修改脚本开头的配置参数 # 主要需要修改: # - KYLIN_VERSION: Kylin版本 # - MASTER_NODE: 主节点主机名 # - MYSQL相关配置 # - JVM内存配置
前提条件
- JDK 8+
- Hadoop 3.x
- Hive 3.x
- Spark 3.x
- MySQL 5.7+
- ZooKeeper 3.x
验证配置
# 检查Kylin状态
${KYLIN_HOME}/bin/kylin.sh status
# 查看日志
tail -f ${KYLIN_HOME}/logs/kylin.log
# 健康检查API
curl http://localhost:7070/kylin/api/health
手动操作
如果脚本执行失败,可以手动执行以下步骤:
# 初始化元数据
${KYLIN_HOME}/bin/kylin.sh init
# 启动服务
${KYLIN_HOME}/bin/kylin.sh start
# 停止服务
${KYLIN_HOME}/bin/kylin.sh stop
这个脚本会自动完成Kylin的安装、配置和启动,您只需要根据实际环境修改配置参数即可。