在Linux中进行hadoop集群搭建(完全分布式)

本文默认安装好jdk

# 查看jdk版本

命令:java -version

若结果显示java的版本,则说明jdk配置成功。

 第一步:关闭防火墙

为了可以让本地的机器可以通过Web网页访问集群资源,为了防止在运行集群的时候出现集群不可访问的状况,需要关闭防火墙。

命令:systemctl stop firewalld

# 开机时禁用防火墙

命令:systemctl disable firewalld

第二步:各自修改主机名,配置IP地址映射。

查看主机名命令:hostname

修改主机名命令:hostnamectl set-hostname docker

在/etc/hosts文件中加入下面的代码:

x.x.x.x     master
y.y.y.y     slave1
z.z.z.z     slave2

第三步:配置免密操作

# 在~目录下执行,生成密钥

3.1 master节点

## 1.master节点配置免密
[root@docker ~]# /etc/init.d/sshd start
[root@docker ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
fc:39:e8:f3:57:ee:40:c9:99:8c:95:16:a1:af:5f:69 root@master
The key's randomart image is:
+--[ RSA 2048]----+
|            o.   |
|           . o   |
|          . +    |
|       .   B +   |
|        S . O    |
|         o +  .. |
|        . = .oE  |
|       ..  o.+.  |
|        .o.....  |
+-----------------+
## 2.将/root/.ssh下的id_rsa.pub添加到authorized_keys
[root@docker ~]## cd /root/.ssh
[root@docker ~]## ls
authorized_keys  config  id_rsa  id_rsa.pub
[root@docker ~]# cat id_rsa.pub > authorized_keys
[root@docker ~]# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwOpTpijrGlJTnlFEBjIRq9m24KIQ9oc50javrRpWBqQxhUrjIuVQTaOqiW6Dpgo8zDVNRratkB+HnlNQ8q3L0kE+IvlZINrCijZAGksZJpgbyuhqHKdf8Tmdco90FhAENQc54pcCvpDCD4dukSuICN3533rXIBxJU7omHnTQMORo+AMyGDTWW7pNgNDQoC7iZsjE+GcpF9Aq2+joQqYwOOrTDmQ2HI6TFomnM02PERlwZkbM/5ELZsb616JPu9QMNuv8BDHgRF87PtzZEI1vBEDeNfBAc3/J5vuirlqqxgS+zk5DFiWD0jcstJG1hTX5qRCXmvEyHMfE2kEtgkAXYQ== root@master

3.2 slave1节点

[root@slave1 ~]# /etc/init.d/sshd start
[root@slave1 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
a3:6c:f7:44:82:e8:a3:3f:49:49:01:ca:6e:81:5c:c6 root@slave1
The key's randomart image is:
+--[ RSA 2048]----+
|  o+             |
|+.oE.            |
|o+   .           |
|. . .. .         |
| o .... S .      |
|.  .o. . +       |
|   .o.+ . .      |
|   .oo . o       |
|  ....    .      |
+-----------------+
[root@slave1 ~]# cd /root/.ssh
[root@slave1 ~]# cat id_rsa.pub > authorized_keys
[root@slave1 ~]# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuT0X48XmXIzJ3toiSd0tmWI1ABBgbBiILUgfTqZVdDlBGMq/bywoyJcp80cUI/k2DL4aMWHTypc776/1bMZ3/dmYnFdVWRJ2PzxJ6H2h32QXXXqAuCzVks9BU7Q58guEGoiMeWHHyIffyrcIoiS7rD0tuqgoQnFvQPQBWLVrbxyi1BxBOLeF0jsPdNmc5e4Y8ZaOjJDBvBUmSaJ2zRE6/fxQk58Xe01e4JnnwovDdL+rZB5oue6rvUwXoEiZlGkKkmr2b7xw6UCi/mnYS+wYa2LolhuMTilalkRYEtRYXZWz3VrjdlDGmuCeccUoP+r44f7yk2BTv1OIyYPpDS0HSQ== root@slave1

3.3 slave2节点

[root@slave1 ~]#  /etc/init.d/sshd start
[root@slave1 ~]#  ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
86:c1:25:7f:2e:64:43:cd:36:57:a2:07:6a:cc:17:6d root@slave2
The key's randomart image is:
+--[ RSA 2048]----+
|      . ooo....  |
|     . B .=+E.   |
|      o X.++.    |
|       * = .     |
|      . S .      |
|       . .       |
|                 |
|                 |
|                 |
+-----------------+
[root@slave1 ~]#  cd /root/.ssh
[root@slave1 ~]#  cat id_rsa.pub > authorized_keys
[root@slave1 ~]#  cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAowCUkXu8rkzpSIi/E53Zv3qYeIItuIO72MS+m/fMsHO7edKC8XjzB4DB406iPF6q2SobaAr8x++txLSq0bnTS4MHhY0GqUICuv7R0F5js1G5jV4cSMpdHfsIb9skz3LMjTXplxXR8md7TCmeS7Kmuf9FNmCXQIuWAdnPuUVxk12b4hFeaNyCi/yktuBy5Tqyi+b2Xp9cGXxz/dl32aHxBf9pkoEUJcej1o/g+hgAZ7c+9mv9aiLhbSI6ZPUGT1F3WBEq9tCx1rkbc5nQfjTCC3/K5btLvnkaaSUShEB4tUleh06LeuuTmCxNZ7vNBoVAb1cjyGvqdJZ6hHqHHddnQQ== root@slave2

 将三个authorized_keys合并,合并之后覆盖三台虚拟机中的authorized_keys

第四步:安装Hadoop(三台服务器都一样)

4.1:下载hadoop-3.1.3。

登录网址:https://archive.apache.org/dist/hadoop/common/

下载hadoop-3.1.3.tar.gz。也可以使用命令下载。

命令:cd /usr/local/src/software

wget https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz:

4.2:上传、解压tar.gz压缩包。

命令:cd /usr/local/src/software

tar -zxvf hadoop-3.1.3.tar.gz -C /usr/local/src/server

4.3:配置环境变量。

在/etc/profile文件添加下面的代码:

export HADOOP_HOME=/home/hadoop/hadoop-3.1.3
 
export PATH=$PATH:$HADOOP_HOME/bin
 
export PATH=$PATH:$HADOOP_HOME/sbin

# 使环境变量生效

命令:source /etc/profile

# 测试是否配置成功

命令:hadoop version

如果结果显示“Hadoop 3.1.3”,则说明hadoop配置成功。

第五步:集群配置

配置文件在/home/hadoop/hadoop-3.1.3/etc/hadoop中。

1、对master中的Hadoop自定义配置文件进行配置。

1)创建目录

命令:mkdir /home/hadoop/tmp

        mkdir /home/hadoop/dfs

2)配置hadoop-env.sh。

