转--Hadoop集群部署案例

news2024/11/29 8:34:13

模块简介

本模块主要练习Hadoop集群部署。

模块知识

● 使用Linux基础命令
● Hadoop集群搭建部署知识

环境准备

三台CentOS7操作系统的虚拟机
可以是3个Docker容器,也可以是三个VMWare/VirtualBox的虚拟机。三台虚拟机的最低配置为1核1G + 20G。如果是虚拟机中的Docker容器环境,则无需按照以下方式配置主机名和IP。若是按照《[选修]基于OpenEuler的Docker容器安装使用教程》创建的Docker容器环境,或者从一道云科技发展有限公司提供的百度盘链接下载的VMWare镜像直接导入的Docker容器环境,直接移步到“步骤一”开始。
● 可使用以下镜像安装虚拟机操作系统,或者自行搜索下载OpenEuler操作系统:

https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2207-02.iso

注意:若没有现成的虚拟机供你使用,VMWare或者VirtualBox请自行搜索下载并安装
● 使用以下命令将三台虚拟机的主机名分别修改为master、slave1、slave2:

vi /etc/hostname

● 使用以下命令设置三台虚拟机的固定IP:

vi /etc/sysconfig/network-scripts/ifcfg-ens33

打开文件后的初始内容如下:

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=4a053340-23a9-4998-9e3c-9cf47ceaf727
DEVICE=ens33
ONBOOT=no

将第4行dhcp修改为none;将第15行no修改为yes。然后文件末尾再追加以下内容:

IPADDR=192.168.157.200
PREFIX=24
GATEWAY=192.168.157.2
DNS1=8.8.8.8
IPV6_PRIVACY=no

其中IPADDR的值三台虚拟机各不一样,请确保:
master为192.168.157.200,
slave1为192.168.157.201,
slave2为192.168.157.202。
注意:如果你的VMWare/VirtualBox给虚拟机的网段不是192.168.157.X,请在VMWare/VirtualBox的“虚拟网络编辑器”中修改为以上网段。当然你也可以使用你的虚拟机默认的网段来配置三台虚拟机的固定IP,只是需要注意后续步骤中的IP都要和你配置的IP相匹配。

模块内容

步骤一:配置host主机文件
1. 在Windows工作机的XShell工具中,通过SSH连接到master虚拟机上:

ssh root@192.168.157.200
  1. 输入密码,连接成功后,打开host的配置文件:
vi /etc/hosts
  1. 在文件末尾追加输入以下内容(按键盘上i键开启输入):
192.168.157.200 master
192.168.157.201 slave1
192.168.157.202 slave2

输入完成后保存并退出(按键盘上Esc键,然后输入:wq)。
4. 通过SSH分别连接到slave1和slave2虚拟机上,分别执行以上2~3操作
步骤二:配置SSH无密钥连接
1. 在master虚拟机的XShell连接对话中,输入以下命令生成master的密钥对:

ssh-keygen -t rsa
  1. 连按三次回车键。密钥对生成后,使用以下命令将密钥复制到slave1:
ssh-copy-id slave1

输入yes继续,输入slave1虚拟机的root用户的密码。
3. 再次使用以下命令将密钥复制到slave2:

ssh-copy-id slave2

输入yes继续,输入slave2虚拟机的root用户的密码。
4. 再次使用以下命令将密钥复制到master本身:

ssh-copy-id master

输入yes继续,输入master虚拟机的root用户的密码。
5. 通过SSH分别连接到slave1和slave2虚拟机上,分别执行以上1~4操作
步骤三:检查SSH无密钥连接
1. 在master虚拟机的XShell连接对话中,输入以下命令:

ssh slave1

检查是否不需要输入密码即可连接到slave1虚拟机。连接成功后终端显示:

[root@slave1]#
  1. 若显示以上内容,即表示slave1的无密钥连接配置成功,使用以下命令注销slave1的登录:
logout
  1. 使用同样的方法检查slave2和master本身是否配置成功无密钥连接。
    步骤四:在三台虚拟机上安装JDK
    1. 在master虚拟机的XShell连接对话中,输入以下命令创建software文件夹:
mkdir -p /root/software/
  1. 在Windows工作机上打开PowerShell,使用SCP命令将Windows工作机上的JDK安装包复制到master虚拟机的/root/software/路径下。
scp E:\BigData\Component\jdk-8u401-linux-x64.tar.gz root@192.168.157.200:/root/software/

输入master虚拟机的密码后等待复制完成。
注意:jdk-8u401-linux-x64.tar.gz文件的路径修改为你工作机上的该文件的实际路径。
3. 在master虚拟机的XShell连接对话中,输入以下命令解压JDK安装包:

tar -zxvf /root/software/jdk-8u401-linux-x64.tar.gz -C /usr/local/

这将在/usr/local/目录下创建一个名为jdk1.8.0_401的文件夹,并将JDK解压在这里。
4. 配置环境变量。输入以下命令创建一个新的环境变量配置文件:

vi /etc/profile.d/jdk.sh

在文件中添加以下内容:

export JAVA_HOME=/usr/local/jdk1.8.0_401
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

保存并退出。
5. 运行以下命令使环境变量配置生效:

source /etc/profile
  1. 运行以下命令验证JDK是否安装正确:
java -version

应该看到安装的JDK版本信息。
现在,已经成功安装了JDK并配置了相关的环境变量。
7. SSH连接到slave1和slave2虚拟机上,分别执行以上1~6操作,这将会给slave1和slave2成功安装JDK。
注意:执行scp命令时将IP地址替换为slave1和slave2的地址,即192.168.157.201和192.168.157.202
步骤五:在三台虚拟机上安装Hadoop
1. 在Windows工作机上打开PowerShell,使用SCP命令将Windows工作机上的Hadoop包复制到master虚拟机的/root/software/路径下。

scp E:\BigData\Component\hadoop-3.3.6.tar.gz root@192.168.157.200:/root/software/

输入master虚拟机的密码后等待复制完成。
注意:hadoop-3.3.6.tar.gz文件的路径修改为你工作机上的该文件的实际路径。
2. 在master虚拟机的XShell连接对话中,输入以下命令解压hadoop-3.3.6.tar.gz包:

tar -zxvf /root/software/hadoop-3.3.6.tar.gz -C /root/software/

这会将包内容解压到/root/software/hadoop-3.3.6/文件夹中。
3. 在/root/software/hadoop-3.3.6/下创建相关文件夹,输入以下命令:

mkdir -p /root/software/hadoop-3.3.6/hadoopDatas/tempDatas
mkdir -p /root/software/hadoop-3.3.6/hadoopDatas/namenodeDatas
mkdir -p /root/software/hadoop-3.3.6/hadoopDatas/datanodeDatas
mkdir -p /root/software/hadoop-3.3.6/hadoopDatas/dfs/nn/edits
mkdir -p /root/software/hadoop-3.3.6/hadoopDatas/dfs/snn/name
mkdir -p /root/software/hadoop-3.3.6/hadoopDatas/dfs/nn/snn/edits
  1. 配置hadoop-env.sh设置JAVA_HOME环境变量及Hadoop用户:
vi /root/software/hadoop-3.3.6/etc/hadoop/hadoop-env.sh

文件末尾追加输入以下内容:

export JAVA_HOME=/usr/local/jdk1.8.0_401
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
  1. 配置core-site.xml:
vi /root/software/hadoop-3.3.6/etc/hadoop/core-site.xml

删除已有的<configuration>对,然后文件末尾追加输入以下内容:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
</configuration>
  1. 配置hdfs-site.xml:
vi /root/software/hadoop-3.3.6/etc/hadoop/hdfs-site.xml

删除已有的<configuration>对,然后文件末尾追加输入以下内容:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/root/software/hadoop-3.3.6/hadoopDatas/namenodeDatas</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/root/software/hadoop-3.3.6/hadoopDatas/datanodeDatas</value>
    </property>
