我来为您提供一个自动配置HBase集群的脚本,这个脚本包括主节点和从节点的配置,以及HDFS和ZooKeeper的配置。

HBase集群自动配置脚本
主脚本:hbase-auto-setup.sh
#!/bin/bash
# HBase集群自动配置脚本
# 使用方法: ./hbase-auto-setup.sh [master_node] [slave1_node] [slave2_node] ...
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 配置参数
HBASE_VERSION="2.5.5"
HADOOP_VERSION="3.3.4"
ZK_VERSION="3.8.1"
HBASE_HOME="/opt/hbase"
HADOOP_HOME="/opt/hadoop"
ZK_HOME="/opt/zookeeper"
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查root权限
check_root() {
if [[ $EUID -ne 0 ]]; then
log_error "此脚本必须以root权限运行"
exit 1
fi
}
# 环境准备
prepare_env() {
log_info "开始准备环境..."
# 更新系统
yum update -y || apt-get update -y
# 安装必要的软件包
if command -v yum &> /dev/null; then
yum install -y wget tar java-11-openjdk-devel net-tools openssh-server
elif command -v apt-get &> /dev/null; then
apt-get install -y wget tar openjdk-11-jdk net-tools openssh-server
fi
# 配置hosts文件
configure_hosts
}
# 配置hosts文件
configure_hosts() {
log_info "配置hosts文件..."
# 获取本机IP
LOCAL_IP=$(hostname -I | awk '{print $1}')
HOSTNAME=$(hostname)
# 添加本机到hosts
if ! grep -q "$LOCAL_IP" /etc/hosts; then
echo "$LOCAL_IP $HOSTNAME" >> /etc/hosts
fi
# 添加集群节点到hosts
for node in "$@"; do
if ! grep -q "$node" /etc/hosts; then
log_warn "请手动配置节点 $node 的IP地址到/etc/hosts"
fi
done
}
# 配置SSH免密登录
setup_ssh() {
log_info "配置SSH免密登录..."
# 生成SSH密钥
if [ ! -f ~/.ssh/id_rsa ]; then
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
fi
# 分发公钥到所有节点
for node in "$@"; do
if [ "$node" != "$(hostname)" ]; then
ssh-copy-id -i ~/.ssh/id_rsa.pub "root@$node"
fi
done
# 对本机也免密
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
}
# 安装Java
install_java() {
log_info "检查Java安装..."
if ! command -v java &> /dev/null; then
log_info "安装Java 11..."
if command -v yum &> /dev/null; then
yum install -y java-11-openjdk-devel
elif command -v apt-get &> /dev/null; then
apt-get install -y openjdk-11-jdk
fi
fi
# 设置JAVA_HOME
JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")
echo "export JAVA_HOME=$JAVA_HOME" >> /etc/profile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile
source /etc/profile
}
# 下载并安装HBase
install_hbase() {
log_info "下载并安装HBase..."
if [ ! -f "/tmp/hbase-${HBASE_VERSION}-bin.tar.gz" ]; then
wget -P /tmp "https://archive.apache.org/dist/hbase/${HBASE_VERSION}/hbase-${HBASE_VERSION}-bin.tar.gz"
fi
# 解压并安装
tar -xzf "/tmp/hbase-${HBASE_VERSION}-bin.tar.gz" -C /opt
mv "/opt/hbase-${HBASE_VERSION}" "$HBASE_HOME"
# 配置HBase环境变量
echo "export HBASE_HOME=$HBASE_HOME" >> /etc/profile
echo "export PATH=\$PATH:\$HBASE_HOME/bin" >> /etc/profile
}
# 配置HBase
configure_hbase() {
log_info "配置HBase..."
MASTER_NODE=$1
shift
SLAVE_NODES=("$@")
# 配置hbase-env.sh
cat > "$HBASE_HOME/conf/hbase-env.sh" << 'EOF'
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export HBASE_MANAGES_ZK=false
export HBASE_HEAPSIZE=2G
export HBASE_OPTS="-XX:+UseConcMarkSweepGC"
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
EOF
# 配置hbase-site.xml
cat > "$HBASE_HOME/conf/hbase-site.xml" << EOF
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://${MASTER_NODE}:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>${MASTER_NODE}</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/zookeeper/data</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/opt/hbase/tmp</value>
</property>
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<property>
<name>hbase.regionserver.port</name>
<value>16020</value>
</property>
</configuration>
EOF
# 配置regionservers
> "$HBASE_HOME/conf/regionservers"
for slave in "${SLAVE_NODES[@]}"; do
if [ "$slave" != "$MASTER_NODE" ]; then
echo "$slave" >> "$HBASE_HOME/conf/regionservers"
fi
done
# 创建目录
mkdir -p /opt/hbase/tmp
mkdir -p /opt/zookeeper/data
# 设置权限
chown -R root:root "$HBASE_HOME"
chmod -R 755 "$HBASE_HOME"
}
# 配置Hadoop(HDFS依赖)
configure_hadoop() {
log_info "配置Hadoop环境..."
if [ ! -d "$HADOOP_HOME" ]; then
log_info "下载并安装Hadoop..."
if [ ! -f "/tmp/hadoop-${HADOOP_VERSION}.tar.gz" ]; then
wget -P /tmp "https://archive.apache.org/dist/hadoop/common/hadoop-${HADOOP_VERSION}/hadoop-${HADOOP_VERSION}.tar.gz"
fi
tar -xzf "/tmp/hadoop-${HADOOP_VERSION}.tar.gz" -C /opt
mv "/opt/hadoop-${HADOOP_VERSION}" "$HADOOP_HOME"
# 配置Hadoop环境变量
echo "export HADOOP_HOME=$HADOOP_HOME" >> /etc/profile
echo "export PATH=\$PATH:\$HADOOP_HOME/bin" >> /etc/profile
fi
}
# 配置ZooKeeper
configure_zookeeper() {
log_info "配置ZooKeeper..."
if [ ! -d "$ZK_HOME" ]; then
log_info "下载并安装ZooKeeper..."
if [ ! -f "/tmp/apache-zookeeper-${ZK_VERSION}-bin.tar.gz" ]; then
wget -P /tmp "https://archive.apache.org/dist/zookeeper/zookeeper-${ZK_VERSION}/apache-zookeeper-${ZK_VERSION}-bin.tar.gz"
fi
tar -xzf "/tmp/apache-zookeeper-${ZK_VERSION}-bin.tar.gz" -C /opt
mv "/opt/apache-zookeeper-${ZK_VERSION}-bin" "$ZK_HOME"
fi
# 配置ZooKeeper
cat > "$ZK_HOME/conf/zoo.cfg" << EOF
tickTime=2000
dataDir=/opt/zookeeper/data
clientPort=2181
initLimit=5
syncLimit=2
server.1=${MASTER_NODE}:2888:3888
EOF
# 创建myid文件
echo "1" > /opt/zookeeper/data/myid
}
# 启动服务
start_services() {
log_info "启动服务..."
# 启动ZooKeeper
"$ZK_HOME/bin/zkServer.sh" start
# 启动Hadoop(如果已配置)
if [ -f "$HADOOP_HOME/sbin/start-dfs.sh" ]; then
"$HADOOP_HOME/sbin/start-dfs.sh"
fi
# 启动HBase
"$HBASE_HOME/bin/start-hbase.sh"
log_info "HBase集群启动完成!"
}
# 验证安装
verify_installation() {
log_info "验证HBase安装..."
# 检查HBase进程
echo "检查HBase进程..."
jps | grep -E "HMaster|HRegionServer"
# 检查HBase shell
echo "检查HBase shell连接..."
echo "list" | "$HBASE_HOME/bin/hbase" shell
log_info "HBase集群验证完成!"
}
# 清理函数
cleanup() {
log_info "清理临时文件..."
rm -f /tmp/hbase-*.tar.gz
rm -f /tmp/hadoop-*.tar.gz
rm -f /tmp/apache-zookeeper-*.tar.gz
}
# 主函数
main() {
if [ $# -lt 2 ]; then
log_error "用法: $0 <master_node> <slave1_node> [slave2_node] ..."
log_error "示例: $0 master-node slave1-node slave2-node"
exit 1
fi
MASTER_NODE=$1
shift
SLAVE_NODES=("$@")
check_root
log_info "开始配置HBase集群"
log_info "主节点: $MASTER_NODE"
log_info "从节点: ${SLAVE_NODES[*]}"
prepare_env
setup_ssh "$MASTER_NODE" "${SLAVE_NODES[@]}"
install_java
install_hbase
configure_hbase "$MASTER_NODE" "${SLAVE_NODES[@]}"
configure_hadoop
configure_zookeeper
start_services
verify_installation
cleanup
log_info "HBase集群配置完成!"
log_info "Web UI: http://$MASTER_NODE:16010"
}
# 执行主函数
main "$@"
从节点配置脚本:hbase-slave-setup.sh
#!/bin/bash
# HBase从节点配置脚本
# 在从节点上执行
set -e
HBASE_MASTER_IP=$1
MASTER_USER="root"
# 配置SSH
configure_ssh() {
# 复制主节点的公钥
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 从主节点获取公钥
scp "$MASTER_USER@$HBASE_MASTER_IP:~/.ssh/id_rsa.pub" /tmp/master_key.pub
cat /tmp/master_key.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
}
# 同步配置文件
sync_configs() {
# 同步HBase配置
scp -r "$MASTER_USER@$HBASE_MASTER_IP:/opt/hbase" /opt/
# 同步ZooKeeper配置
scp -r "$MASTER_USER@$HBASE_MASTER_IP:/opt/zookeeper" /opt/
# 同步环境变量
scp "$MASTER_USER@$HBASE_MASTER_IP:/etc/profile" /etc/profile
source /etc/profile
}
# 启动从节点服务
start_slave_services() {
# 启动ZooKeeper
/opt/zookeeper/bin/zkServer.sh start
# 启动HBase RegionServer
/opt/hbase/bin/hbase-daemon.sh start regionserver
}
# 主函数
main() {
if [ -z "$HBASE_MASTER_IP" ]; then
echo "用法: $0 <master_ip>"
exit 1
fi
echo "配置HBase从节点..."
configure_ssh
sync_configs
start_slave_services
echo "从节点配置完成!"
}
main
使用说明
- 在主节点上运行:
# 赋予执行权限 chmod +x hbase-auto-setup.sh
运行脚本(需要root权限)
./hbase-auto-setup.sh master-node slave1-node slave2-node
2. **在从节点上运行:**
```bash
# 赋予执行权限
chmod +x hbase-slave-setup.sh
# 运行脚本
./hbase-slave-setup.sh <master_ip_address>
配置优化建议
如果需要优化性能,可以创建配置文件:hbase-optimize.sh
#!/bin/bash
# HBase性能优化配置
OPTIMIZE_CONFIG="
# HBase性能优化参数
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>134217728</value>
</property>
<property>
<name>hbase.hregion.memstore.block.multiplier</name>
<value>4</value>
</property>
<property>
<name>hbase.hstore.compactionThreshold</name>
<value>3</value>
</property>
<property>
<name>hbase.hstore.blockingStoreFiles</name>
<value>10</value>
</property>
<property>
<name>hbase.client.scanner.caching</name>
<value>100</value>
</property>
"
# 将优化配置添加到hbase-site.xml
sed -i '/<\/configuration>/d' /opt/hbase/conf/hbase-site.xml
echo "$OPTIMIZE_CONFIG" >> /opt/hbase/conf/hbase-site.xml
echo "</configuration>" >> /opt/hbase/conf/hbase-site.xml
echo "HBase优化配置完成!"
注意事项
- 防火墙设置:确保开放必要的端口(ZooKeeper: 2181, HBase Master: 16000, HBase RegionServer: 16020)
- SSH配置:确保所有节点之间的SSH连接正常
- 网络配置:确保所有节点之间网络互通
- 系统要求:建议至少4GB内存,2核CPU
- Java版本:推荐使用Java 8或Java 11
这个脚本会自动完成HBase集群的配置,包括依赖的HDFS和ZooKeeper的配置,您可以根据实际需求调整配置参数。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播