在hadoop-env.sh文件中加入下面的代码:

export JAVA_HOME=/home/jdk/jdk1.8.0_202
# 在文件末尾加入下面的代码,设置用户以执行对应角色shell命令
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

在core-site.xml文件中加入下面的代码:

<configuration>
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://master:9000</value>
</property>
<!-- 配置Hadoop存储数据目录,默认/tmp/hadoop-${user.name} -->
<property>
   <name>hadoop.tmp.dir</name>
 <value>file:/home/hadoop/tmp</value>
</property>
<!--  缓冲区大小,实际工作中根据服务器性能动态调整 -->
<property>
   <name>io.file.buffer.size</name>
   <value>131072</value>
</property>
<!--  开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟 -->
<property>
   <name>fs.trash.interval</name>
   <value>10080</value>
</property>
</configuration>

4)配置hdfs-site.xml

在hdfs-site.xml文件中加入下面的代码:

<configuration>
<!-- namenode存储hdfs名字的空间的元数据文件目录 -->
<property>
    <name>dfs.namenode.name.dir</name>                     
    <value>file:/home/hadoop/dfs/name</value>
 </property>
 <!-- datanode上的一个数据块的物理的存储位置文件 -->
 <property>
     <name>dfs.datanode.data.dir</name>
     <value>file:/home/hadoop/dfs/data</value>
 </property>
 <!-- 指定HDFS保存数据副本的数量 -->
 <property>
     <name>dfs.replication</name>
     <value>3</value>
 </property>
 <!-- 设置一个block的大小:128M-->
 <property>
     <name>dfs.blocksize</name>
     <value>134217728</value>
 </property>
 <!-- 定义namenode界面的访问地址 -->
 <property>
     <name>dfs.http.address</name>
     <value>master:50070</value>
 </property>
 <!-- 设置HDFS的文件权限-->
 <property>
     <name>dfs.permissions</name>
     <value>false</value>
 </property>
 <!-- 指定DataNode的节点配置文件 -->
 <property>
     <name>dfs.hosts</name>
     <value>/home/hadoop/hadoop-3.1.3/etc/hadoop/workers</value>
 </property>
 </configuration>

