【分布式】Hadoop完全分布式的搭建(零基础)
Hadoop完全分布式的搭建
环境准备:
(1)VMware Workstation Pro17(其他也可)
(2)Centos7
(3)FinalShell
(一)模型机配置
0****)安装模板虚拟机,IP地址192.168.10.100、主机名称node1、内存4G、硬盘****40G
网络环境及基础环境准备:
1)修改VMware的网络虚拟器:将子网ip设置在统一的字段,我统一设置为10
图片1
图片2
图片3
点击确定
(2)修改电脑的VMent8:也统一在10这个字段
在搜索栏搜索查看网络连接
图片4
找到VMnet8
图片5
右击,选择属性
图片6
单击Internet协议版本4(TCP/IPv4)
图片7
修改相应的IP地址,默认网关,和刚才虚拟机中的保持统一字段,在本文中统一为10.
添加DNS服务器如图所示
图片8
修改Centos 里的ip,将动态地址改为静态
进入到centos7,用root用户登录,修改ifcfg-ens33文件,将其中BOOTPROTO的参数从动态改为静态,并添加对应的IP,依然与刚才前两步保持统一字段
图片9
vim /etc/sysconfig/network-scripts/ifcfg-ens33
图片10
ping一下百度表示网络可用,若失败则需检查相应的问题。网络要通才可进行后续操作。
图片11
修改主机名称为Master01
vim /etc/hostname
图片12
将文件内容改成Master01
将接下来预计要进行连接的虚拟机ip都入加入到hosts文件,根据自己需要搭建的集群数量决定,本文的Master01用于伪分布式搭建,node1,node2及node3用于完全分布式的搭建,要记录对应的ip地址,以便进行后续操作。
vim /etc/hosts
图片13
(4)连接finallshell
打开准备好的远程连接软件,我们后续将都在此进行操作,因为可直接粘贴复制和传送文件(用xshell也可),此处可用root登录也可用普通用户,后续因为yarn的使用,需要用普通用户连接。根据自己的主机ip和密码连接。
图片14
连接成功
图片15
(5)更换阿里云镜像:执行以下命令
a.备份官方的原yum源的配置
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
b.下载Centos-7.repo文件
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
c.脚本配置本地源
找个目录,创建脚本文件:
本人以/root/目录为例
vi /root/auto_aliyun.sh
编写如下内容:
#!/bin/bash# 备份官方的原yum源的配置mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup# 下载Centos-7.repo文件,或者curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo,取决于你是否有wget的命令wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo# 清除yum缓存yum clean all# 缓存本地yum源yum makecache
按ESC。输入:wq保存,完成镜像阿里云源的脚本文件的编写
d.赋予脚本可执行的权限
chmod +x /root/auto_aliyun.sh
e.执行脚本文件,即可
/root/auto_aliyun.sh
图片16
图片17
f.安装epel-release
yum install -y epel-release
图片18
(6)关闭防火墙
systemctl stop firewalldsystemctl disable firewalld.service
图片19
(7)将hduser用户(你自己的普通用户)赋予root权限
创建hduser用户,并修改hduser用户的密码
useradd hduser(创建的用户名)passwd 123456(创建的用户密码)
配置hduser用户具有root权限,方便后期加sudo执行root权限的命令
vim /etc/sudoers
找到图中位置添加:
图片20
保存并退出
在/opt目录下创建module、software文件夹
mkdir /opt/modulemkdir /opt/software
修改module、software文件夹的所有者和所属组均为hduser用户
chown hduser:hduser /opt/modulechown hduser:hduser /opt/software
查看module、software文件夹的所有者和所属组
图片21
测试hduser已拥有root权限
图片22
(8)卸载环境自带jdk
查询jdk
jdk rpm -qa | grep -i java
图片23
卸载jdk
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
注意:如果你的虚拟机是最小化安装不需要执行这一步。
- rpm -qa:查询所安装的所有rpm软件包
- grep -i:忽略大小写
- xargs -n1:表示每次只传递一个参数
- rpm -e –nodeps:强制卸载软件
查询
图片24
重启虚拟机
[root@Master01?~]# reboot
模型机配置完成
(二)完全分布式搭建
(1)三台虚拟机node1,node2,node3的准备
克隆三台虚拟node1,node2,node3(名称要与前文hosts中一致,注意是完全克隆)
图片25
分别修改三台机器的ip和主机名并重启,检查是否修改完成,并检查网络是否可用
Node1
图片26
图片27
Node2
图片28
图片29
Node3
图片30
图片31
将三台主机均按前面方法连接finalshell
图片32
图片33
图片34
(2)给node1安装jdk
将下好的jdk和hadoop利用finallshell传到node1中,在finallshell的文件中找到之前建立的software文件夹,直接拖入。
图片35
进入到software文件夹,查看tar包已经存在。
图片36
解压缩:
tar -zxvf jdk-8u202-linux-x64.tar.gz -C /opt/module/
图片37
进入到module目录,已经存在jdk。
图片38
(3)配置JAVA_HOME
在/etc/profile.d/中创建my_env.sh,填写以下内容:
vim /etc/profile.d/my_env.sh
图片39
保存后运行,java配置成功。
source /etc/profile
执行java语句出现以下内容
图片40
(4)安装hadoop:
解压hadoop至/etc/module
tar -zxvf hadoop-3.2.4.tar.gz -C /opt/module/
图片41
进入到hadoop中配置环境变量
图片42
在之前创建的my_env.sh中添加以下内容
vim /etc/profile.d/my_env.sh
图片43
source /etc/profile?
运行
命令行输入hadoop,出现以下内容配置完成
图片44
(5)将node1中的jdk和hadoop复制到node2和node3上
图片45
图片46
集群分配脚本的编写:
创建一个脚本xsync,并将其配置在环境变量中,内容如下
注意是在hduser用户的bin目录下:
图片47
建立一个xsync文件,输入以下内容保存
#!/bin/bash#1. 判断参数个数
if?[?$#?-lt?1?]
then
????echo?Not?Enough?Arguement!
????exit;
fi#2. 遍历集群所有机器
for?host?in?node1?node2?node3
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
注意以下内容修改成自己对应的主机名字
图片48
进入到相应的目录,找到相应的bin目录,查询刚才建立的xsync文件,注意是hduser下的bin目录。
图片49
vim xsync
图片50
赋予xsync相应权限
chomd 777 xsync
发现文件变绿
图片51
利用xsync脚本将环境变量分发到node2和node3中
sudo ./bin/xsync /etc/profile.d/my_env.sh
图片52
让环境变量生效
[hduser@node2?bin]$ source /etc/profile[hduser@node2?opt]$ source /etc/profile
-
ssh免密登录设置
cd .ssh/
cat known_hosts
图片53
[hduser@node1?.ssh]$ssh-keygen -t rsa?
然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)
图片54
将公钥拷贝到要免密登录的目标机器上
图片55
ssh node2后免密登录成功
图片56
第三台机器同理
图片57
(三)配置集群
(1)核心配置文件
cd $HADOOP_HOME/etc/hadoopvim core-site.xml
图片58
core-site.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><!-- 指定 NameNode 的地址 --><property><name>fs.defaultFS</name><value>hdfs://node1:8020</value></property><!-- 指定 hadoop 数据的存储目录 --><property><name>hadoop.tmp.dir</name><value>/opt/module/hadoop-3.2.4/data</value></property><!-- 配置 HDFS 网页登录使用的静态用户为 atguigu --><property><name>hadoop.http.staticuser.user</name><value>hduser</value></property></configuration>
图片59
(2)HDFS 配置文件
配置 hdfs-site.xml
vim hdfs-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><!-- nn web 端访问地址--><property><name>dfs.namenode.http-address</name><value>node1:9870</value></property><!-- 2nn web 端访问地址--><property><name>dfs.namenode.secondary.http-address</name><value>node3:9868</value></property></configuration>
图片60
(3)YARN 配置文件
配置 yarn-site.xml
vim yarn-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><!-- 指定 MR 走 shuffle --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!-- 指定 ResourceManager 的地址--><property><name>yarn.resourcemanager.hostname</name><value>node2</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>
图片61
(4)MapReduce 配置文件
配置 mapred-site.xml
vim mapred-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><!-- 指定 MapReduce 程序运行在 Yarn 上 --><property><name>mapreduce.framework.name</name><value>yarn</value></property></configuration>
图片62
****5)****在集群上分发配置好的 Hadoop 配置文件
xsync /opt/module/hadoop- 3.2.4/etc/hadoop/
图片63
6)去 node2和 node3上查看文件分发情况
cat /opt/module/hadoop-3.2.4/etc/hadoop/core-site.xml
编辑workers文件
vim?/opt/module/hadoop-3.2.4/etc/hadoop/workers
在该文件中增加如下内容:
图片64
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件
xsync /opt/module/hadoop-3.2.4/etc
启动集群
(1)如果集群是第一次启动,需要在node1节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)
[hduser@node1?hadoop-3.2.4]$ hdfs namenode -format
图片65
(2)启动HDFS
[hduser@node1?hadoop-3.2.4]$ sbin/start-dfs.sh
图片66
(3)****在配置了ResourceManager的节点(node2)****启动YARN
[hduser@node1?hadoop-3.2.4]$ sbin/start-yarn.sh
Web端查看HDFS的NameNode
浏览器中输入:http://node1:9870
(4)查看HDFS上存储的数据信息
Web端查看YARN的ResourceManager
浏览器中输入:http://node2:8088
(b)查看YARN上运行的Job信息
验证HDFS是否成功启动,可以使用jps命令查看Java进程,确认NameNode和DataNode等进程是否运行。
图片67
图片68
图片69
完全分布式搭建完成。
相关文章:

【分布式】Hadoop完全分布式的搭建(零基础)
Hadoop完全分布式的搭建 环境准备: (1)VMware Workstation Pro17(其他也可) (2)Centos7 (3)FinalShell (一)模型机配置 0****)安…...

基于Java+Swing+Mysql实现人事管理信息系统
基于JavaSwingMysql实现人事管理信息系统 一、系统介绍二、功能展示1.用户登陆2.用户注册3.员工信息添加、删除4.员工信息查询、修改5.部门管理6、员工考核 三、数据库四、其它1.其他系统实现五.获取源码 一、系统介绍 系统功能:用户登陆、用户注册、员工信息添加、…...
DeepSeek与ChatGPT:会取代搜索引擎和人工客服的人工智能革命
云边有个稻草人-CSDN博客 在众多创新技术中,DeepSeek和ChatGPT无疑是最为引人注目的。它们通过强大的搜索和对话生成能力,能够改变我们与计算机交互的方式,帮助我们高效地获取信息,增强智能服务。本文将深入探讨这两项技术如何结合…...

企业级RAG开源项目分享:Quivr、MaxKB、Dify、FastGPT、RagFlow
企业级 RAG GitHub 开源项目深度分享:Quivr、MaxKB、Dify、FastGPT、RagFlow 及私有化 LLM 部署建议 随着生成式 AI 技术的成熟,检索增强生成(RAG)已成为企业构建智能应用的关键技术。RAG 技术能够有效地将大型语言模型ÿ…...

