一文快速学会hadoop完全分布式集群搭建,很详细

news2024/10/6 1:47:38

文章目录

  • 前言
  • 一、准备工作
  • 二、克隆三台虚拟机并进行网络配置
    • 克隆
    • 虚拟机克隆引导
    • 修改网络配置
    • 验证
      • 验证方式一
      • 验证方式二
  • 三、安装jdk和hadoop
  • 四、ssh免密登录配置
    • 概述
    • 生成公钥和私钥
    • 把公钥拷贝到三台虚拟机上面去
    • 验证
    • 把hadoop103 和 hadoop104的免密登录配置安装上面的操作再做一遍
    • 建议把hadoop102 root 到hadoop102 103 104 的免密登录也配置一下,试了一下集群分发脚本,文件或目录好多因为没有权限而无法创建。
  • 五、集群分发脚本
    • 验证全局是否能使用
    • 修改文件的路径
    • 再次验证
  • 六、集群配置
    • 修改配置文件
    • 使用xsync来把修改的文件分发出去
  • 七、启动集群
    • 概述
    • 格式化namenode节点
    • 启动hdfs
    • 在resourcemanager的节点(hadoop103)启动yarn
    • 验证
  • 八、配置历史服务器和日志聚集功能
    • 配置历史服务器
    • 配置日志聚集功能


前言

hadoop的启动模式有三种,一个是本地模式,一个是伪分布式模式,还有一个是集群模式。为了学习hadoop,这里需要搭建一个完全分布式的集群。希望你先把准备工作给看一下,因为我们的配置都是前后一致的。本文因为想让大家学习一下集群分发脚本,所以在模板虚拟机里面少放了很多东西,以后会写一个快速搭建集群的教程。


一、准备工作

首先我们需要多台虚拟机,需要做的工作请看下面这篇博文。
配置hadoop模板虚拟机

二、克隆三台虚拟机并进行网络配置

克隆

找到我们上面配置好的模板虚拟机,打开它,然后右键——》管理——》克隆
在这里插入图片描述

在这里插入图片描述

虚拟机克隆引导

在引导的时候,我只说两件事

第一,要选择创建完整克隆
在这里插入图片描述
第二,在命名的时候,建议命名成hadoop102,hadoop103,hadoop104
原因有两点:一般hadoop101是用来做伪分布式安装的
第二点,我们的hosts已经修改成了hadoop101~hadoop108
所以,我建议三台虚拟机命名成hadoop102,hadoop103,hadoop104
在这里插入图片描述

修改网络配置

让我们开机hadoop102,hadoop103,hadoop104

以管理员的身份登录

首先要强调一点,我们的配置都是前后一致的,一一对应的。
hadoop102 对应的ip地址末尾是102 hostname也是hadoop102
hadoop103 对应的ip地址末尾是103 hostname也是hadoop103
hadoop104 对应的ip地址末尾是104 hostname也是hadoop104

看明白了吗?这些在准备工作里面都配置过,下面的修改也不过是进行了一致性修改。

在这里插入图片描述
首先,修改ip地址

输入下面的命令

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

把 ip地址与名字对应(hadoop102的ip末尾修改成102就行,hadoop103同理)保存退出就行了,毕竟之前我们已经配置了模板虚拟机。

在这里插入图片描述

修改hostname

vim /etc/hostname

hadoop102的hostname修改成hadoop102
hadoop103同理
保存退出。输入“ :wq
在这里插入图片描述

验证

验证方式一

让我们

ping www.baidu.com

验证方式二

打开我们的xshell,
连接这三台虚拟机。(这里不再演示了)

三、安装jdk和hadoop

注:这里在hadoop102安装就行了
(这里主要是为了学习一下分发脚本,不然直接在模板机直接把这些配置好岂不是妙哉?)

CentOS7安装jdk

centos7 安装hadoop

四、ssh免密登录配置

概述

在下一大点,我们用了一个分发脚本。

在使用分发脚本传输文件时,必不可少的一项流程是登录到目标机器,也就是要输入密码(可以先试一试第五点的集群分发脚本来体会为什么要设置ssh免密登录),

并且每次传文件都要输密码,所以配置了ssh免密登录,集群之间的机器再传输文件就不需要密码了。

本节使用的是手动配置ssh免密登录(学习一下,知道ssh免密登录怎么配置),
后续可以使用shell脚本来快速配置集群的免密登录
(假设你有n台机器,你要配置n*n次的免密登录,非常的麻烦)


生成公钥和私钥

