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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 在大数据开发中,需要对各个组件服务集群进行管理,为了效率和可靠性,可以编写shell脚本来统一管理和维护集群,确保系统的稳定性和可靠性。

大数据环境相关脚本

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脚本

# My Shell
export PATH=$PATH:/root/shell

配置hosts

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

vim /etc/hosts

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

#! /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={
   mathJaxContainer[0]}server" | cut -d " " -f1)
        username=$(echo "$server" | cut -d " " -f2)
        password={
   mathJaxContainer[2]}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

更改执行权限

chmod +x ssh_config.sh

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

[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 是一个功能强大的文件同步和复制工具,可以在本地或远程服务器之间进行文件传输和备份。

通过运行以下命令安装

# CentOS/RHEL
yum install rsync

# Ubuntu/Debian 
apt-get install rsync

基本用法

1.本地文件复制:

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

rsync /path/to/source/file /path/to/destination/

2.本地目录复制:

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

rsync -av /path/to/source/directory/ /path/to/destination/directory/

3.本地文件同步:

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

rsync -av --delete /path/to/source/directory/ /path/to/destination/directory/

4.远程文件复制:

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

rsync -avz -e "ssh" /path/to/local/file user@remote:/path/to/destination/

5.远程目录复制:

rsync -avz -e "ssh" /path/to/local/directory/ user@remote:/path/to/destination/directory/

文件同步脚步

将指定的文件传输到每个指定的主机节点,在传输之前,会检查文件是否存在,然后创建相应的目录并使用 rsync 进行传输。

这个脚本将循环复制当前节点指定目录下的文件到其他节点的相同路径下

vim sync.sh

#! /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 {
    mathJaxContainer[4]}file)
                pwd
            )
            # 获取当前文件的名称
            fname={
   mathJaxContainer[5]}file)
            # 在远程主机执行创建目录的命令
            ssh {
   mathJaxContainer[6]}pdir"
            # 将文件传输到远程主机的相应目录
            rsync -av {
   mathJaxContainer[7]}fname {
   mathJaxContainer[8]}pdir
        else
            echo $file does not exists!
        fi
    done
done

更改执行权限

chmod +x sync.sh

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

[root@node01 ~]# sync.sh /etc/hosts

命令执行脚本

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

#! /bin/bash
for i in node01 node02 node03 node04 node05
do
    echo --------- $i ----------
    ssh {
    mathJaxContainer[9]}*"
done

更改执行权限

chmod  +x call.sh

使用示例

call.sh jps

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

[root@node01 ~]# call.sh jps

节点循环简化

定义一个hosts文件

node01
node02
node03
node04
node05

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

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

大数据组件相关脚本

Hadoop集群脚本

vim hadoop.sh

#!/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 {
   mathJaxContainer[11]}HADOOP_HOME/sbin/start-dfs.sh"
        echo "--------------- 启动 YARN ---------------"
        ssh $NAMENODE "$HADOOP_HOME/sbin/start-yarn.sh"
        ;;
    "stop")
        echo "=================== 关闭 Hadoop 集群 ==================="
        echo "--------------- 关闭 YARN ---------------"
        ssh {
   mathJaxContainer[13]}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

hadoop.sh start

hadoop.sh stop

Zookeeper集群脚本

vim zk.sh

#!/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

修改脚本执行权限

chmod +x zk.sh

启动、停止Zookeeper

zk.sh start

zk.sh stop

Kafaka集群脚本

vim kafaka.sh

#!/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 {
   mathJaxContainer[15]}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

修改脚本执行权限

chmod +x kafaka.sh

启动、停止Kafaka

kafaka.sh start

kafaka.sh stop

Flume集群脚本

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

#!/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

修改脚本执行权限

chmod +x flume.sh

启动、停止Flume

flume.sh start

flume.sh stop
相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
2月前
|
存储 数据可视化 数据管理
基于阿里云服务的数据平台架构实践
本文主要介绍基于阿里云大数据组件服务,对企业进行大数据平台建设的架构实践。
720 2
|
4月前
|
SQL 存储 大数据
某互联网大厂亿级大数据服务平台的建设和实践
某互联网大厂亿级大数据服务平台的建设和实践
68 0
|
26天前
|
分布式计算 运维 数据挖掘
MaxCompute是一个强大的云数据仓库服务
【4月更文挑战第1天】MaxCompute是一个强大的云数据仓库服务
25 1
|
3月前
|
数据可视化 大数据 数据挖掘
瓴羊荣获2023虎啸奖“年度十大AI&大数据服务公司”“数智营销案例铜奖”双重大奖
瓴羊荣获2023虎啸奖“年度十大AI&大数据服务公司”“数智营销案例铜奖”双重大奖
|
4月前
|
SQL 存储 大数据
从0到1介绍一下开源大数据服务平台dataService
从0到1介绍一下开源大数据服务平台dataService
116 1
|
4月前
|
大数据 Python
2022年最新Python大数据之Python基础【五】(集合)
2022年最新Python大数据之Python基础【五】(集合)
21 0
|
4月前
|
Prometheus 数据可视化 Cloud Native
助力工业物联网,工业大数据之服务域:可视化工具Grafana介绍【三十八】
助力工业物联网,工业大数据之服务域:可视化工具Grafana介绍【三十八】
104 1
|
4月前
|
存储 SQL Oracle
助力工业物联网,工业大数据之服务域:项目总结【三十九】
助力工业物联网,工业大数据之服务域:项目总结【三十九】
43 1
|
4月前
|
SQL Prometheus 监控
助力工业物联网,工业大数据之服务域:node_exporter插件【三十七】
助力工业物联网,工业大数据之服务域:node_exporter插件【三十七】
37 1
|
4月前
|
存储 Prometheus Cloud Native
助力工业物联网,工业大数据之服务域:Prometheus的介绍【三十六】
助力工业物联网,工业大数据之服务域:Prometheus的介绍【三十六】
52 1

热门文章

最新文章