hadoop完全分布式安装以及集群的配置和启动

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

xsync的使用:
https://blog.csdn.net/qq_43066945/article/details/119458718

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

ssh免密:

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

ls -al

在这里插入图片描述

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配置我们就需要用到默认的配置文件,初始化默认的配置文件是空的,文件我已经上传了,下载记得关注我,如果需要积分了可以私聊我,我发你:
https://download.csdn.net/download/qq_43066945/21042985

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用户会出现如下错误:
在这里插入图片描述
别慌,这是权限的问题,修改启动文件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

成功:
在这里插入图片描述
使用jps查看启动的项
在这里插入图片描述
发现128上启动了DataNode和NameNode,和我们的集群规划一样,在看129和130:
在这里插入图片描述
在这里插入图片描述
满足我们的集群规划要求
然后可以访问hdfs的可视化界面:
主机名+端口(pc上的hosts需要做映射才可以这样写,不然就老老实实的用ip+端口访问)
Hadoop128:9870
在这里插入图片描述
进入该界面,可以看到hdfs中的数据,当前并没有存数据,所以里面显示数据0。
在这里插入图片描述
Hdfs启动成功后启动ResourceManager:
按照集群规划,ResourceManager是在hadoop129上的,所以需要到129上启动:
在这里插入图片描述
Jps查看三台服务器情况:

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由此可以看出,三台服务器已经按照我们的集群规划启动了
Yarn也有可视化界面,可以查看运行情况:
Hadoop129:8088
在这里插入图片描述

测试

执行创建文件夹:

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

可以在hdfs可视化界面查看到信息:
在这里插入图片描述
接下来准备一个txt文件上传,我这里是上传了hadoop目录下我的一个文件:

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

这时候再去页面上点击wcinput进入目录,可以看到
在这里插入图片描述
点击word,再点击图中位置可以查看到文件内容:
在这里插入图片描述
也可以下载,如果你是用ip+端口访问的可能会看不到数据,最好去hosts文件中做一个你服务器的映射便可以查看到,比如我这里是映射成hadoop128便可以查看到文件内容了。

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

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

再次查看页面:
在这里插入图片描述
成功。
可视化查看结束,那么数据真正是存在什么地方的呢?
在hadoop目录下有个data文件夹内

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

可以看到我们上传的文件:
在这里插入图片描述
我们查看一下第一个:
在这里插入图片描述
发现他就是我们之前上传的word.txt
那我们上传的压缩包呢?
这时候就要用到拼接了。
在这里插入图片描述
可以理解我将拆解开的文件重新拼接成一个压缩包,然后解压,完成后我们查看,发现他解压出来的结果就是hadoop的目录文件,与预期的一样:
在这里插入图片描述
测试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可视化页面看到有程序正在计算运行:
在这里插入图片描述
运行结束后我们可以在hdfs页面看到有目录生成:
在这里插入图片描述
点进去,点开文件查看计算结果:
在这里插入图片描述
到这里集群的安装配置测试已经完成

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值