在进行Hadoop的搭建前,应准备在VMware上创建三台虚拟机,以一台为主机,两台为节点,并在搭建过程中将主机名命名为:master, node1,node2,分配IP时尽量将三个IP连续在一起,如:192.168.200.20 192.168.200.21 192.168.200.22,再使用MobaXterm为工具进行操作。
注:如若在创建虚拟机时没有设置主机名,导致主机名还是默认的,可以使用命令:
hostnamectl set-hostname 主机名
注:以下操作除单独要求,皆要使用mobaxterm将三台虚拟机进行共同操作。
主机名解析
首先需要在 /etc/hosts 文件中添加如下内容,注:根据主机名的不同和IP的不同进行更改。
192.168.200.20 master
192.168.200.21 node1
192.168.200.22 node2
然后检验是否成功,使用ping命令:
- ping master
- ping node1
- ping node2
如果没有出现报错就代表成功了。
时间同步
因为要保持三台虚拟机的时间是完全同步的,所以要使用以下代码:
systemctl start chronyd
systemctl enable chronyd
再使用代码进行验证:
date
禁用
禁用iptable和firewalld服务
在运行的中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则,使用代码:
# 1 关闭firewalld服务
systemctl stop firewalld
systemctl disable firewalld
# 2 关闭iptables服务
systemctl stop iptables
systemctl disable iptables
禁用selinux
selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题,在这里要对
/etc/selinux/config 文件进行编辑,修改SELINUX的值为disable:
SELINUX=disabled
禁用swap分区
swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明
在文件 /etc/fstab 中注释掉swap分区一行:
/dev/mapper/centos-swap swap
# /dev/mapper/centos-swap swap
关闭防火墙
为了防止在Hadoop部署时出现防火墙的警告,在这里要使用代码将其关掉:
firewall-cmd --state
systemctl stop firewalld.service
systemctl disable firewalld.service
ssh免密登录
为了在Hadoop部署时,在连接三台虚拟机时能够做到免密互相登录,使用代码ssh-keygen生成公共密钥(一键回车到底,但若出现选项y/n时输入y回车)
将密钥配置到三台虚拟机:
ssh-copy-id master
ssh-copy-id node1
ssh-copy-id node2
再进行测试,是否成功:
ssh master
ssh node1
ssh node2
如若三个代码分别输入时并未报错。成功登录,则成功。
新建工作空间
新建三个文件
mkdir -p /export/server/
mkdir -p /export/data/
mkdir -p /export/text/
Java环境变量
在目录 /export/server/ (图中红圈中输入)下将jdk-8u241-linux-x64.tar.gz hadoop-3.3.0-Centos7-64-with-snappy.tar.gz这两个压缩包拖入其中:
再把这两个压缩包解压:
tar -zxvf jdk-8u241-linux-x64.tar.gz
tar -zxvf hadoop-3.3.0-Centos7-64-with-snappy.tar.gz
解压完成之后进行重命名,在/export/server/这个路径下使用命令:
mv jdk-1.1.0 jdk
配置环境变量(进入/etc/profile)
vim /etc/profile
export JAVA_HOME=/export/server/jdk
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
重新加载环境变量文件
source /etc/profile
验证jdk 是否安装成功:
java -version
文件配置
修改配置文件(cd /export/server/hadoop-3.3.0/etc/hadoop)
以下均以vim命令来配置
hadoop-env.sh配置
在该文件最后添加如下内容:
export JAVA_HOME=/export/server/jdk
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
core-site.xml配置
将如下内容添加入其中:
<!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<!-- 设置Hadoop本地保存数据路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/data/hadoop-3.3.0</value>
</property>
<!-- 设置HDFS web UI用户身份 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!-- 整合hive 用户代理设置 -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
hdfs-site.xml配置
<!-- 文件系统垃圾桶保存时间 -->
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
将如下内容添加至该文件中间部分两个property中:
<!-- 设置SNN进程运行机器位置信息 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9868</value>
</property>
注:代码中value后面根据三台虚拟机的主机部分的主机名进行修改。
mapred-site.xml配置
将如下内容添加至文件末尾:
<!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- MR程序历史服务地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!-- MR程序历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
yarn-site.xml配置
将如下内容添加至文件:
<!-- 设置YARN集群主角色运行机器位置 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 是否将对容器实施物理内存限制 -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!-- 是否将对容器实施虚拟内存限制。 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 开启日志聚集 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置yarn历史服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://master:19888/jobhistory/logs</value>
</property>
<!-- 历史日志保存的时间 7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
workers文件
将三个虚拟机的主机名写入:
master
node1
node2
将hadoop添加到环境变量
配置环境变量:
vim /etc/profile
根据自身的信息适当修改如下添加内容:
export HADOOP_HOME=/export/server/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
重新加载环境变量文件:
source /etc/profile
进行验证:
hadoop -version
如若未出现报错,则成功。
Hadoop集群启动
注:以下操作应脱离MobaXterm的功能多线操作,只在master(主节点)下操作
格式化namenode:
hdfs namenode -format
启动脚本:
start-dfs.sh
start-yarn.sh
如若未出错,则成功,那么就可以打开以下网页:
- HDFS集群:http://master:9870/
- YARN集群:http://master:8088/
注:网页中的master可以改为主节点的IP地址