(准备三台服务器hadoop128、hadoop129、hadoop130)
使用xsync将hadoop和环境变量文件分发到其他服务器上

xsync的使用:

但是我们每次使用都需要输入密码,可以使用ssh免密,也可以使用sshpass规避输入密码

ssh免密:

进入家目录,可能是/home/用户名/中,也可能在/root中

ls -al

hadoop 集群 单节点重启 集群hadoop启动_hdfs

cd .ssh

1.执行如下命令:

ssh-keygen -t rsa

一直回车即可
2.

ssh-copy-id hadoop128

(这里是你另外服务器的域名,我这里是在hosts文件中做了映射)

输入一次密码即可实现免密通信

如果服务器重置过,需要使用ssh-keygen -R 你要访问的IP地址 然后再进行1、2步骤就可以了
为了方便可以每台都进行如此操作

注:这个配置只适用于一个用户,切换用户就需要再次配置,切换回来就可以继续使用

安装

首先在128上的HDFS安装NameNode、DataNode,129上安装DataNode,130上安装SecondaryNameNode、DataNode;128的YARN上安装NodeManager,129上安装ResourceManager、NodeManager,130上安装NodeManager。

因为耗内存的原因,NameNode和SecondaryNameNode不要安装在同一台服务器上,ResourceManager也很耗内存,不要和NameNode、SecondaryNameNode配置在同一台服务器下。

Hadoop配置我们就需要用到默认的配置文件,初始化默认的配置文件是空的,文件我已经上传了,下载记得关注我,如果需要积分了可以私聊我,我发你:

Hadoop默认配置文件在hadoop目录下的/etc/hadoop/中,核心的配置文件(经常使用)是
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
按照集群规划修改配置文件
core-site.xml:

<configuration>
  <!--指定NameNode的地址-->
  <property>
<name>fs.defaultFS</name>
<!--主机域名+端口,我做了映射所以叫hadoop128-->
    <value>hdfs://hadoop128:8020</value>
  </property>
  <!--指定hadoop数据的存储目录-->
  <property>
<name>hadoop.tmp.dir</name>
<!--这个目录如果不存在,会自动创建-->
    <value>/opt/module/hadoop-3.1.3/data</value>
  </property>
  <!--配置HDFS网页登录使用的静态用户为root-->
  <property>
<name>hadoop.http.staticuser.user</name>
<!--这里的用户是你要打开hadoop的用户,我用的是root-->
    <value>root</value>
  </property>
</configuration>

hdfs-site.xml:

<configuration>
  <!--nn web端访问地址-->
  <property>
    <name>dfs.namenode.http-address</name>
    <value>hadoop128:9870</value>
  </property>
  <!--2nn web端访问地址-->
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop130:9868</value>
  </property>
</configuration>

yarn.site.xml

<configuration>
  <!--指定MR走shuffle-->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <!--指定ResourceManager的地址-->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop129</value>
  </property> 
  <!--环境变量的继承-->
    <property>
    <name>yarn.nodemanager.env-whitelist</name>
    <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
  </property>
</configuration>

mapreduce-site.xml

<configuration>
  <!--指定MapReduce程序运行在yarn上-->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

将配置文件分发到其他服务器上,进入hadoop目录下的/etc,执行

xsync hadoop/

Hadoop集群的文件配置以及完成,接下来配置群起:
配置workers:

vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

修改内容为:(三台服务器的主机名称,不允许前后有空格)

hadoop128
hadoop129
hadoop130

保存退出
分发

[root@hadoop128 etc]# xsync hadoop/workers

启动

第一次启动的时候需要在hadoop128节点格式化NameNode

(注:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到以往数据,如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所以机器的data和logs目录,然后再进行格式化)

执行:

[root@hadoop128 hadoop-3.1.3]# hdfs namenode -format

如果没有报错表示格式化完成,完成后会在hadoop的目录下多出一个data文件夹,一个logs文件夹
接下来启动hdfs:

[root@hadoop128 hadoop-3.1.3]# sbin/start-dfs.sh

如果是root用户会出现如下错误:

hadoop 集群 单节点重启 集群hadoop启动_服务器_02


别慌,这是权限的问题,修改启动文件start-dfs.sh、stop-dfs.sh:

[root@hadoop128 sbin]# vim start-dfs.sh
[root@hadoop128 sbin]# vim stop-dfs.sh

添加如下内容:

#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

然后还要修改start-yarn.sh、stop-yarn.sh:

[root@hadoop128 sbin]# vim start-yarn.sh
[root@hadoop128 sbin]# vim stop-yarn.sh

添加如下内容:

#!/usr/bin/env bash 
YARN_RESOURCEMANAGER_USER=root 
HADOOP_SECURE_DN_USER=yarn 
YARN_NODEMANAGER_USER=root

