当前位置: 首页 > article >正文

大数据集群搭建以及使用过程中几个实用的shell脚本

文章目录

  • 前言
  • 一、分发脚本
  • 二、查看所有节点jps脚本
  • 三、zookeeper启停脚本
  • 四、hive中的hiveserver2和metastore启停脚本


前言

下面的所有脚本要想全局使用,需要将其放到 /usr/local/sbin 或者 /usr/local/bin 或者 /usr/sbin 或者 /usr/bin 下面,这样才能全局使用以下脚本

一、分发脚本

创建 xsync.sh 文件,并添加如下内容:

#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if [ $pcount -lt 1 ]
then
    echo No Enough Arguement!
    exit;
fi

#2. 遍历集群所有机器
for host in node02 node03
do
    echo ====================    $host    ====================
    #3. 递归遍历所有目录
    for file in $@
    do
        #4 判断文件是否存在
        if [ -e $file ]
        then
            #5. 获取全路径
            pdir=$(cd -P $(dirname $file); pwd)
            echo pdir=$pdir
            
            #6. 获取当前文件的名称
            fname=$(basename $file)
            echo fname=$fname
            
            #7. 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)
            ssh $host "source /etc/profile;mkdir -p $pdir"
            
            #8. 远程同步文件至$host主机的$USER用户的$pdir文件夹下
            rsync -av $pdir/$fname $USER@$host:$pdir
        else
            echo $file Does Not Exists!
        fi
    done
done

使用方法:
xsync.sh 后面跟上需要分发的文件

二、查看所有节点jps脚本

创建jpsall文件,添加如下内容:

#!/bin/bash
USAGE="使用方法:jpsall'"
NODES=("node01" "node02" "node03")
# 循环遍历三台节点,并获取jps进程,打印出来
for NODE in ${NODES[*]};do
echo "--------$NODE--------"
ssh $NODE "/opt/installs/jdk/bin/jps"
done
echo "--------jpsall脚本执行完成!--------"

使用方法:
在存放该脚本的节点上输入jpsall即可查看所有节点的jps进程

三、zookeeper启停脚本

创建 zk.sh 文件,并添加如下内容:

#!/bin/bash

# 获取参数
COMMAND=$1
if [ ! $COMMAND ]; then
    echo "please input your option in [start | stop | status]"
    exit -1
fi
if [ $COMMAND != "start" -a $COMMAND != "stop" -a $COMMAND != "status" ]; then
    echo "please input your option in [start | stop | status]"
    exit -1
fi

# 所有的服务器
HOSTS=( node01 node02 node03 )
for HOST in ${HOSTS[*]}
do
    ssh -T $HOST << TERMINATOR
    echo "---------- $HOST ----------"
    zkServer.sh $COMMAND 2> /dev/null | grep -ivh SSL
    exit
TERMINATOR
done

使用方法:

zk.sh start # 开启zookeeper集群
zk.sh stop  # 关闭zookeeper集群

四、hive中的hiveserver2和metastore启停脚本

创建 hive-server-manager.sh 文件,并添加如下内容:

#!/bin/bash
help_info() {
    echo "+---------------------------------------------------------------------------------+"
    echo "|             本脚本可以一键控制 Hive 的 metastore 和 hiveserver2 服务            |"
    echo "| 使用方式: hive-server-manager.sh [start|stop|status] [metastore|hiveserver2]    |"
    echo "+---------------------------------------------------------------------------------+"
    echo "| 第一个参数用来指定操作命令,可以选择 开始(start)、停止(stop)、状态查看(status)  |"
    echo "| 第二个参数用来指定操作的服务,可以选择 metastore、hiveserver2,默认为全部       |"
    echo "+---------------------------------------------------------------------------------+"
    echo "|     - start  : 一键开启metastore和hiveserver2服务,也可以指定服务开启           |"
    echo "|     - stop   : 一键停止metastore和hiveserver2服务,也可以指定服务停止           |"
    echo "|     - status : 一键查看metastore和hiveserver2服务,也可以指定服务查看           |"
    echo "+---------------------------------------------------------------------------------+"
    exit -1
}


# 获取操作命令
op=$1
# 获取操作的服务
server=$2


# 检查参数是否正确
if [ ! $op ]; then
    help_info
elif [ $op != "start" -a $op != "stop" -a $op != "status" ]; then
    help_info
