Hadoop 3.1.3 分布式集群搭建(全面超详细的过程)——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项
Hadoop是一个开源的、可运行与Linux集群上的分布式计算平台,用户可借助Hadoop存有基础环境的配置(虚拟机安装、Linux安装等),在之前Hadoop集群搭建,配置和测试学习的时候,碰到过很多次,因为安装集群遇到过各种稀奇古怪的问题,导致小北的兴趣大大降低。并且小北自身也有很多问题,在之前的学习过程中。所以这一次写一篇完整的安装教程,分享给友友们如何搭建~
前言
Hadoop是一个开源的、可运行与Linux集群上的分布式计算平台,用户可借助Hadoop存有基础环境的配置(虚拟机安装、Linux安装等),在之前Hadoop集群搭建,配置和测试学习的时候,碰到过很多次,因为安装集群遇到过各种稀奇古怪的问题,导致小北的兴趣大大降低。并且小北自身也有很多问题,在之前的学习过程中。所以这一次写一篇完整的安装教程,分享给友友们如何搭建~
一、虚拟机的安装
VMware (Virtual Machine ware)是一个“虚拟PC”软件公司,提供服务器、桌面虚拟化的解决方案。
使用的虚拟软件:VMware17
VMware17软件的安装包与安装教程可参考:新手教程 | 2024年最新Vmware17安装教程及许可证(详细图文)_vmware许可证-CSDN博客文章浏览阅读4.5w次,点赞90次,收藏190次。重新装电脑后,安装虚拟机VMware Workstation 17 Pro是VMware公司为专业用户打造的一款虚拟化软件。它可以在一台计算机上模拟运行多个操作系统,包括Windows、Linux、macOS等,而且每个操作系统都可以拥有完全独立的硬件配置和网络环境,互不干扰。这使得开发人员、测试人员和教师等用户可以在同一台计算机上同时进行多个项目,大大提高了工作效率。_vmware许可证https://blog.csdn.net/weixin_73609038/article/details/137744136
二、Linux系统安装
1.环境准备
VMware17 pro
Centos7镜像文件,下载地址:阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区阿里巴巴开源镜像站,免费提供Linux镜像下载服务,拥有Ubuntu、CentOS、Deepin、MongoDB、Apache、Maven、Composer等多种开源软件镜像源,此外还提供域名解析DNS、网络授时NTP等服务,致力于为互联网用户提供全面,高效和稳定的基础服务。https://developer.aliyun.com/mirror/?lang=zh-CN
法一:
1、进入网址后到此界面,点击centos
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
到此,点击下载地址
进入如下界面选择要准备的centos版本号,这边我选择的是centos 7.9 2009版本然后点击isos ,进入镜像版本选择阶段
点击x86——64位进行版本选择下载
下载CentOS系统镜像时,会有三个镜像版本可供选择,分别是CentOS ISO,Everything ISO,Minimal ISO他们的区别如下:
DVD ISO:是标准安装盘,一般下载这个就可以了,里面包含大量的常用软件,大部分情况下安装时无需再在线下载,体积为4G;
Minimal ISO:精简版本,包含核心组件,体积才600多MB;
Everything ISO:顾名思义,包含了所有软件组件,当然体积也庞大,高达7G。对完整版安装盘的软件进行补充,集成所有软件;
NetInstall ISO:网络安装镜像;
这边小北选择的是第一个————centos-7-x86_64-DVD-2009.iso 版,版本够用就好啦~
法二:
进入阿里云官方镜像站,点击OS镜像,在弹出的下载框中,发行版选择centos,版本选择7(x86_64-DVD-1908),下载地址会自动填入,点击下载按钮即可
2.虚拟机安装
在C盘外的其他盘创建文件架
为即将安装的虚拟机做好准备,安装一个虚拟机所需存储空间会相对较大,放到C盘很容易导致储存空间过大,让电脑陷入崩溃
创建文件夹centos
2.1 新建虚拟机,选择自定义安装,点击下一步。
点击下一步
选择稍后安装操作系统
选择客户机操作系统为Linux,版本号选择为 centos 7 64位
虚拟机名称分别为:bigdata1 (bigdata2 bigdata3),
安装目录选择为咱们刚刚创建的文件夹,点击下一步
处理器配置可以根据自己需求来,自己安排:D:\centos\bigdata1
(处理器内核总数越高,处理速度越快,但不建议超过4个,要根据自己物理机实际资源分配)
桥接网络:相当于虚拟机和宿主机连在一台Hub上;虚拟机必须配置IP地址,子网掩码,网关,DNS等,而且必须和宿主机处于同一网段。配置好之后,虚拟机能够联通宿主机和访问网络,实际上就相当于一台主机;
NAT:平时用的较少,这种情况下虚拟机不用手动配置IP地址等;
仅主机模式:几乎没有过,相当于一个封闭网络,不能访问网络,据说病毒测试时很牛掰。
选择使用第二个NAT模式,点击下一步
选择默认推荐,点击下一步
选择默认推荐,点击下一步
选择创建新虚拟磁盘,点击下一步
默认选项,点击下一步
磁盘文件名默认即可,点击下一步
(路径:C:\Users\支一郎\Documents\Virtual Machines\bigdata1)
点击自定义硬件,再点击新CD/DVD(IDE),选择使用ISO映像文件,
点击浏览,选择刚在阿里云下载的镜像文件,选择好后点击关闭即可
点击完成
三、Centos系统安装
3.1开启虚拟机,出现如下界面,点击开启此虚拟机
3.2安装 CentOS7
用键盘上的方向键选择第一个选项,按Enter键,出现提示后再按Enter键,系统开始启动安装程序
(Ctrl+Alt可以退出虚拟机控制)
(鼠标拉到最下面)选择中文,简体中文,点击下一步
点击软件选择,选择带GUI的服务器,点击上面的完成
点击安装位置
选择自动配置分区,点击完成
点击网络和主机名
将以太网开关打开,进行网络连接(记得配置和修改主机名:bigdata1)
硬件地址 00:0C:29:97:43:E3
速度 1000 Mb/s
IP地址 192.168.96.128
子网掩码 255.255.255.0
默认路由 192.168.96.2
DNS 192.168.96.2
点击开始安装,(安装完成后)接着点击root密码
给root用户设置密码(要记住,后面登录系统要用),点击完成,建议设置为(123456)
进度条加载完后,点击重启
点击LICENSE INFORMATION,进行协议勾选。
勾选同意许可协议,点击完成
点击完成配置
(账号)
(密码)
(开始使用)
开机后输入root账号和密码进入系统,自己选择语言,日期之后如下图所示:
现在就安装完毕了
(拓展:可略过)四、VMware 搭建centos虚拟机网络设置
首先,默认已经装好系统(相关文档很多,此处没太大难点),此时,可以看到宿主机多了两个网络分别是VMnet1和VMnet8
实际上,VMware帮我们新建了3个网络。这3个网络也是这篇日志需要总结的对象。这3个网路对应3种连接方式。
在分析这3种连接方式前,需要明确一个知识点。即虚拟机并非一个实体计算机,在这个问题里,即虚拟机没有真实的物理网卡。那么它的一切对外通信,都一定建立在宿主机的物理网卡上。
4.1简介这3种模式含义及设置
桥接模式下,宿主机物理网卡和虚拟网卡在拓扑图上处于同等地位,物理网卡和虚拟网卡相当于处于同一个网段(可以理解为新接入了一台设备,宿主机和虚拟机是完全平等的)。因此,两个网卡的IP地址也要设置为同一网段。这种模式下,需要手动配置ip等信息。在正式配置前,确认以下操作:
4.2法一:桥接模式-VMnet0
(1)宿主机网络属性中相关选项已勾选
(2)如果宿主机有多个网口,这里一定要手动选择实际上网的网口(VMware->编辑)
(3)配置虚拟机网络配置文件
①先获取宿主机网络连接的详细信息
②然后将上述信息配置到网络配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" # 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="ea3b61ed-9232-4b69-b6c0-2f863969e750" DEVICE="ens33" ONBOOT="yes" # 以下是新增,其实和windows里设置固定ip实质是一样的,只是这里没有图形界面 IPADDR="X.X.X.218" # 自定义虚拟机的ip地址,必须与主机在同一网段,不能和已有Ip冲突 NETMASK="255.255.255.0" # 设置子网掩码,跟宿主机一样 GETWAY="X.X.X.254" # 默认网关,跟宿主机一样 DNS1="X.X.X.25" # DNS,跟宿主一样
最后将网关信息和DNS服务器地址分别添加到对应文件(个人感觉上述文件已经包含完整信息,不需要再补充什么。但实测如果不进行下面操作,无法上网)
③补充网关信息
vi /etc/sysconfig/network
# Created by anaconda NETWORKING=yes HOSTNAME=zhangsan # 名字随便写 GATEWAY=X.X.X.254 # 默认网关和宿主机相同
④补充DNS服务器(关于DNS可查看小北身边的案例:通过一个网络错误简述DNS )
某天下午,有一位友友说他的网络突然很慢,我随即点开百度,访问不了。试了其他网站也不行。浏览器提示错误是DNS_PROBE_FINISHED_BAD_CONFIG。我看了下网络连接图标,一切正常。并且微信也能正常发消息。我又试了试手机连接无线,发现一切正常,网页也可以访问。通过浏览器报错,容易想到可能是DNS服务器出问题了。但这一切现象该如何解释呢?
第一步:DNS简介
DNS-Domain Name System 直译就是域名系统,就是说这个系统会给你提供域名服务。这个世界,越是基础且重要的东西,我们越是容易忽略它的存在。因为它们让你很轻松地使用,以至于感受不到它们的存在。比如空气,比如这个DNS。
我们在浏览器输入www.xx.com的时候,计算机其实是无法理解的。网络通信是基于IP地址寻址的。因此,就需要有一张映射表,把我们输入的域名转换成对应的IP地址。DNS实际上就是在维护这样一个映射资源。
实际的DNS是一种多层、分布式的数据库。之所以这样设计,主要就是考虑其请求量大、请求用户分部广(全球各地)。为了高效、稳定地提供服务。其结构示意如下:
基于IPV4的根域名服务器全球共13台,10台在美国(1台主根服务器,9台辅根)。后来IP不够用了,扩充到IPV6,有2台增加的根服务器在中国。层级越高的服务器其管理的数据越少,就像总经理只需要管几个部长。除了图中这些域名服务器,还有一个离我们更近的-本地域名服务器。
基于以上知识,小北可以这样描述一个网页请求:
之所以能做到有值直接返回,是因为域名服务器会进行一定缓存。之前请求过的域名会被短期存储。
第二步:现象分析
现在,回到我们一开始提到的各种现象。
(1)无法访问网页
因DNS服务器宕机或其他原因,导致你无法正常使用域名解析服务,进而网页无法访问。就像你和翠花打电话,结果通讯录出问题,又不记得号码,那这个电话肯定打不出去的。这里我通过手动指定DNS地址解决了问题。其他情况请搜索相应文章解决。
(2)微信、QQ等聊天工具可以正常通讯
这些即时通讯工具,都依靠一个中间服务器。这里用户的数量太大,状态变化大(同时在线的很多,下一时刻也可能不在线),所以,B用户不可能拥有一个固定IP让A用户去联系。所以DNS那一套用不着。而为了保证信息发送的准确性,应用必然需要维护一个自己的协议。
或者说,微信、QQ在应用内自己维护了一个映射关系。能让你准确地给你的好友张三发送消息。微信名和QQ号不能重复也是协议能实现的基础,就像IP是唯一的一样。
(3)手机能访问网页
其实,不管你是PC还是手机或是平板,你要想访问网页,都是需要域名解析的。之所以这个场景下,手机能正常访问网页,一定是手机能正常使用域名解析服务。我将手机无线网络设置为静态,发现直接出现了两个域名服务器地址。我猜想,手机系统的DNS管理进程监测到自动获取DNS出错,会使用默认的固定DNS。因此,手机可以正常访问网页。
4.3法二:NAT(Network Address Translation)模式-VMnet8
虚拟机借助宿主机的网络地址转换功能上网,我们可以先看下此模式下几个网络ip地址
名称 地址 宿主机真实地址 10.X.X.217 宿主机虚拟地址VMnet8 192.168.217.1 虚拟机地址 192.168.217.129 由以上易知,虚拟机地址和宿主机不在一个网段。因此,局域网内其他主机不能和虚拟机建立连接。然而宿主机却可以,关键点就在于宿主机还有一个虚拟网络和虚拟机网络在一个网段。反过来,虚拟机也正是借助了这个虚拟网络(VMware 192.168.217.1)来和宿主机进行通信,进而访问外网。相当于宿主机虚拟了一个路由器。桥接模式下,虚拟机和宿主机是同一个层次的;NAT模式下,虚拟机在更低一个层次。
NAT 模式网络结构示意图
NAT模式下,如果设置自动分配地址。那就只需要①将/etc/sysconfig/network-scripts/ifcfg-ens33文件中BOOTPROTO="static" 改成"dhcp"。②VMware网络设置里更改相应选项
当然,NAT模式相当于虚拟了一个路由器,那接入路由器的虚拟机自然也可以设置固定ip。只是注意,此时网络基本信息将不再是宿主机真实网络,而是下面的“路由器”信息这里没有DNS服务器地址,可以设置一些公共的服务器地址,如8.8.8.8
4.4法三:Host-Only-VMnet1
这种模式下,仅建立虚拟机和宿主机之间的连接。隔绝了外部网络,使得内网中的这台虚拟机更安全。此时,宿主机也会有一个虚拟的路由器,用于虚拟机和宿主机进行通信。只是,虚拟机不能通过宿主机访问外部网络。
补充:
(1)桥接模式时,有一个可选项-复制物理网络连接状态。这个主要针对移动设备,如笔记本电脑。宿主机在有线网络和无线网络之间切换,对应的网络信息大概率会发生变化。如果没有勾选该选项,自动地址分配服务会重新分配,这时虚拟机的地址可能会改变。
(2)虚拟机可以访问外网,宿主机可以ping通虚拟机,但虚拟机不能ping通宿主机。主要是防火墙的问题,在防火墙设置里启用一条规则即可
(3)Ubuntu系统的设置原理也基本一致,只是相关的文件名称和位置不太一样。
五、静态网络配置( Centos修改主机名hostname与ip地址)
1.查看网络是否连通(出现问题!!!)
ping www.baidu.com
(正常)
2.安装net-tools
su
先进入root:
yum upgrade
yum install net-tools
3.查看ens33的Mac地址(ether后面)
ifconfig
bigdata1:00:0c:29:97:43:e3
bigdata2:00:0c:29:4d:f4:2b
bigdata3:00:0c:29:b6:68:37
4.查看ip地址的起始和结束地址
5.修改网络配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33
虚拟机克隆配置
克隆虚拟机(右键相应虚拟机->管理->克隆)创建完整克隆
克隆虚拟机名称和位置(等待克隆完成)
如法炮制:bigdata2 和 bigdata3:
(1)修改主机名hostname:
vim /etc/hostname 进入hostname文件
改完之后按“Esc”退出编辑模式,然后输入“:wq”写入并保存退出(w写入,q保存退出)
or
hostnamectl set-hostname bigdata2/3 reboot //修改主机名后需重启虚拟机
(2)修改ip地址
执行以下命令
vim /etc/sysconfig/network-scripts/ifcfg-ens33
网络配置文件修改(标红需要修改,IP自己设置,mac用步骤5查到地址,网关为ip地址最后改为2)
BROWSER_ONLY="no" BOOTPROTO="static" 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" HWADDR="00:0C:29:97:43:e3" UUID="3c59f69e-1b39-437b-a31b-2898a2ea1399" IPADDR="192.168.86.128(129\130)" GATEWAY="192.168.96.2" DNS1="8.8.8.8" DNS2="192.168.96.2" DEVICE="ens33" ONBOOT="yes"
(3)修改完成后,记住一定要执行命令 “reboot” 重启
重新登录后,执行命令 “ifconfig” 查看ip
mac地址为2步骤的enter值
ip地址参照4步骤自行选择(必须在起始和结束的范围内)
子网掩码默认设置为255.255.255.0
网关的值为将ip地址中最后一段的值改为2
DNS使用谷歌提供的免费dns1:8.8.8.8加上之前查看ens33的Mac地址(ether后面)HWADDR="00:0C:29:97:43:e3"
(动态的)修改为“static"(静态的)
如果为"yes"则不用修改!
6.重启网络服务,查看是否配置成功
systemctl restart network
ping www.baidu.com
7.重启虚拟机后,查看是否连通网络(ip地址并未改变,且能连通网络)
reboot
ifconfig
ping www.baidu.com
六、配置hosts文件和ssh免密登录
1.修改hosts配置文件(所有虚拟机都需要配置此文件)
bigdata1\bigdata2\bigdata3都需要配置这个文件!!!
vi /etc/hosts
192.168.96.128 bigdata1
192.168.96.129 bigdata2
192.168.96.130 bigdata3
2.生成密钥文件(四次回车)
ssh-keygen -t rsa
2.将本机公钥文件复制到其它虚拟机上(接收方需先开机)
在bigdata1上执行,先输入yes,后输入对应主机的密码,多台虚拟机配置操作相同
ssh-copy-id bigdata1
ssh-copy-id bigdata2
ssh-copy-id bigdata3
出现问题:connect to host bigdata2 port 22: Connection refused
免密登录出现port 22: Connection refused一般有两种情况
(1)可能ssh未安装(2)ip、hosts、hostname未设置正确
具体操作:
1、检查ssh是否安装
ps -e | grep ssh
未安装的话进行安装
yum -y install openssh-clients
2、检查IP是否设置正确vim /etc/sysconfig/network-scripts/ifcfg-ens33
不同版本的CentOS的ens3X不同具体按实际操作即可
3、检查hosts是否设置正确
vim /etc/hosts
4、检查hostname是否设置正确
vim /etc/hostname
5、重启全部虚拟机
reboot
6、重启之后尝试免密登录即可
在虚拟机bigdata2、bigdata3都需要执行,保证三台主机都能够免密登录
我遇到这个问题查了很多方法都没有解决是因为没有按照正确的流程来操作,按照正确的流程进行操作基本上没什么问题7、查看是否成功免密登录
七、集群配置
1.在所有虚拟机根目录下新建文件夹export,export文件夹中新建data、servers和software文件
mkdir -p /export/data
mkdir -p /export/servers
mkdir -p /export/software
2.准备安装包
hadoop-2.7.4.tar.gz
jdk-8u161-linux-x64.tar.gz
3.下载安装软件Xshell
(友友们,我们这边不选择“root”的用户名,请大家用自己注册好的用户名,小北的就是“xiaobei”)
打开Xshell后点击文件并选择新建,名称填bigdata1,主机填写bigdata1的IP地址,再点击用户身份验证,把bigdata1的账号,密码输入,就可以通过Xshell控制虚拟机,方便后续软件的传输。
(重复步骤新建会话控制bigdata2、bigdata3)
4.在Xshell先进入software文件内,然后下载rz命令,并使用rz命令进行文件上传,此时会弹出上传的窗口,选择要上传的文件,点击确定即可将本地文件上传到Linux上。
cd /export/software
yum -y install lrzsz
rz
(传输完成)
5.安装jdk (以下使用XShell软件)
在使用XShell时必须得打开VMware虚拟机,不然XShell连接不了虚拟机
注意:
小北个人习惯在当前用户下建立二个文件夹,一个software来存放安装包,一个module是存解压的文件。
su mkdir -p /opt/software mkdir -p /opt/module
(以防万一)使用如下命令删除当前目录下的所有文件:
rm -rf *
(一)卸载现有JDK
注意:安装JDK前,一定确保提前删除了虚拟机自带的JDK。(所有虚拟机都要操作)
注意:如果虚拟机时安装的桌面版本的linux。需要卸载虚拟机中的JDK。这是安装桌面版本自带的。如果你的虚拟机是最小化安装不需要执行这一步。
rpm -qa
grep -i java
xargs -n1 rpm -e --nodeps
解释字段:
- rpm -qa:查询所安装的所有 rpm 软件包
- grep -i:忽略大小写
- xargs -n1:表示每次只传递一个参数
- rpm -e –nodeps:强制卸载软件
退出:Ctrl+C,可能直接重启
若是没有重启虚拟机,请输入代码重启一下,再点击:
reboot
XFTP - NetSarang Websitehttps://tt.nncywl.cn/
(二)用XShell传输工具(XFTP)将JDK导入到opt目录下面的software文件夹下面(先cd /opt/software/,进入software文件,然后点击红色圈xftp软件,把jdk移动过来)
法一:X shell自带的ZMODEM发送文件:
cd /opt/software
法二:可以用XFTP 工具进行文件的传输:(可以检测法一是否传输完成文件)
6.(也可)在Linux目录下查看是否上传成功:
ls /opt/software/
7.解压 JDK 到/opt/module 目录下
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
8.配置 JDK 环境变量
(1)新建/etc/profile.d/my_env.sh 文件
sudo vim /etc/profile.d/my_env.sh
(2)添加如下内容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
i
(3)保存后退出
:wq
(4)source 一下/etc/profile 文件,让新的环境变量 PATH 生效
source /etc/profile
9.测试 JDK 是否安装成功
java -version
出现以下结果表示安装成功:
10.安装hadoop
Hadoop 下载地址:(或者友友们可以在小北上传的资源中下载)Index of /dist/hadoop/common/hadoop-3.1.3https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/
(1)用 XShell 文件传输工具将 hadoop-3.1.3.tar.gz 导入到 opt 目录下面的 software 文件夹下面(同jdk-8u212-linux-x64.tar.gz传输导入时候一样)
(2)在Linux目录下查看:
ll /opt/software/
(3)将hadoop-3.1.3解压到module目录下:
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
出现问题:(权限不够)
su
再试试,查看是否解压成功
ls /opt/module/hadoop-3.1.3
11.将 Hadoop 添加到环境变量
(1)获取 Hadoop 安装路径
pwd
(2)打开/etc/profile.d/my_env.sh 文件
sudo vim /etc/profile.d/my_env.sh
(3)将以下内容添加文件中
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
(4) 查看结果
(5)让修改后的文件生效
source /etc/profile
(6)测试是否安装成功
hadoop version
12.hadoop运行模式
1.Hadoop 官方网站:Apache Hadoophttps://hadoop.apache.org/
2.Hadoop 运行模式包括:
本地模式、伪分布式模式以及完全分布式模式。(1)本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。
(2)伪分布式模式:也是单机运行,但是具备 Hadoop 集群的所有功能,一台服务器模拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。
(3)完全分布式模式:多台服务器组成分布式环境。生产环境使用。完全分布式运行模式(开发重点)
安装所需要的条件:
1.准备 3 台客户机(关闭防火墙、静态 IP、主机名称)
2.安装 JDK
3.配置环境变量
4.安装 Hadoop
5.配置环境变量编写集群分发脚本 xsync
- 在/home/xiaobei(自己的账户名)/bin 目录下创建 xsync 文件
cd /home/xiaobei mkdir bin cd bin vim xsync
在文件中编写以下内容:
#!/bin/bash if [ $# -lt 1 ] then echo "No Args Input..." exit ; fi case $1 in "start") echo " =================== 启动 hadoop 集群 ===================" echo " --------------- 启动 hdfs ---------------" ssh bigdata1 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh" echo " --------------- 启动 yarn ---------------" ssh bigdata2 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh" echo " --------------- 启动 historyserver ---------------" ssh bigdata1 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver" ;; "stop") echo " =================== 关闭 hadoop 集群 ===================" echo " --------------- 关闭 historyserver ---------------" ssh bigdata1 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver" echo " --------------- 关闭 yarn ---------------" ssh bigdata2 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh" echo " --------------- 关闭 hdfs ---------------" ssh bigdata1 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh" ;; *) echo "Input Args Error. " ;; esac
- 修改脚本 xsync 具有执行权限
chmod +x xsync
- 测试脚本
xsync /home/xiaobei/bin ./xsync start ./xsync stop
出现问题1:从你提供的命令和输出来看,你遇到了几个问题:
1. **SSH 权限问题**:你尝试通过 SSH 连接到 `localhost` 或 `bigdata1` 时,遇到了权限拒绝的问题。这通常是因为 SSH 密钥认证失败或者 SSH 配置不正确。
2. **找不到 `xsync` 命令**:你尝试使用 `xsync` 命令时,系统提示找不到命令。
### 解决 SSH 权限问题
对于 SSH 权限问题,确保你的用户在目标主机上有正确的权限,并且 SSH 密钥已经正确设置。你可以按照以下步骤操作:
1. **生成 SSH 密钥对**(如果你还没有):
```bash
ssh-keygen -t rsa
```2. **将公钥复制到目标主机**:
```bash
ssh-copy-id xiaobei@localhost
ssh-copy-id xiaobei@bigdata1
```3. **检查 SSH 配置**:
- 确保 `/etc/ssh/sshd_config` 文件中的 `PasswordAuthentication` 没有被禁用,或者确保你使用的是密钥认证。### 解决找不到 `xsync` 命令的问题
对于找不到 `xsync` 命令的问题,你需要确保 `xsync` 脚本的路径正确,并且具有执行权限。以下是一些可能的解决步骤:
1. **检查 `xsync` 脚本的位置**:
- 确保 `xsync` 脚本位于你尝试执行它的目录中。2. **使用完整路径执行 `xsync`**:
- 如果 `xsync` 脚本位于 `/bin/` 目录中,直接使用 `xsync` 而不是 `./bin/xsync`。3. **添加执行权限**:
- 确保 `xsync` 脚本具有执行权限:
```bash
sudo chmod +x /bin/xsync
```4. **使用正确的命令格式**:
- 你尝试执行 `xsync` 时的命令格式可能有误。如果你想要使用 `xsync` 脚本执行特定的操作,确保你提供了正确的参数。例如,如果你的 `xsync` 脚本接受 "start" 或 "stop" 作为参数,你应该这样执行:
```bash
xsync start
xsync stop
```5. **检查 `xsync` 脚本是否已正确复制到 `/bin/` 目录**:
- 确保你已经正确地将 `xsync` 脚本复制到了 `/bin/` 目录:
```bash
sudo cp xsync /bin/
```如果你在执行这些步骤时遇到任何问题,或者需要进一步的帮助,请提供更多的信息,例如 `xsync` 脚本的内容和你尝试执行的完整命令。
4.将脚本复制到/bin 中,以便全局调用
sudo cp xsync /bin/
出现问题2:
根据你提供的信息,`xsync` 脚本存在于两个位置:`/usr/bin/xsync` 和 `/home/xiaobei/bin/xsync`。当你尝试使用 `sudo cp xsync /bin/` 命令复制文件时,由于你没有指定 `xsync` 的完整路径,系统在当前目录下寻找 `xsync`,而当前目录下并没有这个文件,所以出现了错误。
要将 `xsync` 脚本复制到 `/bin` 目录,你需要使用它的完整路径。根据你的 `find` 命令结果,你可以选择其中一个路径来复制。这里我们选择 `/home/xiaobei/bin/xsync`:
```bash
sudo cp /home/xiaobei/bin/xsync /bin/
```这条命令会将 `/home/xiaobei/bin/xsync` 复制到 `/bin` 目录,使其可以在任何位置通过命令行直接调用。
### 步骤
1. **使用正确的路径复制文件**:
```bash
sudo cp /home/xiaobei/bin/xsync /bin/
```2. **验证文件是否已正确复制**:
```bash
ls -l /bin/xsync
```3. **确保文件具有执行权限**:
```bash
sudo chmod +x /bin/xsync
```4. **测试命令**:
确保你现在可以全局访问 `xsync` 命令:
```bash
xsync
```如果你在执行这些步骤时遇到任何问题,或者需要进一步的帮助,请提供更多的信息。
5.同步环境变量配置(root 所有者)
sudo ./bin/xsync /etc/profile.d/my_env.sh
注意:如果用了 sudo,那么 xsync 一定要给它的路径补全。
让环境变量生效
source /etc/profile
source /etc/profile
ssh免密配置(在之前就已经设置好了,但是是root,所以需要重新设置:xiaobei 账号的ssh免密)
ssh免密配置
1.生产密钥命令:
ssh-keygen -t rsa
出现一下情况一直按回车就解决:
生产密钥结束:
2.将密钥拷贝到bigdata2、bigdata3:ssh-copy-id bigdata1 ssh-copy-id bigdata2 ssh-copy-id bigdata3
注意:
还需要在 bigdata2上采用 xiaobei 账号配置一下无密登录bigdata1、bigdata2、bigdata3 服务器上。
还需要在 bigdata3 上采用 xiaobei 账号配置一下无密登录bigdata1、bigdata2、bigdata3服务器上。
还需要在 bigdata1 上采用 root 账号,配置一下无密登录到bigdata1、bigdata2、bigdata3服务器上;
正式Hadoop集群配置:
注意:
NameNode 和 SecondaryNameNode 不要安装在同一台服务器
ResourceManager 也很消耗内存,不要和 NameNode\SecondaryNameNode 配置在同一台机器上。
1.配置文件说明
Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
(1)默认配置文件:
要获取的默认文件 文件存放在 Hadoop 的 jar 包中的位置2.配置集群
(2)自定义配置文件:
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在$HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。
2.配置集群先进入文件目录:
cd /opt/module/hadoop-3.1.3/etc/hadoop/
(1)核心配置文件 vim core-site.xml
(配置 HDFS 网页登录使用的静态用户为 xiaobei)
<configuration> <!-- 指定 NameNode 的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://bigdata1:8020</value> </property> <!-- 指定 hadoop 数据的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.1.3/data</value> </property> <!-- 配置 HDFS 网页登录使用的静态用户为 xiaobei --> <property> <name>hadoop.http.staticuser.user</name> <value>xiaobei</value> </property> </configuration>
(2)HDFS 配置文件
vim hdfs-site.xml
<configuration> <!-- nn web 端访问地址--> <property> <name>dfs.namenode.http-address</name> <value>bigdata1:9870</value> </property> <!-- 2nn web 端访问地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>bigdata3:9868</value> </property> </configuration>
(3)YARN 配置文件
vim 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>bigdata2</value> </property> <!-- 环境变量的继承 --> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP RED_HOME</value> </property> </configuration>
(4)MapReduce 配置文件
vim mapred-site.xml
<configuration> <!-- 指定 MapReduce 程序运行在 Yarn 上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
(5)配置 workers
vim workers
bigdata1 bigdata2 bigdata3
3.在集群上分发配置好的 Hadoop 配置文件xsync /opt/module/hadoop-3.1.3/etc/hadoop/
4.去 103 和 104 上查看文件分发情况
cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
启动集群
1.如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode
注意:格式化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停 止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式化。
先进入文件目录:
cd /opt/module/hadoop-3.1.3/
切换到 hdfs
用户并尝试 NameNode格式化命令:
sudo su hdfs
hdfs namenode -format
2.启动 HDFS
sbin/start-dfs.sh
3.先进入文件目录:
cd /opt/module/hadoop-3.1.3/
在配置了 ResourceManager 的节点(hadoop103)启动 YARN
sbin/start-yarn.sh
关闭防火墙(所有虚拟机都要操作)
systemctl stop firewalld #关闭防火墙
systemctl disable firlewalld #关闭防火墙开机启动
4.Web 端查看 HDFS 的 NameNode
(a)浏览器中输入:http://bigdata1:9870
5.Web 端查看 YARN 的 ResourceManager
打开window下的C:\Windows\System32\drivers\etc打开hosts文件,在文件末添加三行代码:
192.168.96.128 bigdata1
192.168.96.129 bigdata2
192.168.96.130 bigdata3
(a)浏览器中输入:http://bigdata2:8088
(b)查看 YARN 上运行的 Job 信息。
集群搭建完成。使用jps命令查看进程:
jps
bigdata1上进程:
bigdata2上进程:
bigdata3上进程:
到这里小北已经安装完成了,希望这篇博客对友友们能有所帮助。如果有任何疑问,友友们请评论区提问,蟹蟹~
更多推荐
所有评论(0)