基于Linux(最小安装)平台的hadoop完全分布式系统搭建详细搭建过程
本次安装演示是基于虚拟机的服务器(Linux)进行的,分别是:bdc112 bdc113 bdc114。 主要进行了Linux安装环境准备,远程工具:xshell和xftp安装、虚拟机的配置、虚拟机的克隆、虚拟机和我们Windows 10 的网络桥接、免密登录配置、jdk安装,hadoop安装:包括集群规划、分发脚本编写、编写hadoop常用脚本等比较详细完善的安装配置过程
目录
一、安装环境准备(Linux)
在进行集群的安装前,我们先要进行多台服务器的安装和基础配置,对于虚拟机里安装Linux系统,请大家自己在百度上进行百度自行安装。先安装一个,后面的我们之间克隆就好。我这里先安装好的是bdc111。对它需要进行一下配置:
1、网络配置:
步骤如下:
#1、打开ifcfg-ens33文件进行网络配置
[lqs@bdc111 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
需要将第一个画框的值改为static(原本DHCP),其次在增加第二个框中的内容即可。
2、修改主机名
[lqs@bdc111 ~]# vim /etc/hostname
#打开文件后将主机名改成bdc111即可
3、修改hosts文件
[lqs@bdc111 ~]# vim /etc/hosts
修改成如下的样子即可
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.112 bdc112
192.168.10.113 bdc113
192.168.10.114 bdc114
192.168.10.115 bdc115
192.168.10.116 bdc116
192.168.10.117 bdc117
192.168.10.118 bdc118
4、重启服务器
[lqs@bdc111 ~]# reboot
5、修改Windows 10 中的主机映射文件,即hosts文件
路径在:C:\Windows\System32\drivers\etc下,修改成这个样子就可以了,如下
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
192.168.10.112 bdc112
192.168.10.113 bdc113
192.168.10.114 bdc114
192.168.10.115 bdc115
192.168.10.116 bdc116
192.168.10.117 bdc117
192.168.10.118 bdc118
#修改的时候出现了任何问题,可以评论区问,也可以私信我
ps:记得ping一下百度或者主机(查看主机ip:ipconfig)能否ping通
二、远程工具的安装
免费版点击这里下载安装。
去这里下载xshell。
然后按照引导进行安装就可以了
yum install epel-release
去这里下载xftp
按照指引进行安装即可。
三、bdc111虚拟机需要配置的如下
1、安装一些需要用的软件包
我的是最小安装(Linux)
[lqs@bdc111 ~]# yum install -y epel-release
#安装net工具
[lqs@bdc111 ~]# yum install net-tools
#安装vim工具
[lqs@bdc111 ~]# yum install vim
#安装其它工具
[lqs@bdc111 ~]# yum install -y psmisc nc rsync lrzsz ntp libzstd openssl-static tree iotop git
[lqs@bdc111 ~]#
2、关闭防护墙
#临时关闭防火墙
#查看防火墙状态
[lqs@bdc111~]$ systemctl status firewalld
#临时关闭防火墙
[lqs@bdc111~]$ systemctl stop firewalld
#查看防火墙开机启动状态
[lqs@bdc111~]$ systemctl enable firewalld.service
#设置开机时关闭防火墙
[lqs@bdc111~]$ systemctl disable firewalld.service
#查看服务是否开机自启
[lqs@bdc111 ~]$ systemctl is-enabled firewalld.service
#disabled 表示开机不自启
#enabled 表示开机自启
详细可以参考我这篇文章:Linux网络配置相关命令
3、配置lqs用户具有root权限,可以在后期执行临时的root命令
配置内容及详细过程如下:
[lqs@bdc112 ~]# vim /etc/sudoers
4、在lqs用户下创建相关文件夹
[lqs@bdc112 ~]# ll
总用量 0
[lqs@bdc112 ~]# mkdir module
[lqs@bdc112 ~]# mkdir software
[lqs@bdc112 ~]# ll
总用量 8
drwxr-xr-x. 2 root root 4096 12月 6 14:00 module
drwxr-xr-x. 2 root root 4096 12月 6 14:00 software
#修改创建两个文件夹的所有者和所属组皆为lqs
[lqs@bdc112 ~]# chown lqs:lqs ./*
[lqs@bdc112 ~]# ll
总用量 8
drwxr-xr-x. 2 lqs lqs 4096 12月 6 14:00 module
drwxr-xr-x. 2 lqs lqs 4096 12月 6 14:00 software
5、卸载jdk
查看Linux自带虚拟机(最小安装的不用管)
[lqs@bdc112 ~]# java -version
如果有出现,则全部卸载
[lqs@bdc112 ~]# rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
对命令的解释:
命令 | 解释 |
---|---|
rpm -qa | 查询所安装的所有rpm软件包 |
grep -i | 忽略大小写 |
xargs -n1 | 表示每次只传递一个参数 |
rpm -e –nodeps | 强制卸载软件 |
重启虚拟机
[lqs@bdc112 ~]# reboot
四、克隆虚拟机
点击模型机的名字,右键管理->克隆->创建完整克隆克隆出来三台,我这里取名为:bdc112 bdc113 bdc114
然后对他们的hosts文件、ifcfg-ens33文件、hostname文件进行对应的更改即可。
注意:必须要在关机的情况下才可以!!!
如有问题,可以私信我,或者评论区问!!!
五、虚拟机桥接到Windows 10 配置
具体配置参考我的另外一篇文章:编辑VMware网络配置和Windows网络配置,进行配置即可。
六、jdk安装
这里自行百度下载相应版本的hadoop-3.1.3.tar.gz 和Java jdk,我这里使用的是hadoop3.x版本,Java jdk版本是1.828。
1、将jar包解压到我们创建的module文件下
[lqs@bdc112 software]$ tar -zxvf jdk-8u212-linux-x64.tar.gz -C /home/lqs/module/
2、可以查看是否解压成功
[lqs@bdc112 software]$ ll /home/lqs/module/jdk1.8.0_212/
3、配置环境变量
[lqs@bdc112 software]$ sudo vim /etc/profile.d/my_env.sh
#在my_env.sh文件中添加如下内容
#JAVA_HOME
export JAVA_HOME=/home/lqs/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
4、source一下
[lqs@bdc112 software]$ source /etc/profile
5、查看是否配置成功
[lqs@bdc112 software]$ java -version
java version "1.8.0_212"#出现则表示配置成功
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
七、hadoop安装即配置
1、将jar包解压到我们创建的module文件下
[lqs@bdc112 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /home/lqs/module/
2、查看是否解压成功
[lqs@bdc112 software]$ ll /home/lqs/module/hadoop-3.1.3/
总用量 208
drwxr-xr-x. 2 lqs lqs 4096 9月 12 2019 bin
drwxrwxr-x. 4 lqs lqs 4096 12月 5 20:43 data
drwxr-xr-x. 3 lqs lqs 4096 9月 12 2019 etc
drwxr-xr-x. 2 lqs lqs 4096 9月 12 2019 include
drwxr-xr-x. 3 lqs lqs 4096 9月 12 2019 lib
drwxr-xr-x. 4 lqs lqs 4096 9月 12 2019 libexec
-rw-rw-r--. 1 lqs lqs 147145 9月 4 2019 LICENSE.txt
drwxrwxr-x. 3 lqs lqs 4096 12月 5 20:43 logs
-rw-rw-r--. 1 lqs lqs 21867 9月 4 2019 NOTICE.txt
-rw-rw-r--. 1 lqs lqs 1366 9月 4 2019 README.txt
drwxr-xr-x. 3 lqs lqs 4096 9月 12 2019 sbin
drwxr-xr-x. 4 lqs lqs 4096 9月 12 2019 share
3、环境变量配置
首先打开/etc/profile.d/my_env.sh 文件
[lqs@bdc112 software]$ vim /etc/profile.d/my_env.sh
并在文件末尾添加如下内容:
#HADOOP_HOME
export HADOOP_HOME=/home/lqs/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
4、source一下文件source /etc/profile
八、分发脚本编写
为了方便我们通过bdc112节点将文件等信息同步到其它节点而编写
过程如下:
1、创建bin文件在/home/lqs/下
[lqs@bdc112 ~]$ mkdir bin
[lqs@bdc112 ~]$ cd bin/
[lqs@bdc112 bin]$ vim xsync
2、打开文件后在文件中加入一下内容
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in bdc112 bdc113 bdc114 #根据自己的主机名来写,我的是bdc112 bdc113 bdc114
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
3、赋给xsync执行的权限chmod +x xsync
注意:记得复制一份xsync到root下的bin目录:
[lqs@bdc112 ~]$ sudo cp xsync /bin/
[lqs@bdc112 ~]$ sudo xsync /etc/profile.d/my_env.sh
九、配置免密登录
请参考我的另外一篇博客:Linux操作之多台服务器配置免密登录
十 、hadoop集群配置
配置需求如下表格
project | bdc112 | bdc113 | bdc114 |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
进入到一下hadoop的配置文件夹cd /home/lqs/module/hadoop-3.1.3/etc/hadoop/
注意:
以下配置包括了:
上面表需求的配置
历史服务器配置
日志的聚集配置
1、对core-site.xml进行配置,打开vim core-site.xml
,添加如下内容
<configuration>
<!--指定NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://bdc112:8020</value>
</property>
<!--指定Hadoop数据的存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/lqs/module/hadoop-3.1.3/data</value>
</property>
<!--配置HDFS网页登录使用的静态用户为lqs-->
<property>
<name>hadoop.http.staticuser.user</name>
<value>lqs</value>
</property>
<!-- 配置删除,暂时放在回收站 -->
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
</configuration>
2、对hdfs-site.xml进行配置,打开hdfs-site.xml
,添加如下内容
<configuration>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>bdc112:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>bdc114:9868</value>
</property>
</configuration>
3、对yarn-site.xml进行配置,打开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>bdc113</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>http://bdc112:19888/jobhistory/logs</value>
</property>
<!--设置日志保留时间为7天-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<!--Spark相关配置-->
<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接 将其杀掉,>默>认是 true -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接 将其杀掉,>默>认是 true -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
4、对mapred-site.xml进行配置,打开mapred-site.xml
,添加如下内容
<configuration>
<!--指定MapReduce程序运行在Yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--历史服务器端地址-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>bdc112:10020</value>
</property>
<!--历史服务器web端地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>bdc112:19888</value>
</property>
</configuration>
5、配置节点信息:
注意:
在写入时不能有空格等其它符号,否则在运行时会报错!!!
这里添加的内容是自己各个节点服务器的名字!
打开[lqs@bdc112 hadoop]$ vim /home/lqs/module/hadoop-3.1.3/etc/hadoop/workers并添加如下内容:
bdc112
bdc113
bdc114
6、分发到各个节点,包括hadoop、jdk、my_env.sh文件
[lqs@bdc112 ~]$ xsync /home/lqs/module/hadoop-3.1.3/
[lqs@bdc112 ~]$ xsync /home/lqs/module/jdk1.8.0_212/
[lqs@bdc112 ~]$ sudo xsync /etc/profile.d/my_env.sh
注意:
记得去对应节点检查一下是否分发到位,同时去每个节点source下my_env.sh文件
十一、编写hadoop常用脚本
1、编写启动、停止的脚本
[lqs@bdc112 bin]$ vim myhadoop.sh
写入一下内容:
#!/bin/bash
if [ $# -lt 1 ]
then
echo "没有输入参数(start or stop)..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop 集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh bdc112 "/home/lqs/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh bdc113 "/home/lqs/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh bdc112 "/home/lqs/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop 集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh bdc112 "/home/lqs/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh bdc113 "/home/lqs/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh bdc112 "/home/lqs/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "输入参数错误..."
;;
esac
注意:
然后保存并chmod +x myhadoop
一下
2、编写jpsall脚本
[lqs@bdc112 bin]$ vim jpsall
添加以下代码:
#!/bin/bash
for host in bdc112 bdc113 bdc114
do
echo =============== $host ===============
ssh $host jps $1 | grep -v Jps
done
注意:
然后保存并chmod +x jpsall
一下
十二、启动hadoop集群
注意:
第一次启动hadoop记得格式一下bdc112
节点格式化NameNode
原因和注意事项:
格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化bin/hdfs namenode -format
。
[lqs@nwh120 hadoop-3.1.3]$ bin/hdfs namenode -format
输入以下启动命令
[lqs@bdc112 ~]$ myhadoop.sh start
=================== 启动 hadoop 集群 ===================
--------------- 启动 hdfs ---------------
Starting namenodes on [bdc112]
Starting datanodes
Starting secondary namenodes [bdc114]
--------------- 启动 yarn ---------------
Starting resourcemanager
Starting nodemanagers
--------------- 启动 historyserver ---------------
十三、验证是否配置成功
1、查看是否启动成功:
[lqs@bdc112 ~]$ jpsall
=============== bdc112 ===============
2466 NodeManager
2549 JobHistoryServer
2119 DataNode
1994 NameNode
2730 Jps
=============== bdc113 ===============
1728 NodeManager
1409 DataNode
2115 Jps
1604 ResourceManager
=============== bdc114 ===============
1761 Jps
1409 DataNode
1619 NodeManager
1514 SecondaryNameNode
2、进入网页进行验证:
分别输入以下地址进行查看:
hdfs:http://bdc112:9870/
cluster:http://bdc113:8088/
jobhistory:http://bdc112:19888/
如果您输入jpsall后的内容和我一样,和您看到和我下面截图类似,那基本上就没有问题了。
更多推荐
所有评论(0)