Hadoop完全分布式集群搭建
0 准备工作
- 首先需要准备三台虚拟机:CentOS7下载安装
- 三台虚拟机都配置了静态IP:CentOS7 静态IP配置
- 三台虚拟机都关闭了防火墙,且设置了开机不自启:CentOS7 防火墙操作
- 三台虚拟机都配置了IP-主机名映射:CentOS7 配置IP-主机名映射
- 三台虚拟机都配置了ssh免密登录:配置SSH免密登录
- 三台虚拟机都安装了JAVA:CentOS7 Java安装
1 下载Hadoop
选择需要的版本下载
建议:最好下载hadoop-3.2.1.tar.gz这种命名格式的包。
Hadoop下载链接:https://archive.apache.org/dist/hadoop/common/
将下载的tar.gz包并自行用xftp上传至linux系统
2 安装Hadoop
解压Hadoop包
tar -zxvf hadoop-3.2.3.tar.gz -C /opt/
如果感到包名太长,可以修改
mv /opt/hadoop-3.2.3 /opt/hadoop
配置Hadoop环境变量并分发给其他节
vim /etc/profile
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
将配置文件分发给其他节点
xsync.sh /etc/profile
使配置文件生效,在所有主机上都要执行。
source /etc/profile
验证Hadoop是否安装成功。
hadoop version
3 配置Hadoop
配置hadoop-env.sh
vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/opt/jdk
配置core-site.xml,更多配置信息,请参考core-site.xml。
vim $HADOOP_HOME/etc/hadoop/core-site.xml
<configuration>
<!-- 配置Hadoop的默认文件系统为hdfs 9820为hdfs内部通信端口-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9820</value>
</property>
<!-- 配置保存临时文件目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop</value>
</property>
</configuration>
配置hdfs-site.xml,更多参数配置,请参考hdfs-site.xml。
vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
<!-- 配置NameNode所在主机和其web端口 -->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop1:9870</value>
</property>
<!-- 配置Secondary NameNode所在主机和其web端口 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop2:9868</value>
</property>
</configuration>
配置mapred-site.xml,更多配置信息,请参考mapred-site.xml。
vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
<configuration>
<!-- 设置MapReduce的运行平台为yarn -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
配置yarn-site.xml,更多配置信息,请参考yarn-site.xml。
vim $HADOOP_HOME/etc/hadoop/yarn-site.xml
<!-- 配置yarn-site.xml -->
<configuration>
<!-- 配置yarn的ResourceManager所在节点 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop3</value>
</property>
<!-- 配置NodeManager启动时加载Shuffle服务 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 这里的value值要配置你自己机器使用hadoop classpath命令得到的值 -->
<property>
<name>yarn.application.classpath</name>
<value>/opt/hadoop/etc/hadoop:/opt/hadoop/share/hadoop/common/lib/*:/opt/hadoop/share/hadoop/common/*:/opt/hadoop/share/hadoop/hdfs:/opt/hadoop/share/hadoop/hdfs/lib/*:/opt/hadoop/share/hadoop/hdfs/*:/opt/hadoop/share/hadoop/mapreduce/lib/*:/opt/hadoop/share/hadoop/mapreduce/*:/opt/hadoop/share/hadoop/yarn:/opt/hadoop/share/hadoop/yarn/lib/*:/opt/hadoop/share/hadoop/yarn/*</value>
</property>
</configuration>
修改workers文件,删除原有的localhost,增加从节点地址(若配置了hosts,可直接使用主机名,亦可用IP地址)。
vim /opt/hadoop/etc/hadoop/workers
hadoop1
hadoop2
hadoop3
4 分发Hadoop
将Hadoop分发到其他节点
scp -r /opt/hadoop root@hadoop2:/opt/
scp -r /opt/hadoop root@hadoop3:/opt/
将配置文件/etc/profile分发到其他节点,并重新加载加载
scp -r /etc/profile root@hadoop2:/etc/profile
scp -r /etc/profile root@hadoop3:/etc/profile
进入hadoop2和hadoop3再运行如下命令
source /etc/profile
5 启动集群
初次启动集群前需对NameNode进行格式化处理
hdfs namenode -format
还需要配置启动脚本,添加HDFS和Yarn权限,脚本在Hadoop安装目录的sbin目录下
vim start-dfs.sh
vim stop-dfs.sh
#添加HDFS权限,在第二行空白位置添加HDFS权限
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
vim start-yarn.sh
vim stop-yarn.sh
#添加Yarn权限,在第二行空白位置添加Yarn权限
YARN_RESOURCEMANAGER_USER=root
HDFS_DATANODE_SECURE_USER=yarn
YARN_NODEMANAGER_USER=root
将启停脚本分发到其他节点
xsync.sh start-dfs.sh
xsync.sh stop-dfs.sh
xsync.sh start-yarn.sh
xsync.sh stop-yarn.sh
启动/关闭HDFS和YARN
注意:可以用命令启动,但是NomeNode只有在其所在节点启动才会开启;ResourceManage也只有在其所在节点启动才会开启。
# 在hadoop1上运行
start-dfs.sh
# 在hadoop3上运行
start-yarn.sh
stop-dfs.sh
stop-yarn.sh
为了方便启动,编写启停脚本:
# 将脚本放置于bin目录下用户可以全局使用
vim /bin/start-hadoop.sh
#!/bin/bash
echo ==================== 启动hadoop集群 ====================
echo -------------------- 启动hdfs --------------------
ssh hadoop1 /opt/hadoop/sbin/start-dfs.sh
echo -------------------- 启动yarn --------------------
ssh hadoop3 /opt/hadoop/sbin/start-yarn.sh
# 将脚本放置于bin目录下用户可以全局使用
vim /bin/stop-hadoop.sh
#!/bin/bash
echo ==================== 关闭hadoop集群 ====================
echo -------------------- 关闭hdfs --------------------
ssh hadoop1 /opt/hadoop/sbin/stop-dfs.sh
echo -------------------- 关闭yarn --------------------
ssh hadoop3 /opt/hadoop/sbin/stop-yarn.sh
# 还要给脚本执行权限
chmod +x /bin/start-hadoop.sh
chmod +x /bin/stop-hadoop.sh
查看集群启动情况
可以在每个节点上使用jps命令查看
[root@hadoop1 ~]# jps
[root@hadoop2 ~]# jps
[root@hadoop3~]# jps
也可以编写脚本一次性查看
vim /bin/jps-hadoop.sh
#!/bin/bash
for host in hadoop1 hadoop2 hadoop3
do
echo ==================== $host ====================
ssh $host $JAVA_HOME/bin/jps
done
chmod +x /bin/jps-hadoop.sh
6 Web访问
注意:访问的机器上需要配置IP-主机名的映射,一般就是你的windows物理机上,不然就只能使用IP地址访问,而不能使用主机名
访问NameNode:
http://hadoop1:9870/
访问Secondary NameNode:
http://hadoop2:9868/
访问YARN:
http://hadoop3:8088/
7 可以使用示例来查看Hadoop是否能正常运行
创建输入文件
vim input.txt
WordCount
WordCount
WordCount
在HDFS上创建WorldCount目录,与其输入目录
hdfs dfs -mkdir -p /WordCount/input
上传输入文件
hdfs dfs -put input.txt /WordCount/input
进入自己的示例目录
cd $HADOOP_HOME/share/hadoop/mapreduce/
运行WorldCount示例,要注意使用自己的示例名
hadoop jar hadoop-mapreduce-examples-3.3.1.jar wordcount /WordCount/input /WordCount/output