欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

在Centos7上配置Hadoop集群

时间:2023-04-16
前言

教程基于
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-toolsyum 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.100GATEWAY=192.168.10.2DNS1=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 hadoop100192.168.10.101 hadoop101192.168.10.102 hadoop102192.168.10.103 hadoop103192.168.10.104 hadoop104192.168.10.105 hadoop105192.168.10.106 hadoop106192.168.10.107 hadoop107192.168.10.108 hadoop108

重启一下

reboot

验证一下

ifconfig


再看看能不能ping到外网

ping www.baidu.com

配置远程连接

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

192.168.10.100 hadoop100192.168.10.101 hadoop101192.168.10.102 hadoop102192.168.10.103 hadoop103192.168.10.104 hadoop104192.168.10.105 hadoop105192.168.10.106 hadoop106192.168.10.107 hadoop107192.168.10.108 hadoop108

配置安装库

yum install -y epel-release

关闭防火墙

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

systemctl stop firewalldsystemctl disable firewalld.service

用户管理

增加用户
useradd 用户名
passwd 密码

修改权限
vim /etc/sudoers

配置每次切换root用户不需要密码

位置一定要对。

此后命令前加入 sudo 就可以有root权限了

卸载自带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

重启虚拟机 reboot


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

多台配置 克隆虚拟机

先关机然后

第一个linked相当于快捷方式,我们要选第二个完全克隆

选择地址就好

复制好之后开机

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

vim /etc/sysconfig/network-scripts/ifcfg-ens33vim /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_HOMEexport JAVA_HOME=/opt/module/jdk1.8.0_202export 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_HOMEexport HADOOP_HOME=/opt/module/hadoop-3.3.1export PATH=$PATH:$HADOOP_HOME/binexport PATH=$PATH:$HADOOP_HOME/sbin

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

source /etc/profile

检测一下是否成功

hadoop

成功的话他会输出一堆东西

可以看看目录结构

bin目录下有我们以后经常用到的一些命令 hdfs mapred yarn 等

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目录已经被加入到全局变量里了,因此可以在这个目录下写脚本
但是一开始是没有这目录的因此要创建

去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

修改权限 回退到上级目录使用命令同步

同步环境变量的时候发现权限不够

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

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

此时输入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,因此此时再使用上面的脚本的时候就不需要输入密码了。
依次实现各个服务器免密登陆到其他服务器。

配置集群 部署规划

三台集群的配置规划如下。

NameNode、ResourceManager、SecondaryNameNode开销比较大因此错开在三台服务器上面。其中NameNode对应HDFS因此后续HDFS在102启动,ResourceManager对于yarn因此后续yarn在103启动。

修改核心配置文件

位置在

配置 core-site.xml

fs.defaultFS hdfs://hadoop102:8020 hadoop.tmp.dir /opt/module/hadoop-3.3.1/data

配置 hdfs-site.xml

dfs.namenode.http-address hadoop102:9870 dfs.replication 3 dfs.namenode.secondary.http-address hadoop104:9868

配置yarn-site.xml

yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.hostname hadoop103 yarn.nodemanager.env-whitelist JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME

配置mapred-site.xml

mapreduce.framework.name yarn

配置workers

hadoop102hadoop103hadoop104

同步配置文件

[dnils@hadoop102 hadoop]$ cd /opt/module/hadoop-3.3.1/etc[dnils@hadoop102 etc]$ ll总用量 4drwxr-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


除此之外还可以看看HDFS提供的页面(之前配置的)
dfs可视化页面地址
http://hadoop102:9870/

常用这个页面

在103上启动YARN

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

启动

sbin/start-yarn.sh

查看结果



yarn可视化页面地址
http://hadoop103:8088/

测试

测试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

增加下面两行配置

mapreduce.jobhistory.address hadoop101:10020 mapreduce.jobhistory.webapp.address hadoop101:19888

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

mapreduce.framework.name yarn mapreduce.jobhistory.address hadoop102:10020 mapreduce.jobhistory.webapp.address hadoop102:19888

分发配置
xsync mapred-site.xml

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

jps 查看是否启动

配置日志聚集功能

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

yarn-site.xml
增加下列配置

yarn.log-aggregation-enable true yarn.log.server.url https://hadoop102:19888/jobhistory/logs yarn.log-aggregation.retain-seconds 604800

即修改后:

yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.hostname hadoop103 yarn.nodemanager.env-whitelist JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME yarn.log-aggregation-enable true yarn.log.server.url https://hadoop102:19888/jobhistory/logs yarn.log-aggregation.retain-seconds 604800

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

点击history

点击logs

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

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

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

集群时间同步

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

完。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。