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

2023-09-15 13:46:51

大数据环境相关脚本

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=$(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

更改执行权限

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 $(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

更改执行权限

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 $i "$*"
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 $host "$@"
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 $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

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 $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

修改脚本执行权限

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
更多推荐

【Azure上云项目实战】 合规性的身份验证与访问控制:在 Azure 中实现符合 PCI DSS 要求的架构设计

文章目录一、开篇写在前面二、项目背景及介绍三、AzurePCIDSS项目架构及组件四、身份验证、访问控制4.1三层防御控制4.2三层部署结构五、跳板机六、与PCIDSS要求的关系七、该篇总结(重要)写在文末一、开篇写在前面各位博客阅读者们以及对云计算感兴趣的小伙伴们,微软Azure云的基础部分更新已经接近了尾声,从上周

prize_p1

文章目录解题过程代码审计思路问题解决数组绕过preg_match__destruct的触发修改phar文件以及签名phar://支持的后缀(其他方法)题解方法一(数组绕过)方法二(gzip绕过)解题过程源代码<METAhttp-equiv="Content-Type"content="text/html;charset

【UE 粒子练习】02——使用一些常用的模块来创建粒子

目录效果步骤一、创建材质二、创建粒子2.1必需模块2.2初始大小模块2.3初始位置模块2.4初始速度模块2.5生命周期模块2.6加速-》恒加速度模块2.7生成模块2.8生命内颜色模块2.9尺寸-》大小随速度模块2.10碰撞-》Actor碰撞模块2.11光源-》光照模块效果步骤一、创建材质1.新建一个材质,这里命名为“M

如何使用WOFOST和PCSE这两个农业生产模型进行作物生长模拟??

WOFOST(WorldFoodStudies)和PCSE(PythonCropSimulationEnvironment)是两个用于农业生产模拟的模型:WOFOST是一个经过多年开发和验证的模型,被广泛用于全球的农业生产模拟和农业政策分析;采用了模块化的结构,可以对不同的农作物和环境条件进行参数化和适应;WOFOST

五个很实用的IDEA使用技巧

日常开发中,相信广大Java开发者都使用过IntelliJIDEA作为开发工具,IntelliJIDEA是一款优秀的Java集成开发环境,它提供了许多强大的功能和快捷键,可以帮助开发者提高编码效率和质量。除了一些常见的技巧,如自动导包、智能补全、重构工具等。IntelliJIDEA还有一些不为人知的技巧,可能很多开发者

基于 kubernetes+docker构建高可用、高性能的 web 、CICD集群

文章目录一、项目架构图二、项目描述三、项目环境四、环境准备1、IP地址规划2、关闭selinux和firewall3、配置静态ip地址4、修改主机名5、升级系统(可做可不做)6、添加hosts解析五、项目步骤1、设计整个集群的架构,规划好服务器的IP地址,搭建集群2、部署ansible完成相关软件的自动化运维工作,部署

TCP协议

TCP收发数据流程TCP如何收发数据分段发送可靠传输在TCP协议中,任何时候、任何一方都可以主动发送数据给另一方为了解决数据报丢失、数据报错乱等问题,TCP协议要求:接收方收到数据报后,必须对数据报进行确认!seq:表示这次数据报的序号ACK:表示这次数据报是一个确认数据报ack:表示期望下一次接收的数据报序号发送方如

NLP技术如何为搜索引擎赋能

目录1.NLP关键词提取与匹配在搜索引擎中的应用1.关键词提取例子2.关键词匹配例子Python实现2.NLP语义搜索在搜索引擎中的应用1.语义搜索的定义例子2.语义搜索的重要性例子Python/PyTorch实现3.NLP个性化搜索建议在搜索引擎中的应用1.个性化搜索建议的定义例子2.个性化搜索建议的重要性例子Pyt

【计算机辅助蛋白质结构分析、分子对接、片段药物设计技术与应用】

第一天上午生物分子互作基础1.生物分子相互作用研究方法1.1蛋白-小分子、蛋白-蛋白相互作用原理1.2分子对接研究生物分子相互作用1.3蛋白蛋白对接研究分子相互作用蛋白数据库1.PDB数据库介绍1.1PDB蛋白数据库功能1.2PDB蛋白数据可获取资源1.3PDB蛋白数据库对药物研发的重要性2.PDB数据库的使用2.1靶

mysql 注入之权限

SQL注入之高权限注入在数据库中区分有数据库系统用户与数据库普通用户,二者的划分主要体现在对一些高级函数与资源表的访问权限上。直白一些就是高权限系统用户拥有整个数据库的操作权限,而普通用户只拥有部分已配置的权限。网站在创建的时候会调用数据库链接,会区分系统用户链接与普通用户链接;当多个网站存在一个数据库的时候,root

可口可乐用新的“Y3000”口味拥抱有争议的人工智能图像生成器

可口可乐公司已经迈出了一大步,用它的释放;排放;发布据报道,可口可乐Y3000零糖“限量版”饮料是与人工智能共同创造的。它未来的名字让人想起3000年的味道(还有977年),但它的营销依赖于人工智能从2023年产生的图像——这要归功于有争议的图像合成模型稳定扩散.稳定扩散是在推出“可口可乐Y3000AICam”移动应用

热文推荐