fi

# 检查进程状态
metastore_pid=`ps aux | grep org.apache.hadoop.hive.metastore.HiveMetaStore | grep -v grep | awk '{print $2}'`
hiveserver2_pid=`ps aux | grep proc_hiveserver2 | grep -v grep | awk '{print $2}'`

# 检查日志文件夹的存在情况,如果不存在则创建这个文件夹
log_dir=/var/log/my_hive_log
if [ ! -e $log_dir ]; then
    mkdir -p $log_dir
fi
# 开启服务
start_metastore() {
    # 检查是否开启,如果未开启,则开启 metastore 服务
    if [ $metastore_pid ]; then
        echo "metastore   服务已经开启,进程号: $metastore_pid,已跳过"
    else
        nohup hive --service metastore >> $log_dir/metastore.log 2>&1 &
        echo "metastore   服务已经开启,日志输出在 $log_dir/metastore.log"
    fi
}
start_hiveserver2() {
    # 检查是否开启,如果未开启,则开启 hiveserver2 服务
    if [ $hiveserver2_pid ]; then
        echo "hiveserver2 服务已经开启,进程号: $hiveserver2_pid,已跳过"
    else
        nohup hive --service hiveserver2 >> $log_dir/hiveserver2.log 2>&1 &
        echo "hiveserver2 服务已经开启,日志输出在 $log_dir/hiveserver2.log"
    fi 
}

# 停止服务
stop_metastore() {
    if [ $metastore_pid ]; then
        kill -9 $metastore_pid
    fi
    echo "metastore   服务已停止" 
}
stop_hiveserver2() {
    if [ $hiveserver2_pid ]; then 
        kill -9 $hiveserver2_pid
    fi
    echo "hiveserver2 服务已停止"
}

# 查询服务
status_metastore() {
    if [ $metastore_pid ]; then
        echo "metastore   服务已开启,进程号: $metastore_pid"
    else
        echo "metastore   服务未开启"
    fi
}
status_hiveserver2() {
    if [ $hiveserver2_pid ]; then
        echo "hiveserver2 服务已开启,进程号: $hiveserver2_pid"
    else
        echo "hiveserver2 服务未开启"
    fi
}

# 控制操作
if [ ! $server ]; then
    ${op}_metastore
    ${op}_hiveserver2
elif [ $server == "metastore" ]; then
    ${op}_metastore
elif [ $server == "hiveserver2" ]; then
    ${op}_hiveserver2
else
    echo "服务选择错误"
    help_info
fi

使用方式: hive-server-manager.sh [start|stop|status] [metastore|hiveserver2]

  • start : 一键开启metastore和hiveserver2服务,也可以指定服务开启
  • stop : 一键停止metastore和hiveserver2服务,也可以指定服务停止
  • status : 一键查看metastore和hiveserver2服务,也可以指定服务查看

http://www.kler.cn/a/302657.html

相关文章:

  • DOCKER 镜像基础命令
  • 使用 unicorn 和 capstone 库来模拟 ARM Thumb 指令的执行(一)
  • 机器学习总结
  • 前端垂直居中的多种实现方式及应用分析
  • [前端]NodeJS常见面试题目
  • 24.11.13 Javascript3
  • Django 创建好的模块怎么在后台显示
  • 锐捷交换机常用命令
  • 李沐深度学习 自制数据集
  • Iptables命令常用命令
  • C#中的闭包
  • 2024.9.13 Python与图像处理新国大EE5731课程大作业,SIFT 特征和描述符,单应性矩阵透视变换
  • redis常见的数据类型?
  • 解决:Module build failed (from ./node_modules/sass-loader/dist/cjs.js)问题
  • 秋招突击——9/10、9\11——算法练习——携程笔试练习——2024年秋招第一批笔试
  • 数据库的实施过程分析
  • 【白话树】之 树的基本知识、存储结构和二叉树转换
  • RabbitMQ创建交换机和队列——配置类 注解
  • Idea 创建 Maven项目的时候卡死
  • 体育数据API纳米足球数据API:足球数据接口文档API示例⑫
  • 【解决方案】双系统中修复ubuntu引导
  • 【算法】-单调队列
  • 数据库系统 第43节 数据库复制
  • LabVIEW回转马达试验系统
  • Git撤销add
  • Flutter类