</configuration>
  1. 配置mapred-site.xml:
vi /root/software/hadoop-3.3.6/etc/hadoop/mapred-site.xml

删除已有的<configuration>对,然后文件末尾追加输入以下内容:

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
      <name>yarn.app.mapreduce.am.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
      <name>mapreduce.map.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
      <name>mapreduce.reduce.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
</configuration>
  1. 配置yarn-site.xml:
vi /root/software/hadoop-3.3.6/etc/hadoop/yarn-site.xml

删除已有的<configuration>对,然后文件末尾追加输入以下内容:

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
</configuration>
  1. 配置workers:
vi /root/software/hadoop-3.3.6/etc/hadoop/workers

删除已有的内容,然后输入以下内容:

master
slave1
slave2
  1. 从master将Hadoop复制到slave1,执行以下命令:
scp -r /root/software/hadoop-3.3.6/ slave1:/root/software/
  1. 从master将Hadoop复制到slave2,执行以下命令:
scp -r /root/software/hadoop-3.3.6/ slave2:/root/software/
  1. 配置Hadoop环境变量,执行以下命令:
vi /etc/profile.d/hadoop.sh

输入以下内容:

export HADOOP_HOME=/root/software/hadoop-3.3.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

保存并退出。
使Hadoop环境变量生效,执行以下命令:

source /etc/profile
  1. 该配置Hadoop环境变量的操作在slave1和slave2上分别操作一次
    步骤六:格式化HDFS
    在master节点执行以下命令:
hdfs namenode -format

步骤七:启动Hadoop集群
在master节点执行以下命令:

start-dfs.sh

应该看到如下输出:

[root@master ~]# start-dfs.sh
Starting namenodes on [master]
Last login: Wed Feb 21 19:51:38 EST 2024 from 192.168.157.1 on pts/0
Starting datanodes
Last login: Wed Feb 21 19:54:24 EST 2024 on pts/0
Starting secondary namenodes [master]
Last login: Wed Feb 21 19:54:27 EST 2024 on pts/0
[root@master ~]#

则代表hdfs启动成功,接着再次执行以下命令:

start-yarn.sh

应该看到如下输出:

[root@master ~]# start-yarn.sh
Starting resourcemanager
Last login: Wed Feb 21 19:54:35 EST 2024 on pts/0
Starting nodemanagers
Last login: Wed Feb 21 19:56:42 EST 2024 on pts/0
[root@master ~]#

则代表yarn启动成功,接着再次执行以下命令:

mapred --daemon start historyserver

应该看到如下输出:

[root@master ~]# mapred --daemon start historyserver
[root@master ~]#

步骤八:验证
分别在master、slave1、slave2三个节点执行以下命令:

jps

应该分别看到如下输出:
master:

[root@master ~]# jps
1606 DataNode
2230 NodeManager
2087 ResourceManager
1816 SecondaryNameNode
2681 Jps
2620 JobHistoryServer
1471 NameNode
[root@master ~]#

slave1:

[root@slave1 ~]# jps
1562 Jps
1355 DataNode
1452 NodeManager
[root@slave1 ~]#

slave2:

[root@slave2 ~]# jps
1363 DataNode
1571 Jps
1460 NodeManager
[root@slave2 ~]#

步骤九:关闭master虚拟机防火墙
在master节点执行以下命令:

sudo systemctl stop firewalld
sudo systemctl disable firewalld

上述命令将停止并禁用firewalld服务,这是 CentOS 7 和更新版本中的默认防火墙服务。禁用防火墙以便在工作机上通过Web浏览器访问Hadoop。
注意:在正式生产环境中不建议禁用防火墙,需要配置防火墙开放某些端口。可使用以下命令查看服务正在监听的端口

ss -nltp

或者

netstat -tuln

步骤十:通过Web浏览器访问Hadoop
在工作机上打开浏览器,输入以下网址访问Hadoop:

http://192.168.157.200:9870/

应该看到以下画面:
 



输入以下网址查看集群:

http://192.168.157.200:8088/

应该看到以下画面:
 



