本文目录导读:

基础自动配置脚本
#!/bin/bash
# Presto自动配置脚本
# 使用方法: ./configure_presto.sh [presto_home] [coordinator|worker]
set -e
# 默认值
PRESTO_HOME=${1:-"/opt/presto"}
NODE_TYPE=${2:-"coordinator"}
# 配置参数 - 根据您的环境修改
DISCOVERY_URI="http://localhost:8080"
HTTP_PORT=8080
NODE_ENVIRONMENT="production"
LOG_LEVEL="INFO"
MAX_MEMORY="8GB"
QUERY_MAX_MEMORY="4GB"
# 检查Presto目录是否存在
if [ ! -d "$PRESTO_HOME" ]; then
echo "错误: Presto目录 $PRESTO_HOME 不存在"
exit 1
fi
# 创建配置目录
CONFIG_DIR="$PRESTO_HOME/etc"
mkdir -p "$CONFIG_DIR"
mkdir -p "$CONFIG_DIR/catalog"
echo "正在配置Presto ($NODE_TYPE)..."
# 1. 配置 node.properties
cat > "$CONFIG_DIR/node.properties" << EOF
node.environment=$NODE_ENVIRONMENT
node.id=$(uuidgen)
node.data-dir=$PRESTO_HOME/data
EOF
# 2. 配置 jvm.config
cat > "$CONFIG_DIR/jvm.config" << EOF
-server
-Xmx$MAX_MEMORY
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
EOF
# 3. 配置 config.properties (根据节点类型)
if [ "$NODE_TYPE" == "coordinator" ]; then
cat > "$CONFIG_DIR/config.properties" << EOF
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=$HTTP_PORT
query.max-memory=$QUERY_MAX_MEMORY
query.max-memory-per-node=$QUERY_MAX_MEMORY
discovery-server.enabled=true
discovery.uri=$DISCOVERY_URI
EOF
else
cat > "$CONFIG_DIR/config.properties" << EOF
coordinator=false
http-server.http.port=$HTTP_PORT
query.max-memory=$QUERY_MAX_MEMORY
query.max-memory-per-node=$QUERY_MAX_MEMORY
discovery.uri=$DISCOVERY_URI
EOF
fi
# 4. 配置 log.properties
cat > "$CONFIG_DIR/log.properties" << EOF
io.prestosql=$LOG_LEVEL
EOF
# 5. 创建根目录数据目录
mkdir -p "$PRESTO_HOME/data"
# 6. 配置示例目录连接器
cat > "$CONFIG_DIR/catalog/tpch.properties" << EOF
connector.name=tpch
tpch.splits-per-node=4
EOF
# 7. 配置JMX连接器 (监控用)
cat > "$CONFIG_DIR/catalog/jmx.properties" << EOF
connector.name=jmx
EOF
echo "✅ Presto ($NODE_TYPE) 配置完成!"
echo "配置文件位置: $CONFIG_DIR"
echo ""
echo "启动命令:"
if [ "$NODE_TYPE" == "coordinator" ]; then
echo " $PRESTO_HOME/bin/launcher run"
else
echo " $PRESTO_HOME/bin/launcher run"
fi
# 显示配置内容
echo ""
echo "=== 配置摘要 ==="
echo "类型: $NODE_TYPE"
echo "端口: $HTTP_PORT"
echo "内存: $MAX_MEMORY (节点) / $QUERY_MAX_MEMORY (查询)"
echo "发现URI: $DISCOVERY_URI"
使用示例
# 保存脚本为 configure_presto.sh chmod +x configure_presto.sh # 配置协调节点 ./configure_presto.sh /opt/presto coordinator # 配置工作节点 ./configure_presto.sh /opt/presto worker
更高级的自动化脚本 (带交互式配置)
#!/bin/bash
# 交互式Presto配置脚本
# 支持多种数据源和高级选项
set -e
PRESTO_HOME=${1:-"/opt/presto"}
echo "=== Presto 交互式配置工具 ==="
echo ""
# 检查目录
if [ ! -d "$PRESTO_HOME" ]; then
read -p "Presto目录 $PRESTO_HOME 不存在,是否创建?(y/n): " CREATE_DIR
if [ "$CREATE_DIR" == "y" ]; then
mkdir -p "$PRESTO_HOME"
echo "目录已创建"
else
exit 1
fi
fi
# 节点类型
echo "选择节点类型:"
echo "1) 协调节点 (Coordinator)"
echo "2) 工作节点 (Worker)"
read -p "选择 (1-2): " NODE_CHOICE
case $NODE_CHOICE in
1) NODE_TYPE="coordinator" ;;
2) NODE_TYPE="worker" ;;
*) echo "无效选择"; exit 1 ;;
esac
# 基本配置
read -p "HTTP端口 [8080]: " HTTP_PORT
HTTP_PORT=${HTTP_PORT:-8080}
read -p "节点内存 (8GB) [8GB]: " MAX_MEMORY
MAX_MEMORY=${MAX_MEMORY:-"8GB"}
read -p "查询最大内存 (4GB) [4GB]: " QUERY_MAX_MEMORY
QUERY_MAX_MEMORY=${QUERY_MAX_MEMORY:-"4GB"}
# 协调节点
if [ "$NODE_TYPE" == "coordinator" ]; then
DISCOVERY_URI="http://localhost:$HTTP_PORT"
else
read -p "协调节点地址 (http://coordinator:8080): " DISCOVERY_URI
fi
# 数据源配置
echo ""
echo "选择要配置的数据源 (多个用空格分隔, 'mysql postgresql hive'):"
echo "可选: mysql postgresql hive kafka redis elasticsearch"
read -p "数据源: " DATA_SOURCES
# 执行配置
configure_presto() {
CONFIG_DIR="$PRESTO_HOME/etc"
mkdir -p "$CONFIG_DIR"
mkdir -p "$CONFIG_DIR/catalog"
# node.properties
cat > "$CONFIG_DIR/node.properties" << EOF
node.environment=production
node.id=$(uuidgen)
node.data-dir=$PRESTO_HOME/data
EOF
# jvm.config
cat > "$CONFIG_DIR/jvm.config" << EOF
-server
-Xmx$MAX_MEMORY
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
EOF
# config.properties
if [ "$NODE_TYPE" == "coordinator" ]; then
cat > "$CONFIG_DIR/config.properties" << EOF
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=$HTTP_PORT
query.max-memory=$QUERY_MAX_MEMORY
query.max-memory-per-node=$QUERY_MAX_MEMORY
discovery-server.enabled=true
discovery.uri=$DISCOVERY_URI
EOF
else
cat > "$CONFIG_DIR/config.properties" << EOF
coordinator=false
http-server.http.port=$HTTP_PORT
query.max-memory=$QUERY_MAX_MEMORY
query.max-memory-per-node=$QUERY_MAX_MEMORY
discovery.uri=$DISCOVERY_URI
EOF
fi
# log.properties
cat > "$CONFIG_DIR/log.properties" << EOF
io.prestosql=INFO
EOF
# 数据源配置
for source in $DATA_SOURCES; do
case $source in
mysql)
read -p "MySQL主机: " MYSQL_HOST
read -p "MySQL端口 [3306]: " MYSQL_PORT
MYSQL_PORT=${MYSQL_PORT:-3306}
read -p "MySQL用户名: " MYSQL_USER
read -s -p "MySQL密码: " MYSQL_PASS
echo ""
cat > "$CONFIG_DIR/catalog/mysql.properties" << EOF
connector.name=mysql
connection-url=jdbc:mysql://$MYSQL_HOST:$MYSQL_PORT
connection-user=$MYSQL_USER
connection-password=$MYSQL_PASS
EOF
;;
postgresql)
read -p "PostgreSQL主机: " PG_HOST
read -p "PostgreSQL端口 [5432]: " PG_PORT
PG_PORT=${PG_PORT:-5432}
read -p "PostgreSQL用户名: " PG_USER
read -s -p "PostgreSQL密码: " PG_PASS
echo ""
cat > "$CONFIG_DIR/catalog/postgresql.properties" << EOF
connector.name=postgresql
connection-url=jdbc:postgresql://$PG_HOST:$PG_PORT
connection-user=$PG_USER
connection-password=$PG_PASS
EOF
;;
hive)
read -p "Hive Metastore URI (thrift://host:9083): " HIVE_URI
cat > "$CONFIG_DIR/catalog/hive.properties" << EOF
connector.name=hive-hadoop2
hive.metastore.uri=$HIVE_URI
hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml
EOF
;;
kafka)
read -p "Kafka节点 (host:port): " KAFKA_NODES
cat > "$CONFIG_DIR/catalog/kafka.properties" << EOF
connector.name=kafka
kafka.nodes=$KAFKA_NODES
kafka.table-names=
EOF
;;
*)
echo "未知数据源: $source"
;;
esac
done
# 始终配置TPC-H和JMX
cat > "$CONFIG_DIR/catalog/tpch.properties" << EOF
connector.name=tpch
tpch.splits-per-node=4
EOF
cat > "$CONFIG_DIR/catalog/jmx.properties" << EOF
connector.name=jmx
EOF
# 创建数据目录
mkdir -p "$PRESTO_HOME/data"
}
configure_presto
echo ""
echo "✅ 配置完成!"
echo "配置文件位置: $PRESTO_HOME/etc"
echo ""
echo "启动命令:"
echo "$PRESTO_HOME/bin/launcher run"
使用说明
快速配置
# 下载并解压Presto wget https://repo1.maven.org/maven2/io/prestosql/presto-server/350/presto-server-350.tar.gz tar -xzf presto-server-350.tar.gz -C /opt/ # 运行配置脚本 chmod +x configure_presto.sh sudo ./configure_presto.sh /opt/presto-server-350 coordinator # 启动Presto /opt/presto-server-350/bin/launcher run
集群配置
- 协调节点: 运行
./configure_presto.sh /opt/presto coordinator - 工作节点: 运行
./configure_presto.sh /opt/presto worker- 确保
DISCOVERY_URI指向协调节点的地址
- 确保
注意事项
- 需要安装Java 8或11
- 确保端口未被占用
- 生产环境中调整内存和并发参数
- 使用
launcher start后台启动
这个脚本会自动创建所有必要的配置文件和目录,大大简化了Presto的部署过程。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播