- 注意事项
- 执行该脚本之前先做好免密设置没有做好相应设置的点击下面链接去安装
自动免密脚本
- 执行该脚本之前对脚本内容最前面部分变量 software_dir、install_dir、hostname根据自已定义的路径进行更改,主机名也是如此
- hadoop3.x版本在最下面
- 下面是hadoop2.x版本
#!/bin/bash
software_dir=/root/hadoop/
install_dir=/opt/
hostname=(master node1 node2)
jdk_name=$(tar -tf "$software_dir"jdk*|head -n 1|sed 's|\/||')
hadoop_name=$(tar -tf "$software_dir"hadoop*|head -n 1|sed 's|\/||')
zookeeper_name=$(tar -tf "$software_dir"zookeeper*|head -n 1|sed 's|\/||')
chrony_install ()
{
echo =================== Start Chrony Install =====================
for host in ${hostname[@]}
do
ssh -T $host <<-EOF
[ ! \$(rpm -qa chrony) ] && yum install -y chrony &>/dev/null
[ ! \$(rpm -qa chrony) ] && echo "============ install chrony fail ==============" && exit
sed -i 's/^server/#server/' /etc/chrony.conf
echo -e "server master iburst\nbindaddress ::\nallow" >> /etc/chrony.conf
[ ${hostname[0]} = \$(hostname) ] && echo "local stratum 10" >> /etc/chrony.conf && sed -i 's/master/127\.0\.0\.1/' /etc/chrony.conf
systemctl enable --now chronyd
timedatectl set-timezone Asia/Shanghai
chronyc -a makestep
exit
EOF
done
[ ! $(rpm -qa chrony) ] && exit
}
custom_script ()
{
for host in ${hostname[@]}
do
ssh -T $host <<-EOF
[ ! \$(rpm -qa rsync) ] && yum install -y rsync &>/dev/null
[ ! \$(rpm -qa rsync) ] && echo "============ install rsync fail ==============" && exit
exit
EOF
done
[ ! $(rpm -qa rsync) ] && exit
cat > /usr/local/bin/xsync << EOF
#!/bin/bash
pcount=\$#
if [ \$pcount -lt 1 ]
then
echo "Not Enough Arguement !"
exit
fi
for host in ${hostname[@]}
do
if [ "\$host" = \$(hostname) ]
then
continue
fi
echo ======================== Start \$host File Sync =======================
for file in \$@
do
if [ -e \$file ]
then
pdir=\$(cd -P \$(dirname \$file); pwd)
echo fileDir=\$pdir
fname=\$(basename \$file)
echo fileName=\$fname
ssh \$host "mkdir -p \$pdir"
rsync -av \$pdir/\$fname \$host:\$pdir &>/dev/null
else
echo "\$file does not exists"
fi
done
done
EOF
chmod +x /usr/local/bin/xsync
cat > /usr/local/bin/jpsall << EOF
#!/bin/bash
for host in ${hostname[@]}
do
echo -e "\033[32m======================== \$host =======================\033[0m"
if [ \$# -gt 0 ]
then
ssh \$host "source /etc/profile;\$*"
else
ssh \$host "source /etc/profile;jps|grep -v Jps"
fi
done
EOF
chmod +x /usr/local/bin/jpsall
}
decom_install_pack()
{
echo "========= Start extracting the $1 installation package ========="
pv ${software_dir}*$1* |tar zxf - -C $install_dir
[ -n "$2" ] && mv ${install_dir}*$1* ${install_dir}$2
}
conf_env ()
{
echo =================== Start Configuration Component Environment =====================
decom_install_pack jdk
decom_install_pack hadoop
decom_install_pack zookeeper
rm -rf $install_dir$hadoop_name/share/doc
xsync ${install_dir}{
$jdk_name,$hadoop_name,$zookeeper_name}
cat > /etc/profile.d/hadoop.sh <<EOF
#!/bin/bash
#java
export JAVA_HOME=$install_dir${jdk_name}
export PATH=\$PATH:\$JAVA_HOME/bin
#hadoop
export HADOOP_HOME=$install_dir${hadoop_name}
export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin
#zookeeper
export ZOOKEEPER_HOME=$install_dir${zookeeper_name}
export PATH=\$PATH:\$ZOOKEEPER_HOME/bin
#hive
export HIVE_HOME=${install_dir}hive
export PATH=\$PATH:\$HIVE_HOME/bin
EOF
xsync /etc/profile.d/hadoop.sh
. /etc/profile
java -version &>/dev/null
[ $? -eq 0 ] && echo "========= java/hadoop/zookeeper installation complete !========"
jpsall &>/dev/null
}
zookeeper_install ()
{
echo =================== Start Zookeeper Configuration =====================
zookeeper_path=$install_dir$zookeeper_name
mkdir -p $zookeeper_path/{
data,logs}
mv $install_dir$zookeeper_name/conf/{
zoo_sample.cfg,zoo.cfg}
sed -i "/^dataDir=/c\dataDir=$zookeeper_path/data" $zookeeper_path/conf/zoo.cfg
count=1
for host in ${hostname[@]}
do
zookeeper_host+="server.$count=$host:2888:3888"
if [ $count -lt $(( ${#hostname[@]} )) ]
then
zookeeper_host+="\n"
fi
((count++))
done
echo -e "$zookeeper_host" >> $zookeeper_path/conf/zoo.cfg
sed -i "s|ZOO_LOG_DIR=\".\"|ZOO_LOG_DIR=\"$zookeeper_path/logs\"|" $zookeeper_path/bin/zkEnv.sh
cat > /usr/lib/systemd/system/zookeeper.service <<EOF
[Unit]
Description=Zookeeper Service
After=network.target syslog.target
[Service]
Type=forking
User=root
Group=root
Environment=JAVA_HOME=$install_dir$jdk_name
PIDFile=$zookeeper_path/data/zookeeper_server.pid
ExecStart=$zookeeper_path/bin/zkServer.sh start
ExecStop=$zookeeper_path/bin/zkServer.sh stop
ExecReload=$zookeeper_path/bin/zkServer.sh restart
Restart=always
TimeoutSec=30
SuccessExitStatus=130 143
[Install]
WantedBy=multi-user.target
EOF
chown -R root:root $zookeeper_path
xsync $zookeeper_path
xsync /usr/lib/systemd/system/zookeeper.service
count=1
for host in ${hostname[@]}
do
ssh -T $host <<EOF
echo $count > $zookeeper_path/data/myid
systemctl daemon-reload
systemctl enable --now zookeeper
exit
EOF
((count++))
done
jpsall "zkServer.sh status"
}
hadoop_install ()
{
echo =================== Start Hadoop Configuration =====================
hadoop_path=$install_dir$hadoop_name
hadoop_conf_path=$hadoop_path/etc/hadoop
cp $hadoop_conf_path/{
mapred-site.xml.template,mapred-site.xml}
sed -i '/configuration>$/d' $hadoop_conf_path/{
core-site,hdfs-site,mapred-site,yarn-site}.xml
for ((i=0; i<${#hostname[@]}; i++))
do
zookeeper_address+=