步骤十一:重启服务
在每次重新启动电脑后,需要重新启动Hadoop的服务,执行以下命令:

start-dfs.sh
start-yarn.sh
mapred --daemon start historyserver

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1851100.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20分钟攻破DISCUZ论坛并盗取数据库(web安全白帽子)

20分钟攻破DISCUZ论坛并盗取数据库&#xff08;web安全白帽子&#xff09; 1 快速搭建discuz论坛1.1 攻击思路1.2 快速搭建实验环境1.2.1&#xff0c;漏洞概述1.2.2&#xff0c;在centos7虚拟机上搭建LAMP环境1.2.3&#xff0c;上传到discuz_X2_SC_UTF8.zip 到Linux系统/root下…

Android 添加自己的时钟小部件

小部件&#xff0c;也叫微件&#xff0c; 它的介绍参考官网 应用 widget 概览 https://developer.android.google.cn/develop/ui/views/appwidgets/overview?hlzh-cn 直接上图&#xff0c;原生系统上&#xff0c;时钟应用的小部件效果。 我也整一个。 1.创建小部件布局文…

C#使用轻量级深度学习模型进行车牌颜色识别和车牌号识别

看到这个文章时候请注意这个不涉及到车牌检测&#xff0c;这个仅仅是车牌颜色和车牌号识别&#xff0c;如果想涉及到车牌检测可以参考这个博客&#xff1a;[C#]winform部署yolov7CRNN实现车牌颜色识别车牌号检测识别_c# yolo 车牌识别-CSDN博客 【训练源码】 https://github.…

已解决java.rmi.activation.ActivationException异常的正确解决方法,亲测有效!!!

已解决java.rmi.activation.ActivationException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 问题分析 java.rmi.activation.ActivationException 是与Java RMI&#xff08;远程方法调用&#xff09;的激活机制相关的一种已检查异常。这个异…

【面试干货】Hashtable 与 HashMap 的区别

【面试干货】Hashtable 与 HashMap 的区别 1、线程安全性2、对null值的处理3、遍历方式4、遍历示例5、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;Hashtable和HashMap都是基于哈希表实现的Map接口。然而&#…

代码随想录算法训练营第31天| 134. 加油站、135. 分发糖果、860.柠檬水找零、 406.根据身高重建队列

134. 加油站 题目链接&#xff1a;134. 加油站 文档讲解&#xff1a;代码随想录 状态&#xff1a;so easy 思路&#xff1a;每次遍历时&#xff0c;如果当前的油量差&#xff08;currTank&#xff09;小于0&#xff0c;说明从当前起点无法到达下一个加油站。此时&#xff0c;将…

Python --- 如何修改Jupyter Notebook保存文件的路径?

如何修改Jupyter Notebook在本地保存文件的默认路径&#xff1f; 一直以来都比较喜欢jupter notebook&#xff0c;自从用了以后就爱上了。平时用的时候&#xff0c;因为大多都是临时调用&#xff0c;每次在界面里直接new一个新的file就开干。 曾经也想过我创建的这些python文件…

代码随想录第31天|贪心算法

134. 加油站 参考 思路: 以每个油站相差作为判断, 比如: gas [5 8 2 8]cost [6 5 6 6] [-1 3 -4 2]错误 : 把相差最大点当作起点判断能否绕一圈 : 相加数组是否小于0局部最优: 当前累加rest[i]的和curSum一旦小于0&#xff0c;起始位置至少要是i1&#xff0c;因为从i…

初识 SpringMVC,运行配置第一个Spring MVC 程序

1. 初识 SpringMVC&#xff0c;运行配置第一个Spring MVC 程序 文章目录 1. 初识 SpringMVC&#xff0c;运行配置第一个Spring MVC 程序1.1 什么是 MVC 2. Spring MVC 概述2.1 Spring MVC 的作用&#xff1a; 3. 运行配置第一个 Spring MVC 程序3.1 第一步&#xff1a;创建Mave…

免费开源的地图解析工具【快速上手】