添加完毕,分发

[root@hadoop128 hadoop-3.1.3]# xsync sbin/

再启动

[root@hadoop128 hadoop-3.1.3]# sbin/start-dfs.sh

成功:

hadoop 集群 单节点重启 集群hadoop启动_hadoop 集群 单节点重启_03


使用jps查看启动的项

hadoop 集群 单节点重启 集群hadoop启动_hdfs_04


发现128上启动了DataNode和NameNode,和我们的集群规划一样,在看129和130:

hadoop 集群 单节点重启 集群hadoop启动_hadoop_05


hadoop 集群 单节点重启 集群hadoop启动_hadoop_06


满足我们的集群规划要求

然后可以访问hdfs的可视化界面:

主机名+端口(pc上的hosts需要做映射才可以这样写,不然就老老实实的用ip+端口访问)

Hadoop128:9870

hadoop 集群 单节点重启 集群hadoop启动_服务器_07


进入该界面,可以看到hdfs中的数据,当前并没有存数据,所以里面显示数据0。

hadoop 集群 单节点重启 集群hadoop启动_hdfs_08


Hdfs启动成功后启动ResourceManager:

按照集群规划,ResourceManager是在hadoop129上的,所以需要到129上启动:

hadoop 集群 单节点重启 集群hadoop启动_hadoop 集群 单节点重启_09


Jps查看三台服务器情况:

(我们只关注我们集群配置规划的东西是否按规格启动,其余的项是其他在运行的服务,请自行忽略)

hadoop 集群 单节点重启 集群hadoop启动_hadoop_10


hadoop 集群 单节点重启 集群hadoop启动_服务器_11


hadoop 集群 单节点重启 集群hadoop启动_hadoop_12


由此可以看出,三台服务器已经按照我们的集群规划启动了

Yarn也有可视化界面,可以查看运行情况:

Hadoop129:8088

hadoop 集群 单节点重启 集群hadoop启动_hdfs_13

测试

执行创建文件夹:

[root@hadoop128 hadoop-3.1.3]# hadoop fs -mkdir /wcinput

可以在hdfs可视化界面查看到信息:

hadoop 集群 单节点重启 集群hadoop启动_hadoop_14


接下来准备一个txt文件上传,我这里是上传了hadoop目录下我的一个文件:

[root@hadoop128 hadoop-3.1.3]# hadoop fs -put wcinput/word.txt /wcinput

这时候再去页面上点击wcinput进入目录,可以看到

hadoop 集群 单节点重启 集群hadoop启动_hadoop_15


点击word,再点击图中位置可以查看到文件内容:

hadoop 集群 单节点重启 集群hadoop启动_服务器_16


也可以下载,如果你是用ip+端口访问的可能会看不到数据,最好去hosts文件中做一个你服务器的映射便可以查看到,比如我这里是映射成hadoop128便可以查看到文件内容了。

接下来测试上传大文件,我这里就上传hadoop的安装压缩包:

[root@hadoop129 hadoop-3.1.3]# hadoop fs -put /opt/software/hadoop-3.1.3.tar.gz /wcinput

再次查看页面:

hadoop 集群 单节点重启 集群hadoop启动_hadoop 集群 单节点重启_17


成功。

可视化查看结束,那么数据真正是存在什么地方的呢?

在hadoop目录下有个data文件夹内

[root@hadoop128 hadoop-3.1.3]# cd data/dfs/data/current/BP-740077404-192.168.59.128-1628733360270/current/finalized/subdir0/subdir0/

可以看到我们上传的文件:

hadoop 集群 单节点重启 集群hadoop启动_服务器_18


我们查看一下第一个:

hadoop 集群 单节点重启 集群hadoop启动_服务器_19


发现他就是我们之前上传的word.txt

那我们上传的压缩包呢?

这时候就要用到拼接了。

hadoop 集群 单节点重启 集群hadoop启动_hadoop 集群 单节点重启_20


可以理解我将拆解开的文件重新拼接成一个压缩包,然后解压,完成后我们查看,发现他解压出来的结果就是hadoop的目录文件,与预期的一样:

hadoop 集群 单节点重启 集群hadoop启动_服务器_21


测试yarn:

执行官方wordcount程序:

[root@hadoop128 hadoop-3.1.3]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput/word.txt /wcoutput

可以在yarn可视化页面看到有程序正在计算运行:

hadoop 集群 单节点重启 集群hadoop启动_hadoop_22


运行结束后我们可以在hdfs页面看到有目录生成:

hadoop 集群 单节点重启 集群hadoop启动_hdfs_23


点进去,点开文件查看计算结果:

hadoop 集群 单节点重启 集群hadoop启动_服务器_24


到这里集群的安装配置测试已经完成