js基础知识总结
1、js数据类型有哪些?存储区别 js基础类型及引用类型存储区别代码示例如下: // 基本数据类型 let a 10; let b a; // b 是 a 的一个副本 b 20; // 修改 b 不会影响 …...

LearnOpenGL——高级OpenGL(下)
教程地址:简介 - LearnOpenGL CN 高级数据 原文链接:高级数据 - LearnOpenGL CN 在OpenGL中,我们长期以来一直依赖缓冲来存储数据。本节将深入探讨一些操作缓冲的高级方法。 OpenGL中的缓冲本质上是一个管理特定内存块的对象,它…...

vue脚手架开发打地鼠游戏
游戏设计: 规划游戏的核心功能,如场景、随机出现的地鼠、计分系统、游戏时间限制等。简单设计游戏流程,包括开始界面、游戏进行中、关卡设置(如不同关卡地鼠出现数量、游戏时间等)、关卡闯关成功|失败、游戏结束闯关成…...
uniapp 连接mqtt
1:下载插件 npm install mqtt 2:创建 mqtt.js /* main.js 项目主入口注入实例 */ // import mqttTool from ./lib/mqttTool.js // Vue.prototype.$mqttTool mqttTool/* 使用范例见 /pages/index/index.vue */ // mqtt协议:H5使用ws/wss APP-…...
EX_25/2/19
1. 封装一个 File 类,用有私有成员 File* fp 实现以下功能 File f "文件名" 要求打开该文件 f.write(string str) 要求将str数据写入文件中 string str f.read(int size) 从文件中读取最多size个字节,并将读取到的数据返回 析构函数 …...

