腳本自寫,可根據業務自行調整
#!/bin/bash
function hadoop(){
echo "${needmountdisk[0]}磁盤掛載檢查"
file=${needmountfile[i]}
filenum=`echo ${file#*e}`
BeforeMountfilenum=`printf "%02d" $((10#$filenum-1))`
BeforeMountfile=storage$BeforeMountfilenum
echo "備份hdfs-site.xml到/tmp/"
rsync -azrL --delete --force /etc/hadoop/hdfs-site.xml /tmp/
echo "修改${needmountfile[i]}目錄權限"
chmod -R 770 /mnt/${needmountfile[i]} && chown -R hdfs:hadoop /mnt/${needmountfile[i]}
echo "修改hdfs-site.xml配置文件"
ip=`ifconfig -a | grep -A 1 "bond0" | grep inet | awk '{print $2}' | awk -F ":" '{print $2}'`
if [[ ${needmountfile[i]} == storage01 ]];
then
sed -i '/\/mnt\/storage02\/datum\/datanode,/i\\ /mnt/storage01/datum/datanode,' /etc/hadoop/hdfs-site.xml
su - hdfs -c "hdfs dfsadmin -reconfig datanode $ip:50020 start"
su - hdfs -c "hdfs dfsadmin -reconfig datanode $ip:50020 status"
else
sed -i "/\/mnt\/$BeforeMountfile\/datum\/datanode,/a\\ /mnt\/${needmountfile[i]}\/datum\/datanode," /etc/hadoop/hdfs-site.xml
sed -i "/\/mnt\/$BeforeMountfile\/datum\/datanode,/a\\ /mnt\/${needmountfile[i]}\/datum\/datanode," /etc/hadoop/hdfs-site.xml
su - hdfs -c "hdfs dfsadmin -reconfig datanode $ip:50020 start"
su - hdfs -c "hdfs dfsadmin -reconfig datanode $ip:50020 status"
fi
}
function kafka(){
echo "創建kafka文件環境"
mkdir -p /mnt/${needmountfile[i]}/datum
mkdir -p /mnt/${needmountfile[i]}/datum/kafka_data/
chmod -R 770 /mnt/${needmountfile[i]} && chown -R kafka:hadoop /mnt/${needmountfile[i]}
}
function yarn(){
echo "創建yarn文件環境"
mkdir -p /mnt/storage00/logs
mkdir -p /mnt/storage00/logs/yarn
chown -R yarn:hadoop /mnt/storage00/logs/
}
function Startmount(){
if [ ! -n "$OLDUUID" ];
then
echo "添加${needmountdisk[i]}磁盤UUID到/etc/fatab中需掛載的文件/mnt/${needmountfile[i]}"
echo "UUID="$NEWUUID" /mnt/${needmountfile[i]} $fs defaults,nofail,noatime,nodiratime 0 0 #${needmountdisk[i]}" >> /etc/fstab
echo "磁盤掛載到${needmountfile[i]}文件夾"
mount -a
else
echo "添加${needmountdisk[i]}磁盤UUID到/etc/fatab中需掛載的文件/mnt/${needmountfile[i]}"
sed -i "s/$OLDUUID/$NEWUUID/" /etc/fstab
echo "磁盤掛載到${needmountfile[i]}文件夾"
mount -a
fi
}
systemdisk=`fdisk -l | grep -i Linux | awk '{print $1}'| head -n 1 | sed 's/.$//'`
alldisk=(`fdisk -l | grep -i disk | grep dev | sort -k 4 | awk '{print $2}' | awk -F ":" '{print $1}'| grep -v $systemdisk`)
alldisksum=${#alldisk[@]}
for i in `seq -w 0 40`
do
if [[ 10#$i -lt $alldisksum ]];
then
mkdir -p /mnt/storage$i
else
break
fi
done
fsdisk=(`df -h | grep mnt | awk '{print $1}'`)
allfilesum=`ls /mnt/ | grep storage| wc -l`
mountfilesum=`df -h | grep mnt | wc -l`
allfile=(`ls /mnt/ | grep storage`)
mountfile=(`df -h | grep mnt | awk '{print $6}' | sort -k 1`)
declare -a needmountfile
t=0
flag=0
for nomountfile in "${allfile[@]}"
do
for file in "${mountfile[@]}"
do
if [[ "/mnt/${nomountfile}" == "${file}" ]]; then
flag=1
break
fi
done
if [[ $flag -eq 0 ]]; then
needmountfile[t]=$nomountfile
t=$((t+1))
else
flag=0
fi
done
declare -a needmountdisk
t=0
flag=0
for mountdisk in "${alldisk[@]}"
do
for disk in "${fsdisk[@]}"
do
if [[ "${mountdisk}" == "${disk}" ]]; then
flag=1
break
fi
done
if [[ $flag -eq 0 ]]; then
needmountdisk[t]=$mountdisk
t=$((t+1))
else
flag=0
fi
done
mountdisknum=${#needmountdisk[@]}
if [[ $mountdisknum -ge 1 ]]; then
for (( i = 0; i <= $mountdisknum-1 ; i++ )); do
OLDUUID=`cat /etc/fstab | grep ${needmountfile[i]} | awk -F '"' '{print $2}'`
fs=`blkid | awk -F '"' '{print $4}' | awk 'END {print}'`
echo "----------Begin----------"
echo "磁盤${needmountdisk[i]}開始格式化"
mkfs.$fs ${needmountdisk[i]}
if [ $? -eq 0 ];
then
echo "盤符${needmountdisk[i]}格式化完成"
echo "備份/etc/fstab到/tmp/"
rsync -azrL --delete --force /etc/fstab /tmp/
NEWUUID=`blkid | grep ${needmountdisk[i]} | awk -F '"' '{print $2}'`
Startmount
echo "/mnt/${needmountfile[i]}磁盤掛載檢查"
HostName=`hostname`
if mountpoint -q /mnt/${needmountfile[i]}
then
while [[ $HostName == *datanode* && ${needmountfile[i]} == storage00 ]]; do
yarn
break
done
while [[ $HostName == *datanode* && ${needmountfile[i]} != storage00 ]]; do
hadoop
break
done
while [[ $HostName == *kafka* ]]; do
kafka
break
done
echo "----------End----------"
else
echo "${needmountfile[i]}掛載失敗"
echo "/etc/fatab備份還原"
rsync -azrL --delete --force /tmp/fstab /etc/
echo "----------End----------"
exit 0
fi
else
echo "${needmountdisk[i]}磁盤格式化失敗"
break
fi
done
else
echo “磁盤均已掛載”
echo “請檢查硬盤是否被系統識別”
exit 0
fi