一、说在前面
今天将三个虚拟机都装上了虚拟机,每一个都装了一遍,很后悔为什么没先装了之后再克隆,然后跟着老师的节奏写了一个分发脚本,为什么不先学分发脚本呢!
二、配置
======================core-site.xml==================== <configuration> <!-- 指定NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:8020</value> </property> <!-- 指定hadoop数据的存储目录 官方配置文件中的配置项是hadoop.tmp.dir,用来指定hadoop数据的存储目录,这次配 置用的hadoop.data.dir是自己定义的变量,因为在hdfs-site.xml中会使用此配置的值来具体指定namenode和datanode存储数据的目录 --> <property> <name>hadoop.data.dir</name> <value>/opt/module/hadoop-3.1.3/data</value> </property> <!-- 下面是兼容性配置,先跳过 --> <!-- 配置改hao(superUer)允许通过代理访问的主机节点--> <property> <name>hadoop.proxyuser,hao.hosts</name> <value>*</value> </property> <!-- 配置该hao(superUser)允许代理的用户所属组 --> <property> <name>hadoop.proxyuser.hao.groups</name> <value>*</value> </property> <!-- 配置该hao(superUser)允许代理的用户 --> <property> <name>hadoop.proxyuser.hao.users</name> <value>*</value> </property> </configuration>
=======================hdfs-site.xml==================== <!-- 指定副本数 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 指定NameNode数据的存储目录 --> <property> <name>dfs.namenode.name.dir</name> <value>file://${hadoop.data.dir}/name</value> </property> <!-- 指定DataNode数据的存储目录 --> <property> <name>dfs.datanode.data.dir</name> <value>file://${hadoop.data.dir}/data</value> </property> <!-- 指定SecondaryNameNode数据的存储目录 --> <property> <name>dfs.namenode.checkpoint.dir</name> <value>file://${hadoop.data.dir}/namesecondary</value> </property> <!-- 兼容配置,先跳过 --> <property> <name>dfs.client.datanode-restart.timeout</name> <value>30s</value> </property> <!-- nn web 端访问地址 --> <property> <name>dfs.namenode.http-address</name> <value>hadoop102:9870</value> </property> <!-- 2nn web端访问地址 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:9868</value> </property>
=====================yarn-site.xml====================== <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value> </property> <!-- 环境变量的继承 --> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> <!-- 取消虚拟内存的限制 <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> -->
=====================MapReduce-site.xml================= <!-- 指定MapReduce程序运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name>q <value>hadoop102:10020</value> </property> <!-- 历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop102:19888</value> </property>
三、分发脚本
=======================xsync脚本(分发更新)======================
#!/bin/bash
#1.判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Argument
exit;
fi
#2.遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==============$host==============
#3.遍历所有目录,挨个发送
for file in $@
do
#4.判断文件是否存在
if [ -e $file ]
then
#5.获取父目录
pdir=$(cd -P $(dirname $file); pwd )
#6.获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done