大数据开发中常用组件服务的集群管理脚本整理集合

大数据环境相关脚本

bash运行模式说明

bash的运行模式可分为login shell(用户名、密码登录)和non-login shell(SSH登录)。

两者登录方式加载情况:

1.login shell 启动时会加载:/etc/profile,~/.bash_profile,~/.bashrc

2.non-login shell 启动时会加载:~/.bashrc

注意:~/.bashrc实则会加载/etc/bashrc/etc/bashrc又加载/etc/profile.d/*.sh

SSH登录注意:

当SSH到其他节点的时候是使用non-login shell模式,默认是不加载/etc/profile配置文件,也就会导致环境变量信息未配置,从而会找不到部分命令的问题

创建shell脚本目录

创建/root/shell目录,用于存放shell脚本
/etc/bashrc文件配置shell脚本目录,将其作为环境变量,以便在任何地方使用新建的shell脚本

bash 复制代码
# My Shell
export PATH=$PATH:/root/shell

配置hosts

配置每个节点的hosts文件,设置节点IP与Name的映射。

vim /etc/hosts

bash 复制代码
172.29.234.1 node01
172.29.234.2 node02
172.29.234.3 node03
172.29.234.4 node04
172.29.234.5 node05

SSH自动配置脚本

执行脚本来自动配置各个节点免密登录。

vim ssh_config.sh

bash 复制代码
#! /bin/bash
function sshPasswordLogin() {
    # 检测expect服务是否存在,不存在则使用yum安装expect
    expectIsExists=$(rpm -qa | grep expect)
    if [ -z "$expectIsExists" ]; then
        yum -y install expect
    fi
    
    # 密钥对不存在则创建密钥
    if [ ! -f /root/.ssh/id_rsa.pub ]; then
        ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa
    fi
    
    # 服务器列表
    # servers=("IP地址1 用户名1 密码1" "IP地址2 用户名2 密码2" "IP地址3 用户名3 密码3")
    servers=("node01 root 123456" "node02 root 123456" "node03 root 123456" "node04 root 123456" "node05 root 123456")
    
    for server in "${servers[@]}"; do
        hostname=$(echo "$server" | cut -d " " -f1)
        username=$(echo "$server" | cut -d " " -f2)
        password=$(echo "$server" | cut -d " " -f3)
        
        echo "Configuring password login on $hostname..."
        
        expect <<EOF
            spawn ssh-copy-id "$username@$hostname"
            expect {
                "yes/no" {
                    send "yes\n"
                    exp_continue
                }
                "password" {
                    send "$password\n"
                    exp_continue
                }
                eof
            }
EOF
    done
}
sshPasswordLogin

更改执行权限

bash 复制代码
chmod +x ssh_config.sh

在各个节点执行ssh_config.sh脚本,然后就会自动进行SSH互相配置密码登录

bash 复制代码
[root@node01 ~]# ./ssh_config.sh
[root@node02 ~]# ./ssh_config.sh
[root@node03 ~]# ./ssh_config.sh
[root@node04 ~]# ./ssh_config.sh
[root@node05 ~]# ./ssh_config.sh

文件同步、复制工具rsync

rsync 是一个功能强大的文件同步和复制工具,可以在本地或远程服务器之间进行文件传输和备份。

通过运行以下命令安装

bash 复制代码
# CentOS/RHEL
yum install rsync

# Ubuntu/Debian 
apt-get install rsync

基本用法

1.本地文件复制:

把source 目录下的文件复制到 destination 目录

bash 复制代码
rsync /path/to/source/file /path/to/destination/

2.本地目录复制:

使用 -a 参数表示递归复制目录,-v 参数表示显示详细的复制过程

bash 复制代码
rsync -av /path/to/source/directory/ /path/to/destination/directory/

3.本地文件同步:

使用 --delete 参数可以保持源和目标目录的同步,删除目标目录中不存在于源目录的文件

bash 复制代码
rsync -av --delete /path/to/source/directory/ /path/to/destination/directory/

4.远程文件复制:

通过 SSH 连接复制本地文件到远程服务器。-z 参数表示使用压缩来加速传输

bash 复制代码
rsync -avz -e "ssh" /path/to/local/file user@remote:/path/to/destination/

5.远程目录复制:

bash 复制代码
rsync -avz -e "ssh" /path/to/local/directory/ user@remote:/path/to/destination/directory/

文件同步脚步

将指定的文件传输到每个指定的主机节点,在传输之前,会检查文件是否存在,然后创建相应的目录并使用 rsync 进行传输。
这个脚本将循环复制当前节点指定目录下的文件到其他节点的相同路径下

vim sync.sh

bash 复制代码
#! /bin/bash
# 检查是否提供了足够的命令行参数
if [ $# -lt 1 ]; then
	echo Not Enough Arguement!
	exit
fi


# 遍历集群所有机器
for host in node01 node02 node03 node04 node05; do
	echo ==================== $host ====================
	# 遍历所有目录,挨个发送
	for file in $@; do
		# 检查文件是否存在
		if [ -e $file ]; then
			#  获取父目录
			pdir=$(
				cd -P $(dirname $file)
				pwd
			)
			# 获取当前文件的名称
			fname=$(basename $file)
			# 在远程主机执行创建目录的命令
			ssh $host "mkdir -p $pdir"
			# 将文件传输到远程主机的相应目录
			rsync -av $pdir/$fname $host:$pdir
		else
			echo $file does not exists!
		fi
	done
done

更改执行权限

bash 复制代码
chmod +x sync.sh

使用文件同步脚本,进行分发同步hosts配置信息

bash 复制代码
[root@node01 ~]# sync.sh /etc/hosts

命令执行脚本

遍历服务器名称列表,然后在每台服务器上运行指定的命令

bash 复制代码
#! /bin/bash
for i in node01 node02 node03 node04 node05
do
	echo --------- $i ----------
	ssh $i "$*"
done

更改执行权限

bash 复制代码
chmod  +x call.sh

使用示例

bash 复制代码
call.sh jps

使用命令执行脚本,在每个节点执行指定的命令

bash 复制代码
[root@node01 ~]# call.sh jps

节点循环简化

定义一个hosts文件

bash 复制代码
node01
node02
node03
node04
node05

以命令执行脚本简化为例说明:

bash 复制代码
#!/bin/bash
for host in `cat /root/hosts` ;
do
	# tput命令,用于设置终端输出的文本颜色为绿色
    tput setaf 2
         echo ======== $host ========
    # 将终端输出的文本颜色重置为默认颜色     
    tput setaf 7
        ssh $host "$@"
done

大数据组件相关脚本

Hadoop集群脚本

vim hadoop.sh

bash 复制代码
#!/bin/bash
# Hadoop安装目录
HADOOP_HOME="/usr/local/program/hadoop"
# namenode分配节点
NAMENODE="node01"
COMMAND=""

if [ $# -lt 1 ]; then
    echo "请输入命令参数 start 或 stop"
    exit
fi

case $1 in
    "start")
        echo "=================== 启动 Hadoop 集群 ==================="
        echo "--------------- 启动 HDFS ---------------"
        ssh $NAMENODE "$HADOOP_HOME/sbin/start-dfs.sh"
        echo "--------------- 启动 YARN ---------------"
        ssh $NAMENODE "$HADOOP_HOME/sbin/start-yarn.sh"
        ;;
    "stop")
        echo "=================== 关闭 Hadoop 集群 ==================="
        echo "--------------- 关闭 YARN ---------------"
        ssh $NAMENODE "$HADOOP_HOME/sbin/stop-yarn.sh"
        echo "--------------- 关闭 HDFS ---------------"
        ssh $NAMENODE "$HADOOP_HOME/sbin/stop-dfs.sh"
        ;;
    *)
        echo "无效参数: $1"
        echo "请输入: start 或 stop"
        exit 1
        ;;
esac

启动、停止Hadoop

bash 复制代码
hadoop.sh start

hadoop.sh stop

Zookeeper集群脚本

vim zk.sh

bash 复制代码
#!/bin/bash
case $1 in
"start")
	for i in node01 node02 node03; do
		echo "----------------------zookeeper $i 启动----------------------"
		ssh $i "/usr/local/program/zookeeper/bin/zkServer.sh start"
	done
	;;
"stop")
	for i in node01 node02 node03; do
		echo "----------------------zookeeper $i 停止----------------------"
		ssh $i "/usr/local/program/zookeeper/bin/zkServer.sh stop"
	done
	;;
"status")
	for i in node01 node02 node03; do
		echo "----------------------zookeeper $i 状态----------------------"
		ssh $i "/usr/local/program/zookeeper/bin/zkServer.sh status"
	done
	;;
*)
	echo "无效的命令"
	;;
esac

修改脚本执行权限

bash 复制代码
chmod +x zk.sh

启动、停止Zookeeper

bash 复制代码
zk.sh start

zk.sh stop

Kafaka集群脚本

vim kafaka.sh

bash 复制代码
#!/bin/bash

if [ $# -eq 0 ]; then
  echo "请输入命令参数 start 或 stop"
  exit 1
fi

KAFKA_HOME="/usr/local/program/kafka"

case $1 in
"start")
  for node in "node01" "node02" "node03"; do
    echo "----------------------kafka $node 启动----------------------"
    ssh $node "$KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties"
    # 通过$?获取上一个命令的执行状态。如果执行状态不为 0,则表示启动或停止失败
    if [ $? -ne 0 ]; then
      echo "启动 $node 失败"
    fi
  done
  ;;
"stop")
  for node in "node01" "node02" "node03"; do
    echo "----------------------kafka $node 停止----------------------"
    ssh $node "$KAFKA_HOME/bin/kafka-server-stop.sh"
    if [ $? -ne 0 ]; then
      echo "停止 $node 失败"
    fi
  done
  ;;
*)
  echo "无效参数: $1"
  echo "请输入: start 或 stop"
  exit 1
  ;;
esac

修改脚本执行权限

bash 复制代码
chmod +x kafaka.sh

启动、停止Kafaka

bash 复制代码
kafaka.sh start

kafaka.sh stop

Flume集群脚本

创建vim flume.sh集群启动停止脚本

bash 复制代码
#!/bin/bash
# flume执行节点
REMOTE_HOST="node01"
# flume-ng位置
FLUME_EXECUTABLE="/usr/local/program/flume/bin/flume-ng"
# flume配置目录
FLUME_CONF_DIR="/usr/local/program/flume/conf/"
# flume配置文件
FLUME_CONF_FILE="/usr/local/program/flume/job/file_to_kafka.conf"
# 执行进程名称
PROCESS_NAME="file_to_kafka"

case $1 in
"start")
    echo " ---------------启动flume采集--------------"
    ssh "$REMOTE_HOST" "nohup $FLUME_EXECUTABLE agent -n a1 -c \"$FLUME_CONF_DIR\" -f \"$FLUME_CONF_FILE\" >/dev/null 2>&1 &"
    ;;

"stop")
    echo " ---------------停止flume采集--------------"
    ssh "$REMOTE_HOST" "ps -ef | grep $PROCESS_NAME | grep -v grep |awk  '{print \$2}' | xargs -n1 kill -9 "
    ;;

*)
    echo "无效参数: $1"
    echo "请输入: start 或 stop"
    exit 1
    ;;
esac

修改脚本执行权限

bash 复制代码
chmod +x flume.sh

启动、停止Flume

bash 复制代码
flume.sh start

flume.sh stop
相关推荐
蒙特卡洛的随机游走7 分钟前
Spark的宽依赖与窄依赖
大数据·前端·spark
智象科技33 分钟前
CMDB报表体系如何驱动智能运维
大数据·运维·报表·一体化运维·cmdb
yumgpkpm1 小时前
华为鲲鹏 Aarch64 环境下多 Oracle 数据库汇聚操作指南 CMP(类 Cloudera CDP 7.3)
大数据·hive·hadoop·elasticsearch·zookeeper·big data·cloudera
howard20052 小时前
初次使用基于K3S的大数据平台
大数据·k3s·cloudeon
Lansonli2 小时前
大数据Spark(六十九):Transformation转换算子intersection和subtract使用案例
大数据·分布式·spark
TDengine (老段)2 小时前
TDengine 数据函数 LEAST 用户手册
大数据·数据库·sql·时序数据库·tdengine
Elastic 中国社区官方博客2 小时前
AI Agent 评估:Elastic 如何测试代理框架
大数据·人工智能·elasticsearch·搜索引擎
JAVA学习通2 小时前
开源 | MeiGen-MultiTalk:基于单张照片实现多人互动演绎
大数据·音视频·视频
金纬软件13 小时前
电脑监控软件有哪些?企业监控软件应该怎么选?
大数据·运维
武子康4 小时前
大数据-128 - Flink 并行度详解:从概念到最佳实践,一文读懂任务并行执行机制 代码示例与性能优化
大数据·后端·flink