大數(shù)據(jù)環(huán)境相關(guān)腳本
bash運(yùn)行模式說明
bash的運(yùn)行模式可分為
login shell
(用戶名、密碼登錄)和non-login shell
(SSH登錄)。
兩者登錄方式加載情況:
1.login shell啟動時會加載:/etc/profile,~/.bash_profile,~/.bashrc
2.non-login shell啟動時會加載:~/.bashrc
注意:~/.bashrc
實(shí)則會加載/etc/bashrc
,/etc/bashrc
又加載/etc/profile.d/*.sh
SSH登錄注意:
當(dāng)SSH到其他節(jié)點(diǎn)的時候是使用
non-login shell
模式,默認(rèn)是不加載/etc/profile
配置文件,也就會導(dǎo)致環(huán)境變量信息未配置,從而會找不到部分命令的問題
創(chuàng)建shell腳本目錄
創(chuàng)建
/root/shell
目錄,用于存放shell腳本
在
/etc/bashrc
文件配置shell腳本目錄,將其作為環(huán)境變量,以便在任何地方使用新建的shell腳本
# My Shell
export PATH=$PATH:/root/shell
配置hosts
配置每個節(jié)點(diǎn)的hosts文件,設(shè)置節(jié)點(diǎn)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自動配置腳本
執(zhí)行腳本來自動配置各個節(jié)點(diǎn)免密登錄。
vim ssh_config.sh
#! /bin/bash
function sshPasswordLogin() {
# 檢測expect服務(wù)是否存在,不存在則使用yum安裝expect
expectIsExists=$(rpm -qa | grep expect)
if [ -z "$expectIsExists" ]; then
yum -y install expect
fi
# 密鑰對不存在則創(chuàng)建密鑰
if [ ! -f /root/.ssh/id_rsa.pub ]; then
ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa
fi
# 服務(wù)器列表
# 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
更改執(zhí)行權(quán)限
chmod +x ssh_config.sh
在各個節(jié)點(diǎn)執(zhí)行ssh_config.sh腳本,然后就會自動進(jìn)行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
文件同步、復(fù)制工具rsync
rsync 是一個功能強(qiáng)大的文件同步和復(fù)制工具,可以在本地或遠(yuǎn)程服務(wù)器之間進(jìn)行文件傳輸和備份。
通過運(yùn)行以下命令安裝
# CentOS/RHEL
yum install rsync
# Ubuntu/Debian
apt-get install rsync
基本用法
1.本地文件復(fù)制:
把source 目錄下的文件復(fù)制到 destination 目錄
rsync /path/to/source/file /path/to/destination/
2.本地目錄復(fù)制:
使用 -a 參數(shù)表示遞歸復(fù)制目錄,-v 參數(shù)表示顯示詳細(xì)的復(fù)制過程
rsync -av /path/to/source/directory/ /path/to/destination/directory/
3.本地文件同步:
使用 --delete 參數(shù)可以保持源和目標(biāo)目錄的同步,刪除目標(biāo)目錄中不存在于源目錄的文件
rsync -av --delete /path/to/source/directory/ /path/to/destination/directory/
4.遠(yuǎn)程文件復(fù)制:
通過 SSH 連接復(fù)制本地文件到遠(yuǎn)程服務(wù)器。-z 參數(shù)表示使用壓縮來加速傳輸
rsync -avz -e "ssh" /path/to/local/file user@remote:/path/to/destination/
5.遠(yuǎn)程目錄復(fù)制:
rsync -avz -e "ssh" /path/to/local/directory/ user@remote:/path/to/destination/directory/
文件同步腳步
將指定的文件傳輸?shù)矫總€指定的主機(jī)節(jié)點(diǎn),在傳輸之前,會檢查文件是否存在,然后創(chuàng)建相應(yīng)的目錄并使用 rsync 進(jìn)行傳輸。
這個腳本將循環(huán)復(fù)制當(dāng)前節(jié)點(diǎn)指定目錄下的文件到其他節(jié)點(diǎn)的相同路徑下
vim sync.sh
#! /bin/bash
# 檢查是否提供了足夠的命令行參數(shù)
if [ $# -lt 1 ]; then
echo Not Enough Arguement!
exit
fi
# 遍歷集群所有機(jī)器
for host in node01 node02 node03 node04 node05; do
echo ==================== $host ====================
# 遍歷所有目錄,挨個發(fā)送
for file in $@; do
# 檢查文件是否存在
if [ -e $file ]; then
# 獲取父目錄
pdir=$(
cd -P $(dirname $file)
pwd
)
# 獲取當(dāng)前文件的名稱
fname=$(basename $file)
# 在遠(yuǎn)程主機(jī)執(zhí)行創(chuàng)建目錄的命令
ssh $host "mkdir -p $pdir"
# 將文件傳輸?shù)竭h(yuǎn)程主機(jī)的相應(yīng)目錄
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
更改執(zhí)行權(quán)限
chmod +x sync.sh
使用文件同步腳本,進(jìn)行分發(fā)同步hosts配置信息
[root@node01 ~]# sync.sh /etc/hosts
命令執(zhí)行腳本
遍歷服務(wù)器名稱列表,然后在每臺服務(wù)器上運(yùn)行指定的命令
#! /bin/bash
for i in node01 node02 node03 node04 node05
do
echo --------- $i ----------
ssh $i "$*"
done
更改執(zhí)行權(quán)限
chmod +x call.sh
使用示例
call.sh jps
使用命令執(zhí)行腳本,在每個節(jié)點(diǎn)執(zhí)行指定的命令
[root@node01 ~]# call.sh jps
節(jié)點(diǎn)循環(huán)簡化
定義一個hosts文件
node01
node02
node03
node04
node05
以命令執(zhí)行腳本簡化為例說明:
#!/bin/bash
for host in `cat /root/hosts` ;
do
# tput命令,用于設(shè)置終端輸出的文本顏色為綠色
tput setaf 2
echo ======== $host ========
# 將終端輸出的文本顏色重置為默認(rèn)顏色
tput setaf 7
ssh $host "$@"
done
大數(shù)據(jù)組件相關(guān)腳本
Hadoop集群腳本
vim hadoop.sh
#!/bin/bash
# Hadoop安裝目錄
HADOOP_HOME="/usr/local/program/hadoop"
# namenode分配節(jié)點(diǎn)
NAMENODE="node01"
COMMAND=""
if [ $# -lt 1 ]; then
echo "請輸入命令參數(shù) 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 "=================== 關(guān)閉 Hadoop 集群 ==================="
echo "--------------- 關(guān)閉 YARN ---------------"
ssh $NAMENODE "$HADOOP_HOME/sbin/stop-yarn.sh"
echo "--------------- 關(guān)閉 HDFS ---------------"
ssh $NAMENODE "$HADOOP_HOME/sbin/stop-dfs.sh"
;;
*)
echo "無效參數(shù): $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 狀態(tài)----------------------"
ssh $i "/usr/local/program/zookeeper/bin/zkServer.sh status"
done
;;
*)
echo "無效的命令"
;;
esac
修改腳本執(zhí)行權(quán)限
chmod +x zk.sh
啟動、停止Zookeeper
zk.sh start
zk.sh stop
Kafaka集群腳本
vim kafaka.sh
#!/bin/bash
if [ $# -eq 0 ]; then
echo "請輸入命令參數(shù) 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"
# 通過$?獲取上一個命令的執(zhí)行狀態(tài)。如果執(zhí)行狀態(tài)不為 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 "無效參數(shù): $1"
echo "請輸入: start 或 stop"
exit 1
;;
esac
修改腳本執(zhí)行權(quán)限
chmod +x kafaka.sh
啟動、停止Kafaka
kafaka.sh start
kafaka.sh stop
Flume集群腳本
創(chuàng)建vim flume.sh
集群啟動停止腳本
#!/bin/bash
# flume執(zhí)行節(jié)點(diǎn)
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"
# 執(zhí)行進(jìn)程名稱
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 "無效參數(shù): $1"
echo "請輸入: start 或 stop"
exit 1
;;
esac
修改腳本執(zhí)行權(quán)限文章來源:http://www.zghlxwxcb.cn/news/detail-732509.html
chmod +x flume.sh
啟動、停止Flume文章來源地址http://www.zghlxwxcb.cn/news/detail-732509.html
flume.sh start
flume.sh stop
到了這里,關(guān)于大數(shù)據(jù)開發(fā)中常用組件服務(wù)的集群管理腳本整理集合的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!