基于CentOS7的Hadoop3.2.0完全分布式集群部署记录

3台服务器部署结构

hostname hadoopSvr1 hadoopSvr3 hadoopSvr4
IP 10.62.124.41 10.62.124.43 10.62.124.44
HDFS NameNode SecondaryNameNode
HDFS DataNode DataNode DataNode
YARN ResourceManager
YARN NodeManager NodeManager NodeManager
HistoryServer

目录规划

#hadoop临时目录hadoop.tmp.dir
/data/hadoop/tmp

#hadoop的NameNode节点保存元数据的目录dfs.namenode.name.dir
/data/hadoop/hdfs/name

#hadoop的DataNode节点保存数据的目录dfs.datanode.data.dir
/data/hadoop/hdfs/data

一、前提

1、安装Java,具体参考:https://blog.csdn.net/wangkai_123456/article/details/53612806

2、永久修改CentOS服务器hostname主机名,主机名和IP一一对应

vi /etc/hostname
打开文件后,将默认的 主机名 修改为想要的主机名即可(如hadoopSvr3)

3、配置hosts文件【集群的所有节点】

vi /etc/hosts

打开文件后,增加

10.62.124.41 hadoopSvr1
10.62.124.43 hadoopSvr3
10.62.124.44 hadoopSvr4

4、设置SSH无密码登录

Hadoop集群中的各个机器间会相互地通过SSH访问,每次访问都输入密码是不现实的,所以要配置各个机器间的

SSH是无密码登录的。

4.1、 在hadoopSvr1上生成公钥

ssh-keygen -t rsa

一路回车,都设置为默认值,然后再当前用户的Home目录下的.ssh目录中会生成公钥文件(id_rsa.pub)和私钥文件(id_rsa)。

4.2、分发公钥

ssh-copy-id hadoopSvr1
ssh-copy-id hadoopSvr3
ssh-copy-id hadoopSvr4

4.3、设置hadoopSvr3、hadoopSvr4到其他机器的无密钥登录

同样的在hadoopSvr3、hadoopSvr4上生成公钥和私钥后,将公钥分发到三台机器上。

5、关闭防火墙

#永久关闭防火墙

sudo systemctl disable firewalld

#查看防火墙状态

sudo systemctl status firewalld

#打开防火墙

sudo systemctl start firewalld

#关闭防火墙

sudo systemctl stop firewalld

二、在第一台机器上安装hadoop

我们采用先在第一台机器上解压、配置Hadoop,然后再分发到其他两台机器上的方式来安装集群。

1、在hadoopSvr1、hadoopSvr3、hadoopSvr4中配置Hadoop环境变量

vi /etc/profile

打开后,在文档最下方添加如下配置:

export HADOOP_HOME=/usr/local/hadoop-3.2.0
export PATH=$HADOOP_HOME/bin:$PATH
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

修改完后,保存退出,执行如下命令,使更改生效

source /etc/profile

2、配置Hadoop JDK路径,定义集群操作用户,在hadoop-env.sh文件中添加如下内容

export JAVA_HOME=/usr/java/jdk1.8.0_111

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

3、配置core-site.xml

<configuration>
	<property>
		  <name>fs.defaultFS</name>
		  <value>hdfs://hadoopSvr1:8020</value>
	</property>
	<property>
		  <name>hadoop.tmp.dir</name>
		  <value>/data/hadoop/tmp</value>
	</property>
</configuration>

fs.defaultFS为NameNode的地址,hadoop.tmp.dir为hadoop临时目录的地址。

4、配置hdfs-site.xml

<configuration>
   <property>
	     <name>dfs.namenode.secondary.http-address</name>
	     <value>hadoopSvr4:50090</value>
   </property>
   <property>
	     <name>dfs.replication</name>
	     <value>2</value>
   </property>
   <property>
	     <name>dfs.namenode.name.dir</name>
	     <value>file:/data/hadoop/hdfs/name</value>
   </property>
   <property>
	     <name>dfs.datanode.data.dir</name>
	     <value>file:/data/hadoop/hdfs/data</value>
   </property>
</configuration>

