Hadoop完全分布式集群搭建

0 准备工作

  1. 首先需要准备三台虚拟机:CentOS7下载安装
  2. 三台虚拟机都配置了静态IP:CentOS7 静态IP配置
  3. 三台虚拟机都关闭了防火墙,且设置了开机不自启:CentOS7 防火墙操作
  4. 三台虚拟机都配置了IP-主机名映射:CentOS7 配置IP-主机名映射
  5. 三台虚拟机都配置了ssh免密登录:配置SSH免密登录
  6. 三台虚拟机都安装了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
posted @ 2023-04-06 15:07  来个煎饼  阅读(136)  评论(0编辑  收藏  举报