视频学习地址 这篇文章和【Nominatim】是相呼应的&#xff0c;在尝试了OSM数据一直有问题之后&#xff0c;通过别人的指点是不是可以换个思路&#xff0c;我的数据只需要精确到市级别&#xff0c;也可以不用OSM这样全的数据&#xff08;主要原因还是OSM太过庞大了&#xff09; …

Mybatis(根据id查找这一行的数据)

首先在查询之前&#xff0c;我们先要做些基础的工作先创建一个以你的数据库命名的model类 我的数据库的名字叫admin 我就创建了一个Admin的类 用来方便数据的访问 然后我们就要创建一个接口来声明我们要写的方法 我创建的接口命名为AdminDao 在创建一个xml的类用来实现声明的…

NSSCTF中的[WUSTCTF 2020]朴实无华、[FSCTF 2023]源码!启动! 、[LitCTF 2023]Flag点击就送! 以及相关知识点

目录 [WUSTCTF 2020]朴实无华 [FSCTF 2023]源码&#xff01;启动! [LitCTF 2023]Flag点击就送&#xff01; 相关知识点 1.intval 绕过 绕过的方式&#xff1a; 2.session伪造攻击 [WUSTCTF 2020]朴实无华 1.进入页面几乎没什么可用的信息&#xff0c;所以想到使用dis…

408数据结构-图的应用1-最小生成树 自学知识点整理

前置知识&#xff1a;图的遍历 图的应用是408初试历年考查的重点。不过一般而言&#xff0c;这部分内容直接以算法设计题形式考查的可能性极小&#xff0c;更多的是结合图的实例来考查算法的具体操作过程&#xff0c;要求掌握的是手推模拟给定图的各个算法执行过程。此外&#…

利口 202. 快乐数

力扣 202. 快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结…

信号基本分析方法——频域分析

二、频域分析 随机信号的时域分析只能提供有限的时域故障特征信息&#xff0c;故障发生时往往会引起信号频率结构的变化&#xff0c;而故障频率可以计算和预知&#xff0c;通过检测频率的幅值变换规律&#xff0c;就可以监控故障的发展过程。 频谱分析的理论基础是傅里叶变换…

AI音乐模型:创新还是颠覆?

文章目录 AI音乐大模型的崛起音乐创作门槛的降低与兴奋AI音乐作品的版权归属问题创意产业在AI阴影下的生长结语 &#x1f389;欢迎来到AIGC人工智能专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&…

【数据结构】链表的大概认识及单链表的实现

目录 一、链表的概念及结构 二、链表的分类 三、单链表的实现 建立链表的节点&#xff1a; 尾插——尾删&#xff1a; 头插——头删&#xff1a; 查找&#xff1a; 指定位置之后删除——插入&#xff1a; 指定位置之前插入——删除指定位置&#xff1a; 销毁链表&am…

向量和矩阵的点乘、叉乘

# 本科学习的全都还回去了-_- 一、向量 &#xff08;1&#xff09;点乘 向量点积&#xff0c; &#x1d44e;⋅&#x1d44f;&#x1d450; &#xff0c;符号为 ⋅ &#xff0c;要求向量长度相同&#xff0c;是两个向量之间的点乘运算&#xff0c;结果是一个标量。又称&…

在 Equinix 上使用 MinIO 控制云数据成本

公有云改变了公司构建、部署和管理应用程序的方式&#xff0c;主要是向好的方向发展。在您刚开始使用时&#xff0c;公有云会提供基础架构、服务、支持和维护&#xff0c;以便快速启动和运行。它以几乎无限的方式提供最终的可伸缩性&#xff0c;无论应用程序的负载如何&#xf…

ROS中的TF是什么

在ROS (Robot Operating System) 中&#xff0c;tf::TransformBroadcaster 是一个用于发布坐标变换信息的重要类&#xff0c;尤其在处理机器人定位和导航数据时非常常见。tf::TransformBroadcaster 对象允许你广播从一个坐标系到另一个坐标系的变换关系&#xff0c;这对于多传感…