dfs.namenode.secondary.http-address是指定secondaryNameNode的http访问地址和端口号,因为在规划中,我们将hadoopSvr4规划为SecondaryNameNode服务器。

5、配置workers

hadoopSvr1
hadoopSvr3
hadoopSvr4

workers文件是指定HDFS上有哪些DataNode节点。

6、配置yarn-site.xml

<configuration>
    <property>
       <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
   </property>
   <property>
      <name>yarn.nodemanager.localizer.address</name>
      <value>0.0.0.0:8140</value>
   </property>
   <property>
       <name>yarn.resourcemanager.hostname</name>
       <value>hadoopSvr3</value>
   </property>
   <property>
       <name>yarn.log-aggregation-enable</name>
       <value>true</value>
   </property>
   <property>
       <name>yarn.log-aggregation.retain-seconds</name>
       <value>106800</value>
   </property>
   <property>
       <name>yarn.log.server.url</name>
       <value>http://hadoopSvr4:19888/jobhistory/logs</value>
   </property>
</configuration>

根据规划yarn.resourcemanager.hostname这个指定resourcemanager服务器指向hadoopSvr3。
yarn.log-aggregation-enable是配置是否启用日志聚集功能。
yarn.log-aggregation.retain-seconds是配置聚集的日志在HDFS上最多保存多长时间。

7、配置mapred-site.xml

<configuration>
   <property>
       <name>mapreduce.framework.name</name>
       <value>yarn</value>
   </property>
   <property>
       <name>mapreduce.jobhistory.address</name>
       <value>hadoopSvr4:10020</value>
   </property>
   <property>
       <name>mapreduce.jobhistory.webapp.address</name>
       <value>hadoopSvr4:19888</value>
   </property>
</configuration>

mapreduce.framework.name设置mapreduce任务运行在yarn上。
mapreduce.jobhistory.address是设置mapreduce的历史服务器安装在hadoopSvr4机器上。
mapreduce.jobhistory.webapp.address是设置历史服务器的web页面地址和端口号。

8、复制Hadoop配置好的包到其他Linux主机

[root@hadoopSvr3 local]# scp -r [email protected]:/usr/local/hadoop-3.2.0 .
[root@hadoopSvr4 local]# scp -r [email protected]:/usr/local/hadoop-3.2.0 .

9、格式化NameNode

在NameNode机器上执行格式化

[root@hadoopSvr1 hadoop-3.2.0]# hdfs namenode -format

注意
如果需要重新格式化NameNode,需要先将原来NameNode和DataNode下的文件全部删除,不然会报错,NameNode和DataNode所在目录是在core-site.xml中hadoop.tmp.dir、dfs.namenode.name.dir、dfs.datanode.data.dir属性配置的。

因为每次格式化,默认是创建一个集群ID,并写入NameNode和DataNode的VERSION文件中(VERSION文件所在目录为hdfs/name/current 和 hdfs/data/current),重新格式化时,默认会生成一个新的集群ID,如果不删除原来的目录,会导致namenode中的VERSION文件中是新的集群ID,而DataNode中是旧的集群ID,不一致时会报错。

三、启动集群

1、启动HDFS

在hadoopSvr1上执行

[root@hadoopSvr1 hadoop]# /usr/local/hadoop-3.2.0/sbin/start-dfs.sh

2、启动YARN

[root@hadoopSvr1 hadoop]# /usr/local/hadoop-3.2.0/sbin/start-yarn.sh

在hadoopSvr3上启动ResourceManager

[root@hadoopSvr3 hadoop-3.2.0]# yarn --daemon start resourcemanager

3、启动日志服务

因为我们规划的是在hadoopSvr4服务器上运行MapReduce日志服务,所以要在hadoopSvr4上启动。

[root@hadoopSvr4 hadoop-3.2.0]# mapred --daemon start historyserver

4、查看HDFS Web页面

http://10.62.124.41:9870/
其中,10.62.124.41为服务器hadoopSvr1的IP地址。

5、查看YARN Web页面

http://10.62.124.43:8088/
其中,10.62.124.43为服务器hadoopSvr3的IP地址。

猜你喜欢

转载自blog.csdn.net/wangkai_123456/article/details/87185339