在Centos7上配置Hadoop集群

前言

教程基于
https://www.bilibili.com/video/BV1Qp4y1n7EN?from=search&seid=14180453186861163521&spm_id_from=333.337.0.0
详细可以看这个,他们也有给文档,但是是老版的(hadoop2.x),当时看得时候顺便做了一点笔记,可以配合这视频看。前面创建虚拟机部分就不赘述了,可以依照视频来。后续一些脚本、命令和配置和视频保持一致,和他们给的文档略有不同。还有一些自己遇到的问题

硬件

创建虚拟机
自定义
先不要安装操作系统,后面再装
选择对应系统,以及硬件配置

虚拟机存放位置
磁盘存放位置

总核心数不要超过电脑的配置(2核n线程 硬盘50G)

软件

查看电脑有没有开启虚拟化
在这里插入图片描述
ctrl+shift+esc快捷键打开资源管理器,性能那一栏可以看到左下角显示已经开启虚拟化了。
如果没有开启就进入bios界面开启(SVM选项),详细自行百度。
如果没有开启虚拟化VMware是无法正常启动虚拟机的。
如果电脑开启了hyper-V,也需要关闭hyper-V

bcdedit /set hypervisorlaunchtype off

安装操作系统(centos)

在官网下载一个镜像
http://isoredirect.centos.org/centos/7/isos/x86_64/
在设备的CD/DVD插入系统(选择下载好的镜像)
在这里插入图片描述

GNOME桌面 或者 最小安装
熟悉linux的可以最小安装,但是记得安装一些常用的工具包,后面默认你已经安装好了
即要安装net-tool工具包,包含ifconfig,还要安装vim

yum install -y net-tools
yum install -y vim

分配磁盘
/boot 启动 1g 文件系统选择ext4
/swap 共享内存 4g
/ 根目录 剩下的全部容量

KDUMP 系统崩溃备份一部分数据,可以暂时不用

网络和主机名称配置
root账号密码

配置网络

修改虚拟机网络适配器

edit -> virtual Network Editor -> VMnet8

以10网段为例
设置子网地址 Subnet IP 192.168.10.0
设置NAT 默认网关 NAT Settings -> 192.168.10.2 网关地址一般为2

修改window主机网络适配器

请添加图片描述

修改linux网络适配器

切到root用户

su root

将动态分配地址改为静态分配地址

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

即将BOOTPROTO=“DHCP"改为"static”

然后再添加下列配置

IPADDR=192.168.10.100
GATEWAY=192.168.10.2
DNS1=192.168.10.2

IPADDR 本机地址
GATEWAY 网关地址
DNS1 域名服务器地址
在这里插入图片描述
途中截取的为hadoop102的地址,现在配置的是hadoop100,因此IPADDR=192.168.10.100
注意这里要理解,不要盲目照抄。

保存退出(ESC退出编辑模式 输入冒号进入命令模式 输入“wq”回车执行保存并退出命令)

配置主机名称(便于后期更改ip)

vim /etc/hostname

在这里插入图片描述

配置主机名称和ip映射

vim /etc/hosts

添加以下映射(考虑到后期添加九台服务器)不是在本地建集群的话,将ip改为服务器的公网ip地址。
(实际上本教程只用到了104)

192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108

在这里插入图片描述

重启一下

reboot

验证一下

ifconfig

请添加图片描述
再看看能不能ping到外网

ping www.baidu.com 

配置远程连接

在window主机下配置 主机名映射
C:\Windows\System32\drivers\etc
hosts文件添加以下内容,可能无法直接添加,建议复制一份修改好后再替换

192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108

配置安装库

yum install -y epel-release

关闭防火墙

集群内的防火墙一般关闭,在外围(外网)设置一个防火墙(使用堡垒机)

systemctl stop firewalld
systemctl disable firewalld.service

用户管理

增加用户
useradd 用户名
passwd 密码

修改权限
vim /etc/sudoers

配置每次切换root用户不需要密码
在这里插入图片描述

位置一定要对。

此后命令前加入 sudo 就可以有root权限了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LPFRPPDc-1645515916572)(Pasted%20image%2020220121154652.png)]

