Hadoop集群搭建(超级详细)

Hadoop集群搭建(超级详细)本文略长 希望各位大佬见谅 需要的安装包 jdk 8u162 linux x64 tar gz 提取码 6k1i hadoop 3 1 3 tar gz 提取码 07p6 1 集群规划安装 VMware 使用三台 Ubuntu18 04 虚拟机进行集群搭建 下面是每台虚拟机的规划 主机名 IP 用户 HDFSYARNhado 待定 rmc0924NameN DataNodeNode ResourceMana

感谢评论区大佬们指出文章中的一些错误,已经进行修改。如果还存在其他错误,希望大佬们指出!

需要的安装包:jdk-8u162-linux-x64.tar.gz( 提取码:6k1i )、hadoop-3.1.3.tar.gz( 提取码:07p6 )

1 集群规划

安装VMware,使用三台Ubuntu18.04虚拟机进行集群搭建,下面是每台虚拟机的规划:

主机名 IP 用户 HDFS YARN
hadoopMaster 待定 rmc0924 NameNode、DataNode NodeManager、ResourceManager
hadoopSlave0 待定 rmc0924 DataNode、SecondaryNameNode NodeManager
hadoopSlave1 待定 rmc0924 DataNode NodeManager

上面表格备用,还需要确定每台虚拟机的IP地址

2 网络配置

首先在VMware中新建一台4G内存(后期会进行修改),20G硬盘空间的Ubuntu虚拟机。新建完成后进行下面操作。

2.1 修改主机名

sudo vim /etc/hostname 

2.2 设置虚拟机IP地址

  1. 查看VMware虚拟机的虚拟网络编辑器
    在这里插入图片描述

  2. 点击VMnet8网络,点击NAT设置

在这里插入图片描述
记录上面图中子网IP、子网掩码、网关三个属性,这些在后面的步骤有用,不同的电脑会有不同。

  1. 获取Ubuntu虚拟机的网卡编号
ifconfig 

在这里插入图片描述

  1. 设置静态网络
sudo vim /etc/network/interfaces 

在原有的内容上添加

auto ens33 # 网卡编号,我这里是ens33 iface ens33 inet static # 设置为静态IP address 192.168.131.151 # 该机器的IP,根据我们刚才获取到的VMware的子网IP进行选取 netmask 255.255.255.0 # 子网掩码,刚才获取VMware的子网掩码 gateway 192.168.131.2 # 网关,也是刚才获取的网关 dns-nameserver 192.168.131.2 # DNS,和网关一样即可 

上面的内容根据各自的电脑进行设置,一定要和VMware中的子网IP、子网掩码、网关保持一致,不然会上不了网。保存退出vim编辑器,重启Ubuntu即可生效。

  1. 主机IP映射
sudo vim /etc/hosts 

打开hosts文件,新增三条IP与主机的映射关系:

192.168.131.151 hadoopMaster 192.168.131.152 hadoopSlave0 192.168.131.153 hadoopSlave1 

一般情况下,hosts文件中只有一个127.0.0.1,其对应的主机名为localhost,如果存在多余的127.0.0.1,应删除,同时127.0.0.1不能与hadoopMaster这样的主机名进行映射关系。修改后重启Ubuntu。

2.3 关闭防火墙

使用下面命令查看防火墙状态,inactive状态是防火墙关闭状态 active是开启状态。

sudo ufw status 

使用下面命令关闭防火墙:

sudo ufw disable 

3 安装SSH服务端

sudo apt-get install openssh-server 

安装后,使用下面命令登录本机:

ssh localhost 

SSH首次登录会有提示,输入yes即可,然后按照提示输入本机密码即可。但是这样每次登录都要输入密码,现在设置SSH无密码登录。首先退出SSH,利用ssh-keygen生成密钥,并将密钥加入到授权中。

exit # 退出ssh localhost cd ~/.ssh/ ssh-keygen -t rsa # 会有提示,都按回车就行 cat ./id_rsa.pub >> ./authorized_keys # 加入授权 

4 安装Java环境

Hadoop3.1.3需要JDK版本在1.8及以上,jdk-8u162-linux-x64.tar.gz在文首给出,可以进行下载。将文件放在一个目录中后,打开一个终端,执行下面命令。

cd /usr/lib sudo mkdir jvm # 创建目录来存放JDK文件 # 进入jdk-8u162-linux-x64.tar.gz所在的文件夹 sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm 
sudo vim ~/.bashrc 