5)配置workers。

在workers文件中加入下面的代码:

master
slave1
slave2

6)mapred-site.xml配置

在mapred-site.xml文件中加入下面的代码:

<configuration>
 <!-- 指定 MapReduce 程序运行在 Yarn 上,表示MapReduce使用yarn框架 -->
 <property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
 </property>
 <!-- 开启MapReduce小任务模式 -->
 <property>
     <name>mapreduce.job.ubertask.enable</name>
     <value>true</value>
 </property>
 <!-- 设置历史任务的主机和端口 -->
 <property>
     <name>mapreduce.jobhistory.address</name>
     <value>master:10020</value>
 </property>
 <!-- 设置网页访问历史任务的主机和端口 -->
 <property>
     <name>mapreduce.jobhistory.webapp.address</name>
     <value>master:19888</value>
 </property>
 </configuration>

7)配置yarn-site.xml

在yarn-site.xml文件中加入下面的代码:

<configuration>
 <!-- Site specific YARN configuration properties -->
 <!-- NodeManager获取数据的方式shuffle -->
 <property>
     <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
 </property>
 <!-- yarn的web访问地址 -->
 <property>
     <description>
         The http address of the RM web application.
         If only a host is provided as the value,the webapp will be served on a random port.
     </description>
     <name>yarn.resourcemanager.webapp.address</name>
     <value>${yarn.resourcemanager.hostname}:8088</value>
 </property>
 <property>
     <description>
         The https address of the RM web application.
         If only a host is provided as the value,the webapp will be served on a random port.
     </description>
     <name>yarn.resourcemanager.webapp.https.address</name>
     <value>${yarn.resourcemanager.hostname}:8090</value>
 </property>
 <!-- 开启日志聚合功能,方便我们查看任务执行完成之后的日志记录 -->
 <property>
     <name>yarn.log-aggregation-enable</name>
     <value>true</value>
 </property>
 <!-- 设置聚合日志在hdfs上的保存时间 -->
 <property>
     <name>yarn.log-aggregation.retain-seconds</name>
     <value>604800</value>
 </property>
 </configuration>

2、对slave中的Hadoop自定义配置文件进行配置。

 1)创建目录

命令:mkdir /home/hadoop/tmp

        mkdir /home/hadoop/dfs

2)配置hadoop-env.sh。

在hadoop-env.sh文件中加入下面的代码:

export JAVA_HOME=/home/jdk/jdk1.8.0_202
# 在文件末尾加入下面的代码,设置用户以执行对应角色shell命令
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

在core-site.xml文件中加入下面的代码:

<configuration>
 <property>
     <name>fs.defaultFS</name>
     <value>hdfs://slave1:9000</value>
 </property>
 <!-- 配置Hadoop存储数据目录,默认/tmp/hadoop-${user.name} -->
 <property>
     <name>hadoop.tmp.dir</name>
     <value>file:/home/hadoop/tmp</value>
 </property>
 <!--  缓冲区大小,实际工作中根据服务器性能动态调整 -->
 <property>
     <name>io.file.buffer.size</name>
     <value>131072</value>
 </property>
 <!--  开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟 -->
 <property>
     <name>fs.trash.interval</name>
     <value>10080</value>
 </property>
 </configuration>

4)配置hdfs-site.xml

在hdfs-site.xml文件中加入下面的代码:

<configuration>
 <!-- namenode存储hdfs名字的空间的元数据文件目录 -->
 <property>
     <name>dfs.namenode.name.dir</name>           
     <value>file:/home/hadoop/dfs/name</value>
 </property>
 <!-- datanode上的一个数据块的物理的存储位置文件 -->
 <property>
     <name>dfs.datanode.data.dir</name>         
     <value>file:/home/hadoop/dfs/data</value>
 </property>
 <!-- 指定HDFS保存数据副本的数量 -->
 <property>
     <name>dfs.replication</name>
     <value>3</value>
 </property>
 <!-- 设置一个block的大小:128M-->
 <property>
     <name>dfs.blocksize</name>
     <value>134217728</value>
 </property>
 <!-- 设置HDFS的文件权限-->
 <property>
     <name>dfs.permissions</name>
     <value>false</value>
 </property>
 <!-- 指定DataNode的节点配置文件 -->
 <property>
     <name>dfs.hosts</name>
     <value>/home/hadoop/hadoop-3.1.3/etc/hadoop/workers</value>
 </property>
 </configuration>

5)配置workers。

在workers文件中加入下面的代码:

master
slave1
slave2

6)mapred-site.xml配置

在mapred-site.xml文件中加入下面的代码:

<configuration>
 <!-- 指定MapReduce程序运行在Yarn上,表示MapReduce使用yarn框架 -->
 <property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
 </property>
 <!-- 开启MapReduce小任务模式 -->
 <property>
     <name>mapreduce.job.ubertask.enable</name>
     <value>true</value>
 </property>
 <!-- 设置历史任务的主机和端口 -->
 <property>
     <name>mapreduce.jobhistory.address</name>
     <value>slave1:10020</value>
 </property>
 <!-- 设置网页访问历史任务的主机和端口 -->
 <property>
     <name>mapreduce.jobhistory.webapp.address</name>
     <value>slave1:19888</value>
 </property>
 </configuration>

7)配置yarn-site.xml

在yarn-site.xml文件中加入下面的代码:

<configuration>
 <!-- Site specific YARN configuration properties -->
 <!-- NodeManager获取数据的方式shuffle -->
 <property>
     <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
 </property>
 <!-- 指定YARN的ResourceManager的地址 -->
 <property>
     <name>yarn.resourcemanager.hostname</name>
     <value>slave1</value>
 </property>
 <!-- yarn的web访问地址 -->
 <property>
    <description>
        The http address of the RM web application.
        If only a host is provided as the value,the webapp will be served on a random port.
     </description>
     <name>yarn.resourcemanager.webapp.address</name>
     <value>${yarn.resourcemanager.hostname}:8088</value>
 </property>
 <property>
     <description>
         The https address of the RM web application.
         If only a host is provided as the value,the webapp will be served on a random port.
     </description>
     <name>yarn.resourcemanager.webapp.https.address</name>
     <value>${yarn.resourcemanager.hostname}:8090</value>
 </property>
 <!-- 开启日志聚合功能,方便我们查看任务执行完成之后的日志记录 -->
 <property>
     <name>yarn.log-aggregation-enable</name>
     <value>true</value>
 </property>
 <!-- 设置聚合日志在hdfs上的保存时间 -->
 <property>
     <name>yarn.log-aggregation.retain-seconds</name>
     <value>604800</value>
 </property>
 </configuration>

3、对slave2中的Hadoop自定义配置文件进行配置。

  1)创建目录

命令:mkdir /home/hadoop/tmp

        mkdir /home/hadoop/dfs

2)配置hadoop-env.sh。

在hadoop-env.sh文件中加入下面的代码:

export JAVA_HOME=/home/jdk/jdk1.8.0_202
# 在文件末尾加入下面的代码,设置用户以执行对应角色shell命令
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

在core-site.xml文件中加入下面的代码:

<configuration>
 <property>
     <name>fs.defaultFS</name>
     <value>hdfs://slave2:9000</value>
 </property>
 <!-- 配置Hadoop存储数据目录,默认/tmp/hadoop-${user.name} -->
 <property>
     <name>hadoop.tmp.dir</name>
     <value>file:/home/hadoop/tmp</value>
 </property>
 <!--  缓冲区大小,实际工作中根据服务器性能动态调整 -->
 <property>
     <name>io.file.buffer.size</name>
     <value>131072</value>
 </property>
 <!--  开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟 -->
 <property>
     <name>fs.trash.interval</name>
     <value>10080</value>
 </property>
 </configuration>