首先,来到hadoop102,使用tom登录(ssh免密登录是分用户的,假设你使用了root管理员来进行免密登录配置,那你只能使用root来免密登录其他的已经配置过免密登录的机器,而本机器上的其他用户是无法进行免密登录的,登录到其他机器还是要输入密码的)

tom的家目录(/home/tom)输入ls -lah,你会看到.ssh
在这里插入图片描述
如果你没有这个.ssh,也没有关系,可以输入

ssh localhost

在这里插入图片描述
然后输入密码就行了,再输入上面的命令,你就会看到这个.ssh的目录了。

进入.ssh目录

在这里插入图片描述

输入

ssh-keygen -t rsa

然后回车三次,生成了公钥和私钥

在这里插入图片描述

id_rsa 是私钥,id_rsa.pub是公钥

在这里插入图片描述

把公钥拷贝到三台虚拟机上面去

依次输入(每次输入的命令需要对应机器的密码)

ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104
在这里插入图片描述

验证

上面的做完了,开始验证是否配置成功
现在我们在hadoop102这台机器上面,我们输入

ssh hadoop102

看看需不需要输密码,如果不需要输密码,就说明我们已经配置成功了
在这里插入图片描述

把hadoop103 和 hadoop104的免密登录配置安装上面的操作再做一遍

建议把hadoop102 root 到hadoop102 103 104 的免密登录也配置一下,试了一下集群分发脚本,文件或目录好多因为没有权限而无法创建。

五、集群分发脚本

我们还是使用tom登录hadoop102

我们已经在模板虚拟机的时候就已经安装了rsync(因为每个模板虚拟机都需要这个)
如果你的虚拟机没有rsync

sudo yum install rsync

请在用户家目录创建一个bin目录,然后输入

vim xsync

下面就是集群分发脚本
(记得先输入 i 进入编辑的模式再复制粘贴脚本代码)

#!/bin/bash