Breakout Tool
思科 CML 使用起来还是很麻烦的,很多操作对于习惯了 secure crt 或者 putty 等工具的网络工程师都不友好。 Breakout Tool 提供对远程实验室中虚拟机控制台与图形界面的本地化接入能力,其核心特性如下: Console 访问:基于 Telnet…...

【大模型】DeepSeek:AI浪潮中的破局者
【大模型】DeepSeek:AI浪潮中的破局者 引言:AI 新时代的弄潮儿DeepSeek:横空出世展锋芒(一)诞生背景与发展历程(二)全球影响力初显 探秘 DeepSeek 的技术内核(一)独特的模…...
Kafka 简介
Kafka 简介 Apache Kafka 是一个开源的分布式流处理平台,广泛应用于实时数据流处理、日志管理、消息传递等场景。Kafka 最初由 LinkedIn 开发,并于 2011 年捐献给 Apache 软件基金会。 Kafka 的设计目标是高吞吐量、低延迟和高可用性,它能够…...
什么是掉期(Swap)?——金融衍生品的关键工具(中英双语)
什么是掉期(Swap)?——金融衍生品的关键工具 引言 掉期(Swap) 是金融市场中最重要的衍生品之一,它允许两方交换未来的现金流,以优化融资成本、规避利率或汇率风险,甚至进行投机交易…...
深入解析 Vue 项目中的缓存刷新机制:原理与实战
目录 前言1. Demo2. 知识拓展 前言 在 Vue 项目中,缓存通常用于存储用户信息、角色权限、系统设置等,以提高页面加载速度并减少 API 请求 这里使用 web-storage-cache 作为封装的本地存储工具,支持 localStorage 和 sessionStorage 方式存储…...

【C++】 Flow of Control
《C程序设计基础教程》——刘厚泉,李政伟,二零一三年九月版,学习笔记 文章目录 1、选择结构1.1、if 语句1.2、嵌套的 if 语句1.3、条件运算符 ?:1.4、switch 语句 2、循环结构2.1、while 语句2.2、do-while 语句2.3、 for 循环2.4、循环嵌套…...

【异常错误】pycharm debug view变量的时候显示不全,中间会以...显示
异常问题: 这个是在新版的pycharm中出现的,出现的问题,点击view后不全部显示,而是以...折叠显示 在setting中这么设置一下就好了: 解决办法: https://youtrack.jetbrains.com/issue/PY-75568/Large-stri…...
2.19c++练习
1.封装一个mystring类 拥有私有成员: char* p int len 需要让以下代码编译通过,并实现对应功能 mystring str "hello" mystring ptr; ptr.copy(str) ptr.append(str) ptr.show() 输出ptr代表的字符串 ptr.compare(str) 比较ptr和…...
【为什么使用`new DOMParser`可以保持SVG命名空间】
为什么使用new DOMParser可以保持SVG命名空间: 一、命名空间基础概念 1. XML命名空间定义 <svg xmlns"http://www.w3.org/2000/svg"><!-- 此元素及其子元素属于SVG命名空间 --><rect x"10" y"20"/> </svg>…...

【DL】浅谈深度学习中的知识蒸馏 | 输出层知识蒸馏
目录 一 核心概念与背景 二 输出层知识蒸馏 1 教师模型训练 2 软标签生成(Soft Targets) 3 学生模型训练 三 扩展 1 有效性分析 2 关键影响因素 3 变体 一 核心概念与背景 知识蒸馏(Knowledge Distillation, KD)是一种模…...

应急响应(linux 篇,以centos 7为例)
一、基础命令 1.查看已经登录的用户w 2.查看所有用户最近一次登录:lastlog 3.查看历史上登录的用户还有登录失败的用户 历史上所有登录成功的记录 last /var/log/wtmp 历史上所有登录失败的记录 Lastb /var/log/btmp 4.SSH登录日志 查看所有日志:…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...