4)配置hdfs-site.xml

在hdfs-site.xml文件中加入下面的代码:

<configuration>
 <!-- namenode存储hdfs名字的空间的元数据文件目录 -->
 <property>
     <name>dfs.namenode.name.dir</name>                   
     <value>file:/home/hadoop/dfs/name</value>
 </property>
 <!-- datanode上的一个数据块的物理的存储位置文件 -->
 <property>
     <name>dfs.datanode.data.dir</name>
     <value>file:/home/hadoop/dfs/data</value>
 </property>
 <!-- 指定HDFS保存数据副本的数量 -->
 <property>
     <name>dfs.replication</name>
     <value>3</value>
 </property>
 <!-- 设置一个block的大小:128M-->
 <property>
     <name>dfs.blocksize</name>
     <value>134217728</value>
 </property>
 <!-- 定义secondarynamenode的通信地址 -->
 <property>
     <name>dfs.namenode.secondary.http-address</name>
     <value>slave2:50071</value>
 </property>
 <!-- 设置HDFS的文件权限-->
 <property>
     <name>dfs.permissions</name>
     <value>false</value>
 </property>
 <!-- 指定DataNode的节点配置文件 -->
 <property>
     <name>dfs.hosts</name>
     <value>/home/hadoop/hadoop-3.1.3/etc/hadoop/workers</value>
 </property>
 </configuration>

5)配置workers。

在workers文件中加入下面的代码:

master
slave1
slave2

6)mapred-site.xml配置

在mapred-site.xml文件中加入下面的代码:

<configuration>
 <!-- 指定 MapReduce 程序运行在 Yarn 上,表示MapReduce使用yarn框架 -->
 <property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
 </property>
 <!-- 开启MapReduce小任务模式 -->
 <property>
     <name>mapreduce.job.ubertask.enable</name>
     <value>true</value>
 </property>
 <!-- 设置历史任务的主机和端口 -->
 <property>
     <name>mapreduce.jobhistory.address</name>
     <value>slave2:10020</value>
 </property>
 <!-- 设置网页访问历史任务的主机和端口 -->
 <property>
     <name>mapreduce.jobhistory.webapp.address</name>
     <value>slave2:19888</value>
 </property>
 </configuration>

7)配置yarn-site.xml

在yarn-site.xml文件中加入下面的代码:

<configuration>
 <!-- Site specific YARN configuration properties -->
 <!-- NodeManager获取数据的方式shuffle -->
 <property>
     <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
 </property>
 <!-- yarn的web访问地址 -->
 <property>
     <description>
         The http address of the RM web application.
         If only a host is provided as the value,the webapp will be served on a random port.
     </description>
     <name>yarn.resourcemanager.webapp.address</name>
     <value>${yarn.resourcemanager.hostname}:8088</value>
 </property>
 <property>
     <description>
         The https address of the RM web application.
         If only a host is provided as the value,the webapp will be served on a random port.
     </description>
     <name>yarn.resourcemanager.webapp.https.address</name>
     <value>${yarn.resourcemanager.hostname}:8090</value>
 </property>
 <!-- 开启日志聚合功能,方便我们查看任务执行完成之后的日志记录 -->
 <property>
     <name>yarn.log-aggregation-enable</name>
     <value>true</value>
 </property>
 <!-- 设置聚合日志在hdfs上的保存时间 -->
 <property>
     <name>yarn.log-aggregation.retain-seconds</name>
     <value>604800</value>
 </property>
 </configuration>

第六步:集群启动

# 注意:如果集群是第一次启动,需要在Namenode所在节点格式化NameNode,非第一次不用执行格式化 Namenode 操作。

命令:hadoop namenode -format

  1. ## 启动hadoop

再 /home/hadoop/hadoop-3.1.3/sbin目录下执行

./start-all.sh

第七步:如何判断hadoop集群启动成功

1.Hadoop集群启用成功在虚拟机Hadoop中使用Jps命令有以下界面出现:

在这里插入图片描述

2.Hadoop可以访问50070界面 

 

猜你喜欢

转载自blog.csdn.net/askuld/article/details/130426464