集群设置
- 设置虚拟机主机IP映射
vim /etc/hosts
cd $HADOOP_HOME/etc/hadoop
2. 配置workers配置文件,设置datanode节点
vim workers
添加如下内容
hadoop100
hadoop102
hadoop103
- 配置hadoop-env.sh文件
export JAVA_HOME=/Java安装目录
export HADOOP_HOME=/Hadoop安装目录
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs
- 配置core-site.xml文件
设置主节点及通信端口,设置io操作文件缓冲区大小 。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop100:8020</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
- 配置hdfs-site.xml文件
<configuration>
<property>
<name>dfs.datanode.data.dir.perm</name>
<value>700</value>
</property>
<property>
#设置namenode数据存放文件夹
<name>dfs.namenode.name.dir</name>
<value>/data/nn</value>
</property>
<property>
#设置允许加入集群的主机
<name>dfs.namenode.hosts</name>
<value>hadoop100,hadoop102,hadoop103</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
<property>
#设置datanode数据存放文件夹
<name>dfs.datanode.data.dir</name>
<value>/data/dn</value>
</property>
<property>
#设置namenode web网络地址
<name>dfs.namenode.http-address</name>
<value>hadoop100:9870</value>
</property>
<property>
#设置secondarynamenode web网络地址
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:9868</value>
</property>
</configuration>
- 创建文件夹
在namenode节点
mkdir -p /data/nn
mkdir /data/dn
在另外两个datanode节点
mkdir -p /data/dn
向剩下的两个节点分发文件(需提前编写集群分发脚本xsync)
xsync $HADOOP_NAME/etc/hadoop
- 格式化namenode
如果不是第一次格式化需要先删除之前格式化创建的data和logs文件夹。rm -rf $HADOOP_HOME/logs
hadoop namenode -format
可能出现的问题:打开http://hadoop100:9870,查看文件系统页面报错或配置好YARN并运行但jps没有出现NodeManager和ResourceManager,且本机上YARN网页打不开。
原因:官方文档
Hadoop3目前只支持Java8。
解决方法:重新在虚拟机上安装JDK,更改环境变量以及Hadoop中的配置文件hadoop-env.sh,mapred-env.sh,yarn-env.sh。
附录
集群分发脚本
/bin下创建文件xsync
vim xsync
#!/bin/bash
#1.判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2.遍历集群所有机器
for host in hadoop100 hadoop102 hadoop103
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
修改脚本权限
chmod +x xsync