# 1.判断参数个数
if [ $# -lt 1 ]
then
        echo Not Enough Arguement!
        exit;
fi

# 2.遍历机器所有机器
for host in hadoop102 hadoop103 hadoop104
do
        echo ================== $host ===============
        # 3.遍历所有目录,挨个发送
        for file in $@
        do
                #4. 判断文件是否存在
                if [ -e $file ]
                   then
                      # 5.获取父目录
                      pdir=$(cd -P $(dirname $file);pwd)

                      # 6.获取当前文件的名称
                      fname=$(basename $file)
                      ssh $host "mkdir -p $pdir"
                      rsync -av $pdir/$fname $host:$pdir
                else
                      echo $file does not exists!
                fi
        done
done
          

修改脚本权限

chmod 777 xsync

xsync的执行方式就是

xsync 跟上文件或目录的路径就行了

验证全局是否能使用

首先

cd ..

让我随便的创建一个文件

touch a.txt

然后

xsync a.txt

说明,这个时候大概率可能是不能用的,我试了好几次。

修改文件的路径

我们需要把这个脚本文件移动到一个全部变量的目录里面

sudo cp /home/tom/bin/xsynv /bin

再次验证

我们在/home/tom 的目录下创建了一个 a.txt 文件,现在试一试能不能使用这个东西

cd /home/tom
xsync a.txt

然后登录root账户

su root
mkdir aaa
xsync aaa

如果能执行,就说明我们的分发脚本配置成功了。

六、集群配置

我们要按照这张图来配置集群
在这里插入图片描述
注意 NameNode 和 SecondaryNameNode 不要安装在同一台服务器上
ReourceManager 也很消耗内存,不要和NameNode,secondaryNameNode 配置在同一台机器上。

那么应该怎么配置呢?
需要修改相应的配置文件

修改配置文件

所有需要修改的文件都在$HADOOP_HOME/etc/hadoop里面

**注意!!!**如果用tom不能修改,大概率是因为你使用的是root来创建了目录,使用了root来解压文件等原因,执行下面的代码修改

sudo chown -R tom:tom /opt

首先修改hadoop102的core-site.xml

下面是需要修改的内容(不要复制粘贴错位置了,xml不再多说了,学过html就很容易懂这种格式)

<configuration>
<!--指定NameNode 的地址-->
   <property>
       <name>fs.defaultFS</name>
       <value>hdfs://hadoop102:8020</value>
   </property>
<!--指定hadoop数据的存储目录-->
   <property>
       <name>hadoop.tmp.dir</name>
       <value>/opt/module/hadoop-3.3.4/data</value>
   </property>

</configuration>

这个是修改的位置
在这里插入图片描述

其次修改hadoop102的hdfs-site.xml

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

然后修改hadoop102的yarn-site.xml

<configuration>
<!--指定mapreduce走shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定ResourceManager的地址-->
<property>
<name>yarn.nodemanager.env-whitelsit</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>

再次修改hadoop102的mapred-site.xml

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

最后修改workers(2.x版本叫slaves)
在这里插入图片描述
修改hadoop-env.sh
这里主要是添加一下java_home

在这里插入图片描述

使用xsync来把修改的文件分发出去

在$HADOOP_HOME/etc/ 目录下执行下面的代码

xsync hadoop/

七、启动集群

概述

经过了重重的配置,我们终于要来启动集群了,在启动集群之前,我们还要进行一定的配置

格式化namenode节点

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

这个要在hadoop102上运行

hdfs namenode -format

启动hdfs

cd /opt/module/hadoop-3.3.4/sbin
start-dfs.sh

没有error就算是启动成功了
在这里插入图片描述

在resourcemanager的节点(hadoop103)启动yarn

一定注意:是在103上面

cd /opt/module/hadoop-3.3.4/sbin
start-yarn.sh

在这里插入图片描述

验证

验证方式一
在这里插入图片描述

输入

jps

各个虚拟机的节点如果和上面对应出说明启动成功了
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

验证方式二
让我们来到浏览器
在这里插入图片描述
在框框的地方输入

http://hadoop102:9870

在这里插入图片描述

八、配置历史服务器和日志聚集功能

配置历史服务器

修改hadoop102的mapred-site.xml

<!--历史服务器端地址-->
<property>
<name>mapreduce.jobhistory-address</name>
<value>hadoop102:10020</value>
</property>
<!--历史服务器web端地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>

在这里插入图片描述
分发配置

xsync mapred-site.xml

在hadoop102启动历史服务器
启动之前,先把hadoop103上面的yarn给重启了

[tom@hadoop102 hadoop]$ mapred --daemon start historyserver
验证
jps
查看一下是否有

配置日志聚集功能

修改hadoop102下面的yarn-site.xml

<!--开启日志聚集功能-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--设置日志聚集服务器地址-->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!--设置日志保留7天-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>

在这里插入图片描述
分发配置

xsync yarn-site.xml

注意:开启日志聚集功能,需要重新启动NodeManager、RescourceManager和HistoryServer
在hadoop102上面

mapred --daemon stop historyserver

在hadoop103上(停止命令是在$HADOOP_HOME/sbin)

sbin/stop-yarn.sh
sbin/start-yarn.sh

然后重启历史服务器
回到hadoop102

mapred --daemon start historyserver

我们的日志聚集功能就算开启了

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

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

相关文章

ZYNQ - 无DDR固化程序(代码运行在OCM上)

写在前面 ZYNQ固化时&#xff0c;正常情况下都需要DDR参与&#xff0c;但是有时硬件设计时&#xff0c;可能将DDR去掉或设计出错&#xff0c;这将导致ZYNQ无法正常固化&#xff0c;之前有写过一个使用静态链接库进行无DDR固化的文章&#xff0c;当时那个是压缩了FSBL的相关代码…

yolov5剪枝实战3: yolov5-slimming项目运行演示

1. 下载项目文件 从百度网盘下载并解压 网盘地址,文末有链接:包括项目完整源代码、数据集、原理的课件说明等。 解压源码: yolov5-6.1-slimming.zip项目没有从yolov5 github上直接克隆项目文件,而是从百度网盘上下载项目文件并解压,因为yolov5原始的代码是没有带网络剪枝的,…

ElasticSearch - ​开启搜索的新境界

You Know&#xff0c; for Search ElasticSearch官网 开启搜索的新境界 Elasticsearch 是一个开源的搜索引擎&#xff0c;建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库。但是 Lucene 仅仅只是一个库。为了充分…

STM32+ MAX30102通过指尖测量心率+血氧饱和度

一、前言 重要的事情放在最前面&#xff1a;max30102只适用于指尖手指测量&#xff0c;不适用与手腕手指测量&#xff0c;如需做成可穿戴样式选择传感器的小伙伴请pass掉他&#xff0c;因为他只有红光和红外2种光&#xff0c;不够充足的数据源去运算。 由于一些原因&#xff0c…

个人开发者轻松接入支付回调

易支付&#xff08;https://epay.jylt.cc&#xff09;- 个人支付如此简单 随着技术的发展&#xff0c;现在个人构建一个网站的成本越来越低&#xff0c;越来越多的个人开发者拥有了自己的网站。个人搭建网站除了带来成就感之外如果能赚一些额外的收入岂不更好&#xff1f; 事…

多目标优化问题的研究概述(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

ECMAScript

介绍 JavaScript和ECMAScript的区别 html和css的解析在两款浏览器是不同的效果&#xff0c;比如一个页面能在IE解析&#xff0c;但是不能在网景浏览器解析 后面出现了脚本语言&#xff0c;JavaScript&#xff0c;提供了丰富功能&#xff0c;比如输入密码进行正则的判断提示 …

【算法】用动态规划求解背包问题

1.问题描述 有n种物品&#xff0c;每种物品的单件重量为w[i],价值为v[i]。现有一个容量为V的背包&#xff0c;如何选取物品放入背包&#xff0c;使得背包内物品的总价值最大。 下面是本题中我们使用的例子&#xff1a; 有三个物品&#xff0c;第一个物品的重量为3&#xff0c;…

【附源码】Python计算机毕业设计图书销售系统设计

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

用友vs金蝶产品分析(云星空与YonSuite)

产品定位 用友与金蝶二者面对的客户群体是相同的&#xff1a;都是为成长型企业提供一体化服务&#xff0c;由于金蝶云星空发展较早&#xff0c;在部分产品功能上具备一定的先发优势&#xff1b;在产品的架构上&#xff0c;由于YS采用目前最先进的云原生和微服务架构&#xff0…

Bootstrap(一)

目录&#xff1a; &#xff08;1&#xff09;bootstrap容器 1.简单框架使用 2.流体容器 3.固定容器 4.栅格系统 &#xff08;1&#xff09;bootstrap容器 1.简单框架使用 bootstrap-3.3.7、bootstrap-3.3.7-dist 是原码文件&#xff0c;带dist是编译完的&#xff0c;里面…

5.C语言常见运算符及其优先级

运算符 用算术运算符将运算对象&#xff08;也称操作数&#xff09;连接起来的、符合C语言规则的式子&#xff0c;称为C算术表达式。运算对象包括常量、变量、函数等。 例如&#xff1a;a * b / c - 1.5 ‘a’ 运算符的分类 1.双目运算符&#xff1a;即参加运算的操作数有两…

SpringBoot--获取路径中的参数(x-www-form-urlencoded)--方法/实例

原文网址&#xff1a;SpringBoot--获取路径中的参数(x-www-form-urlencoded)--方法/实例_IT利刃出鞘的博客-CSDN博客 简介 本文用示例介绍SpringMVC如何获取路径中的参数。也就是&#xff1a; Content-Type为x-www-form-urlencoded。 代码 Controller BasicController.java…

在线考试系统

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

Prometheus邮件告警

一. 部署Alertmanager&#xff1a; 1. 解压Alertmanager压缩包&#xff1a; [rootnode5 ~]# tar xf alertmanager-0.24.0.linux-amd64.tar.gz -C /usr/local/ 2. 为解压后的文件做软连接&#xff1a; [rootnode5 ~]# ln -sv /usr/local/alertmanager-0.24.0.linux-amd64/ …

SSM整合(三)

redis之简单使用 1.准备工作 1.1 在resource资源文件夹下面创建redis.properties文件,并填写如下内容 #连接端口 redis.port6379 #连接地址 redis.host127.0.0.1 #超时时间&#xff1a;单位ms redis.timeout3000 #授权密码 redis.password #最大连接数&#xff1a;能够同时建…

GUI编程--PyQt5--QLineEdit

文章目录键盘文本输入框文本占位符密码显示与隐藏自动补全输入限制掩码字符光标移动设置文本区域常用编辑功能输入控件&#xff0c;用于捕获用户的信息键盘文本输入框 QLineEdit, 单行&#xff0c;纯文本输入框 # 实例化 文本输入框 le QLineEdit("默认值", windo…

Material Design之CoordinatorLayout 与AppbarLayout与CollapsingToolbarLayout

Material Design 之 CoordinatorLayout 第一次接触CoordinatorLayout 你可能有这些疑问&#xff0c;CoordinatorLayout 到底是个什么玩意儿呢&#xff1f;它到底能帮我们做什么&#xff1f;我们要了解它&#xff0c;肯定是先看官方文档了。文档的第一句话就非常醒目&#xff1a…

高职网络系统管理比赛实例

同一交换机不同端口配置不同vlan&#xff0c;实现同一交换机内不同业务部门隔离。 在路由器中配置斜面的内容 1 输入enableRuijie>enable 2 第一次使用该交换机时&#xff0c;需要设置密码&#xff0c;然后再次确认密码 Please Set the password:*** Please check the pass…

掌握这10个Pandas函数,助你彻底了解数据集

10个帮助你完全理解数据集的Pandas 函数 长按关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 扫码关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 Pandas是用于探索性数据分析 (EDA)的最佳 Python 模块。 许多初级数据科…