卸载自带jdk(最小安装不用)

批量卸载

rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps

rpm -qa 查询所有安装的rpm软件包
grep -i 忽略大小写
xargs -n1 表示每次只传递一个参数
rpm -e --nodeps 强制卸载软件

验证一下效果

rpm -qa | grep -i java

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-03OwM4sA-1645515916572)(Pasted%20image%2020220121155325.png)]

重启虚拟机 reboot


目前为止已经配置好了一台虚拟机所需要的基本配置了。接下来通过克隆这个虚拟机三份作为集群。先配置好java和Hadoop环境再克隆也行。但是考虑到这一台虚拟机将来的可复用性,以及后续会有专门的集群分发脚本,因此配置到这个程度就可以开始克隆了。

多台配置 克隆虚拟机

先关机然后
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qUDMDmJv-1645515916572)(Pasted%20image%2020220121155816.png)]

第一个linked相当于快捷方式,我们要选第二个完全克隆
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L2LNxgDX-1645515916573)(Pasted%20image%2020220121155909.png)]

选择地址就好

复制好之后开机

修改相关配置,这些之前配过,这里自己灵活处理。

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

xshell远程连接
(xshell ctrl+L清屏)

三台依次配好
在这里插入图片描述
大概像这样

安装开发环境

下载好安装包(jdk8和hadoop3.x)注意看自己的版本号,后续一些命令需要按照自己安装的版本来。
这里以配置hadoop102为例。
tp传输过去到software文件夹下(这些看个人喜好吧,一般是放这的吧)
在这里插入图片描述

配置jdk

解压安装(解压到module文件夹)

tar -zxvf jdk-8u202-linux-x64.tar.gz -C /opt/module/

配置环境变量
可以直接修改

vim /etc/profile

也可以在 /etc/profile.d/ 目录下添加sh脚本。因为profile脚本默认会遍历该目录下的脚本逐个启动。
建立一个新的文件写我们自己的配置.

#my_env.sh
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_202
export PATH=$PATH:$JAVA_HOME/bin

export用于暴露到全局
保存后退出,重新加载配置文件
source /etc/profile

检测一下是否成功
java -version

配置Hadoop

解压安装

tar -zxvf hadoop-3.3.1.tar.gz -C /opt/module/

配置环境变量

sudo vim /etc/profile.d/my_env.sh
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.3.1
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

保存后退出,重新加载配置文件

source /etc/profile

检测一下是否成功

hadoop

成功的话他会输出一堆东西
在这里插入图片描述
可以看看目录结构
在这里插入图片描述

bin目录下有我们以后经常用到的一些命令 hdfs mapred yarn 等
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8aDnvlLV-1645515916573)(Pasted%20image%2020220121175100.png)]
etc/hadoop/ 下有很多以后要用到的配置文件


现在在hadoop102已经配置好了,需要将配置分发到103和104

集群分发

scp(secure copy) 安全拷贝
可以实现服务器与服务器之间的数据拷贝
scp -r $pdir/$fname $user@$host:$pdir/$fname
递归的将要拷贝的文件拷贝到目的用户@主机:目的路径/名称