在打开的文件首部添加下面内容

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH 

保存退出vim编辑器,执行下面命令让.bashrc文件的配置生效:

source ~/.bashrc 

接下来使用下面命令查看是否安装成功:

java -version 

5 安装Hadoop3.1.3

hadoop-3.1.3.tar.gz文件在文首已经给出,将其下载并放到相应的位置上,使用下面命令安装:

sudo tar -zxf ./hadoop-3.1.3.tar.gz -C /usr/local # 解压到/usr/local中 sudo mv ./hadoop-3.1.3/ ./hadoop # 将文件名改为hadoop sudo chown -R rmc0924 ./hadoop # 修改权限,当前是什么用户登录,就给他赋予用户的权限 

解压后使用下面命令看是否安装成功,安装成功会显示Hadoop的版本信息。

cd /usr/local/hadoop ./bin/hadoop verison 

在这里插入图片描述

6 克隆虚拟机

主机名 IP 用户 HDFS YARN
hadoopMaster 192.168.131.151 rmc0924 NameNode、DataNode NodeManager、ResourceManager
hadoopSlave0 192.168.131.152 rmc0924 DataNode、SecondaryNameNode NodeManager
hadoopSlave1 192.168.131.153 rmc0924 DataNode NodeManager

7 安装SecureCRT

由于使用一台电脑来搭建集群,电脑的内存就8G,带不动三台带有图形化界面的虚拟机同时运行,所以使用SecureCRT进行远程连接。SecureCRT安装教程在这位大佬的博客中有详细的教程,大家伙自己过去看就好了,我就不再赘述。

8 集群搭建

好了,前面说了那么多都是铺垫,现在正式搭建Hadoop集群。首先我们还是需要打开VMware中的三台虚拟机,但是打开之前,我们要把它们的内存进行修改,由原先的4G改为1.5G就行了。硬件原因,不在这三台的图形化界面上进行操作,而是使用SecureCRT远程连接,只在终端上进行操作。将三台虚拟机的内存大小改为1.5G后,就可以将三台机子打开。仅仅打开就行,登录界面出现就够了,不需要登录进去。
在这里插入图片描述
这样开了三台,内存还都是1.5G的,我的内存就干到了85%,所以不用在图形化界面上进行操作。使用SecureCRT就可以直接登录三台机子。
在这里插入图片描述
三台机子之间互相ping,看是否能ping通。
在这里插入图片描述










  1. SSH无密码登录节点

必须要让hadoopMaster节点可以SSH无密码登录到各个hadoopSlave节点上。首先生成hadoopMaster节点公钥,如果之前已经生成,必须删除,重新生成一次。在hadoopMaster上进行下面操作:

cd ~/.ssh rm ./id_rsa* # 删除之前生成的公钥 ssh-keygen -t rsa # 遇到信息,一直回车就行 

再让hadoopMaster节点能够无密码SSH登录本机,在hadoopMaster节点上执行下面命令:

cat ./id_rsa.pub >> ./authorized_keys 

使用下面命令进行测试:

ssh hadoopMaster 

接下来将hadoopMaster上的公钥传给各个hadoopSlave节点:

scp ~/.ssh/id_rsa.pub hadoopSlave0:/home/rmc0924 
mkdir ~/.ssh # 如果不存在该文件夹,先创建 cat ~/id_rsa.pub >> ~/.ssh/authorized_keys rm ~/id_rsa.pub # 加完就删除 

在hadoopSlave1节点中也执行上的命令。执行完了之后,在hadoopMaster节点上就可以无密码登录代各个hadoopSlave节点,在hadoopMaster节点上执行下面命令:

ssh hadoopSlave0 

在这里插入图片描述
输入exit即可退出。

  1. 配置集群环境

配置集群模式时,需要修改“/usr/local/hadoop/etc/hadoop”目录下的配置文件,包括workers、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml。

A. 修改workers文件

vim workers 

该文件内容可以指定某几个节点作为数据节点,默认为localhost,我们将其删除并修改为hadoopSlave0和hadoopSlave1.当然也可以将hadoopMaster加进去,让hadoopMaster节点既做名称节点,也做数据节点,本文将hadoopMaster一起加进去作为数据节点。

hadoopMaster hadoopSlave0 hadoopSlave1 

B.修改core-site.xml文件

