【费元星原创】一键安装Hadoo2.7.6 集群完全分布式脚本-完美解决

有Bug 欢迎反馈,我不烦:feiyuanxing@gmail.com

  1 #!/bin/bash
#@author:feiyuanxing 【既然笨到家,就要努力到家】
#@date:2017-01-05
#@E-Mail:feiyuanxing@gmail.com
#@TARGET:一键安装hadoop 2.7.6 centos 64位
#@CopyRight:本脚本遵守 未来星开源协议(http://feiyuanxing.com/kaiyuanxieyi/kaiyuanxieyi.html) #讲解:
#0.前提条件:
# 0.1 已经配置好JAVA环境变量
# 0.2 已经配置免密登录环境
#1.请使用root用户执行,软件默认安装在work用户,通常会在linux的/home 挂载一个大型磁盘
#2.软件安装在/home/work/local/hadoop/hadoop 有人问为什么这么深
# 2.1 work目录下local包含所有软件 hadoop安装大数据生态圈其他软件
# 2.2 hadoop的数据安装在 /home/work/data ,此目录由于数量较大,可以单独挂载一个磁盘
#
####################################################################################
# 个性化设置
# Hadoop 生态目录
INSTALL_HOME=/home/work/local/hadoop #data 目录
DATA_HOME=/home/work/data
# Hadoop目录
ROOT_HOME=${INSTALL_HOME}/hadoop_tmp #name 通常为主机(本机),缺省配置为master
NAMENODE=master
#name 通常为第一台从机,缺省配置为slave01
SECONDARYNAMENODE=slave01
#hadoop 版本
HADOOP_VERSION=hadoop-2.7.6.tar.gz
####################################################################################
# Hadoop 生态数据路径
hadoop_logs=${DATA_HOME}/hadoop_logs
hadoop_tmp=${DATA_HOME}/hadoop_tmp
hadoop_data=${DATA_HOME}/hadoop_data
hadoop_name=${DATA_HOME}/hadoop_name
#当前脚本的位置
SCRIPT_HOME=$(cd `dirname $0`; pwd) mkdir -p ${INSTALL_HOME} && cd ${INSTALL_HOME}
mkdir -p ${ROOT_HOME} && mkdir -p ${hadoop_logs} && mkdir -p ${hadoop_tmp}&& mkdir -p ${hadoop_data}&& mkdir -p ${hadoop_name} #chown -R work:work /home/work/data/hadoop #集群机器信息
INSTALL_IP_ARRAY=()
INSTALL_HOSTNAME_ARRAY=() # 需要判断用户是否存在
function add_work_user(){
adduer work -d /home/work
passwd work } #需要判断jdk是否存在
function install_jdk(){
# 有jdk
echo $JAVA_HOME } #下载hadoop
function download_hodoop(){
echo "(2-1/6)正在获取安装包:${INSTALL_HOME}/hadoop-2.7.6.tar.gz"
if [ ! -f ${INSTALL_HOME}/hadoop-2.7.6.tar.gz ] ;then
echo "开始下载"
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.6/${HADOOP_VERSION}
fi
echo "(2-2/6)获取安装包完成:${INSTALL_HOME}/hadoop-2.7.6.tar.gz" } function configuration_ssh(){
#设置本机免密码登录
(echo -e "\n"
sleep 1
echo -e "\n"
sleep 1
echo -e "\n")|ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
} function readFileToArra(){
echo "(1/6)正在读取配置文件:${SCRIPT_HOME}/hostip_hadoop.txt"
if [ ! -f "${SCRIPT_HOME}"/hostip_hadoop.txt ];then
echo "请在本目录下的【hostip_hadoop.txt】文件中添加Hadoop集群机器信息"
echo "#USENAME@IP:PORT,PASSWD(第一个必须配置为主,通常为本机)
root@191.168.1.1:22,123456
root@191.168.1.2:22,123456" > ${SCRIPT_HOME}/hostip_hadoop.txt
exit;
else
INSTALL_IP_ARRAY=($(cat "${SCRIPT_HOME}"/hostip_hadoop.txt| grep -v "^#"))
INSTALL_HOSTNAME_ARRAY=($(cat "${SCRIPT_HOME}"/hostip_hadoop.txt| grep -v "^#"|awk -F '@' '{print $2}'|awk -F ':' '{print $1}'))
fi #for(( i=0 ; i<${#INSTALL_IP_ARRAY[@]} ; i++)) do
# echo "打印数组:${INSTALL_IP_ARRAY[i]}"
#done;
} #readFileToArra function configure_hadoop(){ echo "(3-1/6)正在解压安装包:"
#最终生成的文件名为install_hadoop.bin而我们的all.tar.gz被>>到该文件后面
#tail -c $size install_hadoop.bin >all.tar.gz
rm -rf hadoop hadoop_tmp
tar -zxf ${HADOOP_VERSION}
#pwd
mv hadoop-2.7.6 hadoop_tmp && cd hadoop_tmp echo "(3-2/6)正在配置Hadoop环境变量:"
#设置环境变量
hadoop_home_before=`cat /etc/profile| grep "HADOOP_HOME"` if [ -z "${hadoop_home_before}" ] ;then
echo "hadoop 环境变量已存在..."
sed -i '/HADOOP_HOME/d' /etc/profile
echo "export HADOOP_HOME=${INSTALL_HOME}" >> /etc/profile
echo 'export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin' >> /etc/profile
#使得环境变量生效
source /etc/profile
sleep 1;
source /etc/profile fi echo "(4/6)正在配置Hadoop基本配置:"
#通过强大的sed命令来修改hadoop的配置文件
jdk_home=`echo $JAVA_HOME`
if [ -z ${jdk_home} ] ;then
#安装JDK
echo "程序已退出,请先配置JDK"
exit
fi #echo "开始配置hadoop"
# 1.配置hadoop-env.sh
sed -i "s!\${JAVA_HOME}!$(echo ${jdk_home})!g" ${ROOT_HOME}/etc/hadoop/hadoop-env.sh
# 2.配置core-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>fs.defaultFS\<\/name\>\n\\t\\t\<value\>hdfs://${NAMENODE}:9000\<\/value\>\n\\t\<\/property\>\n\\t\<property\>\n\\t\\t\<name\>hadoop.tmp.dir\<\/name\>\n\\t\\t\<value\>file:$(echo ${hadoop_tmp})\<\/value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/core-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>io.file.buffer.size\</name\>\n\\t\\t\<value\>131072\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/core-site.xml
# 3.配置hdfs-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>dfs.webhdfs.enabled\</name\>\n\\t\\t\<value\>true\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/hdfs-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>dfs.replication\</name\>\n\\t\\t\<value\>2\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/hdfs-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>dfs.datanode.data.dir\</name\>\n\\t\\t\<value\>file:${hadoop_name}\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/hdfs-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>dfs.namenode.name.dir\</name\>\n\\t\\t\<value\>file:${hadoop_data}\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/hdfs-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>dfs.namenode.secondary.http-address\</name\>\n\\t\\t\<value\>master:9001\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/hdfs-site.xml
# 4.配置mapred-site.xml
cp ${ROOT_HOME}/etc/hadoop/mapred-site.xml.template ${ROOT_HOME}/etc/hadoop/mapred-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>mapreduce.jobhistory.webapp.address\</name\>\n\\t\\t\<value\>master:19888\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/mapred-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>mapreduce.jobhistory.address\</name\>\n\\t\\t\<value\>master:10020\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/mapred-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>mapreduce.framework.name\</name\>\n\\t\\t\<value\>yarn\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/mapred-site.xml
# 5.配置yarn-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>yarn.resourcemanager.webapp.address\</name\>\n\\t\\t\<value\>master:8088\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/yarn-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>yarn.resourcemanager.admin.address\</name\>\n\\t\\t\<value\>master:8033\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/yarn-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>yarn.resourcemanager.resource-tracker.address\</name\>\n\\t\\t\<value\>master:8031\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/yarn-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>yarn.resourcemanager.scheduler.address\</name\>\n\\t\\t\<value\>master:8030\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/yarn-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>yarn.resourcemanager.address\</name\>\n\\t\\t\<value\>master:8032\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/yarn-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>yarn.nodemanager.aux-services.mapreduce.shuffle.class\</name\>\n\\t\\t\<value\>org.apache.hadoop.mapred.ShuffleHandler\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/yarn-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>yarn.nodemanager.aux-services\</name\>\n\\t\\t\<value\>mapreduce_shuffle\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/yarn-site.xml
# 6.配置slaves文件
echo "" > ${ROOT_HOME}/etc/hadoop/slaves
for(( i=0 ; i<${#INSTALL_HOSTNAME_ARRAY[@]} ; i++)) do
echo "${INSTALL_HOSTNAME_ARRAY[i]}" >> ${ROOT_HOME}/etc/hadoop/slaves
done; echo "(5/6)正在发送hadoop到其他机器"
for line in ${INSTALL_IP_ARRAY[@]}
do
user=`echo ${line}| awk -F "@" '{print $1}'`
ip=`echo ${line}| cut -d "@" -f 2| cut -d ":" -f 1`
port=`echo ${line}| cut -d "@" -f 2| cut -d ":" -f 2|cut -d "," -f 1`
echo ${user} - ${ip} - ${port} - ${passwd}
ssh -p ${port} -o StrictHostKeyChecking=no "${user}@${ip}" "rm -rf ${DATA_HOME}/hadoop_*;rm -rf ${INSTALL_HOME}/hadoop;mkdir -p ${INSTALL_HOME}/hadoop;mkdir -p ${hadoop_logs} && mkdir -p ${hadoop_tmp}&& mkdir -p ${hadoop_data}&& mkdir -p ${hadoop_name}"
#echo "scp -P ${port} -o StrictHostKeyChecking=no -rpq ${ROOT_HOME} \"${user}\"@\"${ip}\":${INSTALL_HOME}"
scp -P ${port} -o StrictHostKeyChecking=no -rpq ${ROOT_HOME}/* "${user}"@"${ip}":${INSTALL_HOME}/hadoop
ssh -p ${port} -o StrictHostKeyChecking=no "${user}@${ip}" "chown -R work:work ${INSTALL_HOME}"
done echo "(6/6)Hadoop配置成功" } #配置Hadoop启动服务
function start_hadoop(){
#格式化hadoop
hdfs namenode -format
echo "格式化完成..开始运行"
#先启动HDFS
start-dfs.sh
#再启动YARN
start-yarn.sh #检查是否启动成功
jps }
#动态读取配置文件
readFileToArra
#add_work_user
download_hodoop;
#configuration_ssh
configure_hadoop
#start_hadoop
上一篇:学习笔记总结---关于sass


下一篇:Windows 搭建WAMP+Mantis