eg:
在102主机上实现从102推送文件到103
scp -r jdk1.8.0_202/ dnils@hadoop103:/opt/module/
在103主机上实现从102拉取文件到103
scp -r dnils@hadoop102:/opt/module/hadoop-3.3.1 ./
在103主机上实现从102传输文件到104
scp -r dnils@hadoop102:/opt/module/* dnils@hadoop104:/opt/module/

rsync远程同步工具
主要用于备份和镜像,速度快,避免重复,只对差异文件更新
rsync -av $pdir/$fname $user@$host:$pdir/$fname

上面介绍的方法了解就好,可以不实操.
xsync集群分发脚本
希望脚本在全局生效就要设置为全局变量

查看全局变量 echo $PATH

发现用户下的bin目录已经被加入到全局变量里了,因此可以在这个目录下写脚本
但是一开始是没有这目录的因此要创建
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ijvpcVrJ-1645515916573)(Pasted%20image%2020220121214218.png)]

去bin目录下写脚本xsync(这脚本略有缺陷,高手可以自己改进一下)

#!/bin/bash 
#1 获取输入参数个数,如果没有参数,直接退出 
pcount=$# 
if((pcount==0)); then 
echo no args; 
exit; 
fi 
#2 获取文件名称 
p1=$1 
fname=`basename $p1` 
echo fname=$fname 
#3 获取上级目录到绝对路径 
pdir=`cd -P $(dirname $p1); pwd` 
echo pdir=$pdir 
#4 获取当前用户名称 
user=`whoami` 
#5 循环 
for((host=103; host<105; host++)); do 
	echo ------------------- hadoop$host -------------- 
	rsync -rvl $pdir/$fname $user@hadoop$host:$pdir 
done

修改权限 回退到上级目录使用命令同步
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-arsaG2BU-1645515916574)(Pasted%20image%2020220121220411.png)]

同步环境变量的时候发现权限不够
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YCP8lJys-1645515916574)(Pasted%20image%2020220121220503.png)]

需要root权限
xsync不是系统命令,是用户命令,所以不能直接加sudo来获取权限,除非指明脚本的绝对路径.

sudo ./bin/xsync /etc/profile.d/my_env.sh

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ThIzpD3j-1645515916575)(Pasted%20image%2020220121220746.png)]

此时输入root的密码

同步成功之后echo $JAVA_HOME没有输出是因为没有重新编译profile文件

sudo vim /etc/profile.d/my_env.sh

查看,发现文件已经复制过来了.
但是要输入密码很麻烦。

ssh免密登陆
ls -al 找到隐藏文件夹 .ssh
进入之后 ssh-keygen -t rsa 生成公钥私钥
通过命令 ssh-copy-id hadoop103发送给其他机器(103)
ssh hadoop103 时就不需要输入密码了
上面的脚本也是基于ssh,因此此时再使用上面的脚本的时候就不需要输入密码了。
依次实现各个服务器免密登陆到其他服务器。

配置集群

部署规划

三台集群的配置规划如下。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ELeCdLNE-1645515916575)(Pasted%20image%2020220213132840.png)]
NameNode、ResourceManager、SecondaryNameNode开销比较大因此错开在三台服务器上面。其中NameNode对应HDFS因此后续HDFS在102启动,ResourceManager对于yarn因此后续yarn在103启动。

修改核心配置文件

位置在
在这里插入图片描述

配置 core-site.xml

<configuration>
        <!-- 指定 HDFS 中 NameNode 的地址 -->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://hadoop102:8020</value>
                <!-- 端口为8020 9000 9200 都有人用 -->
        </property>
        <!-- 指定 Hadoop 运行时产生文件的存储目录 -->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/opt/module/hadoop-3.3.1/data</value>
                <!--这个地址按照自己的来,没有data会自动创建-->
        </property>

</configuration>

配置 hdfs-site.xml

<configuration>
        <!-- nn web端访问地址 -->
        <property>
                <name>dfs.namenode.http-address</name>
                <value>hadoop102:9870</value>
		</property>
        <!--  -->
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
        <!-- 指定 Hadoop 辅助名称节点主机配置 web端访问地址 -->
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>hadoop104:9868</value>
        </property>
</configuration>

配置yarn-site.xml


<configuration>

<!-- Site specific YARN configuration properties -->

        <!-- Reducer 获取数据的方式 (指定走shuffle)-->
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <!-- 指定 YARN 的 ResourceManager 的地址 -->
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>hadoop103</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>

配置mapred-site.xml

<configuration>
        <!-- 指定 MR 运行在 Yarn 上 (默认在本地) -->
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>

</configuration>

配置workers

hadoop102
hadoop103
hadoop104

同步配置文件

[dnils@hadoop102 hadoop]$ cd /opt/module/hadoop-3.3.1/etc
[dnils@hadoop102 etc]$ ll
总用量 4
drwxr-xr-x. 3 dnils dnils 4096 2月  13 17:32 hadoop
[dnils@hadoop102 etc]$ xsync hadoop/

这脚本很爽啊有木有

群起集群

在102上启动HDFS

因为之前配置 NameNode在这台机上

启动和初始化

第一次启动集群的时候要初始化
hdfs namenode -format

在这里插入图片描述

sbin/start-dfs.sh
在这里插入图片描述

查看结果(jps)

看看和集群规划的一不一样,对比HDFS那一栏,因为上面启动的是DFS
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0lTBH8NO-1645515916577)(Pasted%20image%2020220213180013.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4URufGCb-1645515916577)(Pasted%20image%2020220213180023.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZswSIiPI-1645515916577)(Pasted%20image%2020220213180033.png)]

除此之外还可以看看HDFS提供的页面(之前配置的)
dfs可视化页面地址
http://hadoop102:9870/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s8C4xDWY-1645515916578)(Pasted%20image%2020220213180618.png)]

常用这个页面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bvM5CFwB-1645515916578)(Pasted%20image%2020220213180657.png)]

在103上启动YARN

因为之前配置ResourceManager在这台机上

启动

sbin/start-yarn.sh
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CzWgCSS3-1645515916579)(Pasted%20image%2020220213181106.png)]

查看结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GrLO3p9i-1645515916579)(Pasted%20image%2020220213181213.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GSNUlwgh-1645515916579)(Pasted%20image%2020220213181222.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AZCaI6tP-1645515916580)(Pasted%20image%2020220213181230.png)]

yarn可视化页面地址
http://hadoop103:8088/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XgdtK06D-1645515916580)(Pasted%20image%2020220213181620.png)]

测试

测试hdfs
hadoop fs -mkdir /wcinput
请添加图片描述
请添加图片描述
hadoop fs -put README.txt /wcinput
请添加图片描述
请添加图片描述
请添加图片描述

内容都存储到了data里了,具体要慢慢一层进去看,不是存的原本的文件,有特定的方法(meta)

测试yarn
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /wcinput /wcoutput
注意: 这个测试用例的 /wcinput这个文件夹必须存在 /wcoutput 必须不存在
请添加图片描述

崩溃处理

先把进程全部停掉
sbin/stop-dfs.sh

删除集群的每个机器的历史数据 data logs
rm -rf data/ logs/

格式化
hdsf namenode -format

启动
sbin/start-dfs.sh

配置历史服务器

修改mapred-site.xml (之前修改过一次)

vim mapred-site.xml

增加下面两行配置

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

增加修改为注意主机地址(注意分发脚本只会固定分发到103和104 所以从103修改后分发也只能分发到103和104 所以102还是没有改,因此要从102开始改)

<configuration>
        <!-- 指定 MR 运行在 Yarn 上 (默认在本地) -->
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>

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

</configuration>

分发配置
xsync mapred-site.xml

在hadoop102启动历史服务器
bin/mapred --daemon start historyserver
daemon 守护进程模式

jps 查看是否启动

配置日志聚集功能

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和 HistoryManager。

yarn-site.xml
增加下列配置

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

即修改后:

<configuration>

<!-- Site specific YARN configuration properties -->

        <!-- Reducer 获取数据的方式 (指定走shuffle)-->
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <!-- 指定 YARN 的 ResourceManager 的地址 -->
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>hadoop103</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>

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


</configuration>

停止历史服务器
mapred --daemon stop historyserver
(然后再启动)
(还要重启yarn 因为改了yarn-site.xml配置)
跑一个测试样例
结果:
请添加图片描述

点击history
请添加图片描述

点击logs
请添加图片描述

各个组件可以单独启动停止某个服务
eg:
hdfs --daemon start namenode

  1. 各个服务组件逐一启动/停止
    (1)分别启动/停止 HDFS 组件 hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode
    (2)启动/停止 YARN yarn-daemon.sh start / stop resourcemanager / nodemanager
  2. 各个模块分开启动/停止(配置 ssh 是前提)常用
    (1)整体启动/停止 HDFS start-dfs.sh / stop-dfs.sh
    (2)整体启动/停止 YARN start-yarn.sh / stop-yarn.sh

一键启停脚本

没写,感兴趣可以上网找一下。

集群时间同步

时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时 的同步,比如,每隔十分钟,同步一次时间。
如果生产环境能连接外网就不需要时间同步。

完。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值