vim core-site.xml 
 <configuration> <property> <name>fs.defaultFS 
     name> <value>hdfs://hadoopMaster:9000 
      value>  
       property> <property> <name>hadoop.tmp.dir 
        name> <value>file:/usr/local/hadoop/tmp 
         value>  
          property>  
           configuration> 

C.修改hdfs-site.xml文件

vim hdfs-site.xml 
 <configuration> <property> <name>dfs.namenode.secondary.http-address 
     name> <value>hadoopSlave0:50090 
      value>  
       property> <property> <name>dfs.replication 
        name> <value>3 
         value>  
          property> <property> <name>dfs.namenode.name.dir 
           name> <value>file:/usr/local/hadoop/tmp/dfs/name 
            value>  
             property> <property> <name>dfs.datanode.data.dir 
              name> <value>file:/usr/local/hadoop/tmp/dfs/data 
               value>  
                property>  
                 configuration> 

D.修改mapred-site.xml文件

vim mapred-site.xml 
 <configuration> <property> <name>mapreduce.framework.name 
     name> <value>yarn 
      value>  
       property> <property> <name>mapreduce.jobhistory.address 
        name> <value>hadoopMaster:10020 
         value>  
          property> <property> <name>mapreduce.jobhistory.webapp.address 
           name> <value>hadoopMaster:19888 
            value>  
             property> <property> <name>yarn.app.mapreduce.am.env 
              name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop 
               value>  
                property> <property> <name>mapreduce.map.env 
                 name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop 
                  value>  
                   property> <property> <name>mapreduce.reduce.env 
                    name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop 
                     value>  
                      property>  
                       configuration> 

E.修改yarn-site.xml文件

vim yarn-site.xml 
 <configuration> <property> <name>yarn.resourcemanager.hostname 
     name> <value>hadoopMaster 
      value>  
       property> <property> <name>yarn.nodemanager.aux-services 
        name> <value>mapreduce_shuffle 
         value>  
          property>  
           configuration> 
  1. 分发文件

修改完上面五个文件后,将hadoopMaster节点上的hadoop文件复制到各个结点上。在hadoopMaster节点上执行下面命令:

cd /usr/local sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件 sudo rm -r ./hadoop/logs/* # 删除日志文件 tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先压缩再复制 cd ~ scp ./hadoop.master.tar.gz hadoopSlave0:/home/hadoop 

在这里插入图片描述
在其他hadoopSlave节点将接收的压缩文件解压出来,并授予权限,命令如下:

sudo rm -r /usr/local/hadoop # 删掉旧的(如果存在) sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local sudo chown -R rmc0924 /usr/local/hadoop 
  1. Hadoop初始化

HDFS初始化只能在主节点上进行

cd /usr/local/hadoop ./bin/hdfs namenode -format 

在这里插入图片描述
在初始化过程中,只要看到上面红框里面的信息,有个successfully formatted说明初始化成功。

  1. Hadoop集群启动

在hadoopMaster节点上执行下面命令:

cd /usr/local/hadoop ./sbin/start-dfs.sh ./sbin/start-yarn.sh ./sbin/mr-jobhistory-daemon.sh start historyserver 

在这里插入图片描述
在这里插入图片描述
当然我们也可以在浏览器中查看:
HDFS:http://192.168.131.151:9870/
YARN:http://192.168.131.151:8088/cluster








HDFS界面

在这里插入图片描述
点击DataNodes可以查看三个节点:
在这里插入图片描述
YARN界面






在这里插入图片描述
点击左侧导航栏Nodes可以查看结点
在这里插入图片描述
至此,Hadoop集群搭建完成,撒花!!!!!






9 执行分布式实例

在HDFS上创建一个文件夹/test/input

cd /usr/local/hadoop ./bin/hdfs dfs -mkdir -p /test/input 

查看创建的文件夹

./bin/hdfs dfs -ls / 

在这里插入图片描述

创建一个word.txt测试文件

vim word.txt 

输入以下文本(我从《傲慢与偏见》里面抽出来两段话)

 Be not alarmed, madam, on receiving this letter, by the apprehension of its containing any repetition of those sentiments or renewal of those offers which were last night so disgusting to you. I write without any intention of paining you, or humbling myself, by dwelling on wishes which, for the happiness of both, cannot be too soon forgotten; and the effort which the formation and the perusal of this letter must occasion, should have been spared, had not my character required it to be written and read. You must, therefore, pardon the freedom with which I demand your attention; your feelings, I know, will bestow it unwillingly, but I demand it of your justice. My objections to the marriage were not merely those which I last night acknowledged to have the utmost required force of passion to put aside, in my own case; the want of connection could not be so great an evil to my friend as to me. But there were other causes of repugnance; causes which, though still existing, and existing to an equal degree in both instances, I had myself endeavored to forget, because they were not immediately before me. These causes must be stated, though briefly. The situation of your mother's family, though objectionable, was nothing in comparison to that total want of propriety so frequently, so almost uniformly betrayed by herself, by your three younger sisters, and occasionally even by your father. Pardon me. It pains me to offend you. But amidst your concern for the defects of your nearest relations, and your displeasure at this representation of them, let it give you consolation to consider that, to have conducted yourselves so as to avoid any share of the like censure, is praise no less generally bestowed on you and your eldersister, than it is honorable to the sense and disposition of both. I will only say farther that from what passed that evening, my opinion of all parties was confirmed, and every inducement heightened which could have led me before, to preserve my friend from what I esteemed a most unhappy connection. He left Netherfield for London, on the day following, as you, I am certain, remember, with the design of soon returning. 

将word.txt上传到HDFS的/test/input文件夹中

./bin/hdfs dfs -put ~/word.txt /test/input 

运行一个mapreduce的例子程序:wordcount

./bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /test/input /test/output 
./bin/hdfs dfs -cat /test/output/* 

在这里插入图片描述
由于只是进行词频统计,我没有对测试数据进行其他处理,所以有些单词会带逗号,这些都是小事,重点是,Hadoop集群搭建起来了,还能跑,这就舒服了,嘻嘻嘻嘻嘻嘻。

10 关闭集群

接下来就是关闭集群,输入以下命令:

cd /usr/local/hadoop ./sbin/stop-yarn.sh ./sbin/stop-dfs.sh ./sbin/mr-jobhistory-daemon.sh stop historyserver 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199619.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 下午12:35
下一篇 2026年3月20日 下午12:36


相关推荐

  • POJ 3076 SUKODU [Dangcing Links DLX精准覆盖]「建议收藏」

    POJ 3076 SUKODU [Dangcing Links DLX精准覆盖]

    2022年2月7日
    56
  • android获取js数组长度,javascript如何获取数组长度?

    android获取js数组长度,javascript如何获取数组长度?JavaScript 中可以通过 length 方法来获取字符串的长度 数组的 length 属性总是比数组中定义的最后一个元素的下标大 1 定义和用法 length 属性可设置或返回数组中元素的数目 语法 arrayObject length 说明数组的 length 属性总是比数组中定义的最后一个元素的下标大 1 对于那些具有连续元素 而且以元素 0 开始的常规数组而言 属性 length 声明了数组中的

    2026年3月26日
    2
  • 企业运维实战–Git的使用、git结合github/gitlee、私有gitlab搭建

    企业运维实战–Git的使用、git结合github/gitlee、私有gitlab搭建企业运维实战 Git 的使用 私有 gitlab 搭建 Git 简介 Git 使用 git 本地使用 linux git 结合远程仓库 github gitlee 私有 git 仓库搭建 Git 简介 Git 是目前世界上最先进的分布式版本控制系统 这个软件用起来能记录每次文件的改动 方便对文件的增删查改 版本迭代和回退等控制操作 GitHub 是一个基于 Git 的远程文件托管平台 同 Gitlee 集中式版本控制系统 都有一个单一的集中管理的服务器 保存所有文件的修订版本 协同工作的人们都通过客户端连接到这台服务器 取出最新的文件

    2026年3月26日
    2
  • self attention(自注意力机制)

    self attention(自注意力机制)selfattentio 是注意力机制中的一种 也是 transformer 中的重要组成部分 本文先重新回归一下注意力机制 再做进一步介绍 正如之前说的 注意力机制的目的是根据我们的目标 去关注部分细节 而不是基于全局进行分析 所以核心就是如何基于目标确定我们要关注的部分 以及在找到这部分细节之后进一步进行分析 这里先以文本匹配作为例子进行介绍 假设我们要分析两个文本是不是重复的 Iama

    2026年3月20日
    2
  • HashSet的add()方法源码解析(jdk1.8)

    HashSet的add()方法源码解析(jdk1.8)

    2021年11月12日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号