@
目录ubuntu环境脚本部署hadoop~
根据手工搭建部署此脚本
初始化环境
各节点上执行!!!!
注意脚本内会修改root密码~
#!/bin/bash
echo "#####检查网络#####"
ping $baidu.com -c 4 >> /dev/null 2>&1
if [ 0 -ne $? ]; then
echo -e "\033[31m Warning\n检查一下网络,不能上网!\033[0m"
exit 1
fi
echo "#####配置主机映射#####"
master_name=master
node1_name=slave1
node2_name=slave2
master_ip=192.168.200.100
node1_ip=192.168.200.101
node2_ip=192.168.200.102
if [[ `ip a |grep -w $master_ip ` != '' ]];then
hostnamectl set-hostname $master_name
elif [[ `ip a |grep -w $node1_ip ` != '' ]];then
hostnamectl set-hostname $node1_name
elif [[ `ip a |grep -w $node2_ip ` != '' ]];then
hostnamectl set-hostname $node2_name
else
echo "完球~~报错了"
fi
cat >> /etc/hosts <<eof
$master_ip $master_name
$node1_ip $node1_name
$node2_ip $node2_name
eof
echo "#####开启ssh密码验证#####"
apt install -y openssh-server
cat >> /etc/ssh/sshd_config <<eof
PermitRootLogin yes
eof
systemctl restart sshd
echo "#####修改root密码#####”
#密码为Root@123
echo root:Root@123|chpasswd
echo "#####初始化环境完毕#####“
配置ssh免密
在各节点上执行一
#!/bin/bash
# @huhy
# 三台服务器进行免密操作,默认三台服务器密码相同,如果不同则自行添加变量
master_ip=192.168.200.100
node1_ip=192.168.200.101
node2_ip=192.168.200.102
PD=Root@123
echo "####开始免密操作####"
rm -rf /root/.ssh
if [ ! -f ~/.ssh/id_rsa ];then
ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa &> /dev/null
else
echo "已存在密钥对"
fi
#安装expect软件包
yum install expect -y
if [[ huhy == huhy ]];then
expect -c "set timeout -1;
spawn ssh-copy-id -i /root/.ssh/id_rsa $master_ip;
expect {
*password:* {send -- $PD\r;
expect {
*denied* {exit 2;}
eof}
}
*(yes/no)* {send -- yes\r;exp_continue;}
eof {exit 1;}
}
"
expect -c "set timeout -1;
spawn ssh-copy-id -i /root/.ssh/id_rsa $node1_ip;
expect {
*password:* {send -- $PD\r;
expect {
*denied* {exit 2;}
eof}
}
*(yes/no)* {send -- yes\r;exp_continue;}
eof {exit 1;}
}
"
expect -c "set timeout -1;
spawn ssh-copy-id -i /root/.ssh/id_rsa $node2_ip;
expect {
*password:* {send -- $PD\r;
expect {
*denied* {exit 2;}
eof}
}
*(yes/no)* {send -- yes\r;exp_continue;}
eof {exit 1;}
}
"
else
echo "这要是报错我当场直播把电脑吃了"
fi
echo "####免密配置成功####"
配置java、hadoop
在master节点上执行即可,后续分发给其他节点
#!/bin/bash
echo "#########开始配置环境变量#########"
#创建并配置env文件
mkdir /etc/profile.d/my_env.sh
cat >> /etc/profile.d/my_env.sh <<eof
#JAVA_HOME
export JAVA_HOME=/usr/local/jdk1.8.0_241
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/usr/local/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
#解决后面启动集群的权限问题
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
eof
echo "#########配置解压安装包##########"
#安装包默认放在/root/下,脚本也是
JDK_NAME=jdk-8u241-linux-x64.tar.gz
HADOOP_NAME=hadoop-3.3.0.tar
tar -xvf ./$HADOOP_NAME -C /usr/local/
tar -xvf ./$JDK_NAME -C /usr/local/
echo "#########解压安装包完毕##########"
source /etc/profile
echo "############测试环境############"
java -version
hadoop version
配置hadoop文件
在master节点执行一遍即可
#!/bin/bash
echo "#########开始配置hadoop文件#########"
#修改Hadoop-env配置文件
cat >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh <<eof
export JAVA_HOME=$JAVA_HOME
eof
#修改yarm-env配置文件
cat >> $HADOOP_HOME/etc/hadoop/yarn-env.sh <<eof
export JAVA_HOME=$JAVA_HOME
eof
#修改core-site.xml配置文件
cat > $HADOOP_HOME/etc/hadoop/core-site.xml <<eof
<configuration>
<!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<!-- 设置Hadoop本地保存数据路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-3.3.0/data</value>
</property>
</configuration>
eof
#修改hdfs-site.xml配置文件
cat > $HADOOP_HOME/etc/hadoop/hdfs-site.xml <<eof
<configuration>
<!-- 设置hdfs的访问地址 -->
<property>
<name>dfs.namenode.http.address</name>
<value>master:9870</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave2:9868</value>
</property>
</configuration>
eof
#修改yarn-site.xml配置文件
cat > $HADOOP_HOME/etc/hadoop/yarn-site.xml <<eof
<configuration>
<!-- 设置YARN集群主角色运行机器位置 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>slave1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 是否将对容器实施物理内存限制 -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!-- 是否将对容器实施虚拟内存限制。 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 开启日志聚集 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/usr/local/hadoop-3.3.0/history-logs</value>
<!--日志聚合到一个文件夹中 -->
</property>
<!-- 设置yarn历史服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://master:19888/jobhistory/logs</value>
</property>
<!-- 历史日志保存的时间 7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
eof
#修改mapred-site.xml配置文件
cat > $HADOOP_HOME/etc/hadoop/mapred-site.xml <<eof
<configuration>
<!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- MR程序历史服务地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!-- MR程序历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
eof
#修改workers配置文件
cat > $HADOOP_HOME/etc/hadoop/workers <<eof
master
slave1
slave2
eof
echo "#########Hadoop文件配置完毕#########"
配置集群分发
分发完毕会立即格式化集群
#!/bin/bash
echo "#####分发Hadoop#####"
#防止格式化集群的时候权限不够不能创建文件
mkdir $HADOOP_HOME/logs
mkdir $HADOOP_HOME/history-logs
chmod 777 $HADOOP_HOME
scp -r $HADOOP_HOME slave1:/usr/local/ >> /dev/null 2>&1
scp -r $HADOOP_HOME slave2:/usr/local/ >> /dev/null 2>&1
echo "#####分发jdk和环境变量#####"
scp -r $JAVA_HOME slave1:/usr/local/ >> /dev/null 2>&1
scp -r $JAVA_HOME slave2:/usr/local/ >> /dev/null 2>&1
scp /etc/profile.d/my_env.sh slave1:/etc/profile.d/
scp /etc/profile.d/my_env.sh slave2:/etc/profile.d/
echo "#####测试环境变量#####"
ssh slave1 <<eof
source /etc/profile
java -version
hadoop version
ssh slave2
source /etc/profile
java -version
hadoop version
eof
#格式化集群
hdfs namenode -format
如果说集群格式化失败了,要重新格式化,一定要先把hadoop文件下的data、logs、history-logs目录下的文件删除了,如果启动了进程也要把进程给关闭了!!!!!
启动集群
#!/bin/bash
echo "########启动dfs#########"
start-dfs.sh
echo "####启动yarn历史服务器####"
mapred --daemon start historyserver
ssh slave1 <<eof
start-yarn.sh
jps
eof
echo "######查看启动的进程######"
jps
关闭集群
#!/bin/bash
echo "########关闭dfs#########"
stop-dfs.sh
echo "####关闭yarn历史服务器####"
mapred --daemon stop historyserver
ssh slave1 <<eof
stop-yarn.sh
jps
eof
echo "######查看启动的进程######"
jps
最后如果脚本有什么问题,请务必来喷我,,,,我好修改~~
标签:脚本,部署,ip,Hadoop,echo,etc,ssh,HOME,hadoop From: https://www.cnblogs.com/hoyeong/p/16744350.html