Hadoop完全分布式平台搭建
搭建步骤:
【讲在前面】
Hadoop完全分布式集群的搭建需要多台虚拟机,每台虚拟机单独安装配置比较麻烦,因此我们可以在VMware中创建一个虚拟机后完成公共的基础配置然后直接创建完整克隆,这样效率比较高。
Hadoop完全分布式集群的搭建是典型的主从架构,即一台master节点多台slave节点,这里我采用三台虚拟机,一台作为master
节点,另外两台作为slave1
节点和slave2
节点。
所需安装包:jdk安装包、Hadoop安装包(资源里面有我用的版本)
如果没有特殊说明本操作都是在Xshell中完成的。
安装建议:我这里安装统一在根目录下创建一个export文件夹,然后在export文件夹中创建两个文件夹servers(安装软件的文件夹),softwares(存放安装包的目录) or 在/usr/local/
下安装。
mkdir -p /export/servers
mkdir -p /export/softwares
1. 静态IP的配置
centos7安装完成后网卡默认是不启动的首先ifconfig
或
ip a
查看网卡名称。然后修改相关的配置文件。
vi /etc/sysconfig/network-scripts/ifcfg-ens33
将BOOTPROTO修改为static
BOOTPROTO=static
最后一行ONBOOT改为yes
ONBOOT=yes
添加如下内容:
IPADDR=填IP地址
NETMASK=子网掩码
GATEWAY=网关IP
DNS1=8.8.8.8
DNS2=8.8.4.4
如果能ping同外网说明静态IP配置成功
ping www.qq.com
2. jdk的安装
* 将jdk安装包上传至softwares
文件夹中,并解压缩至servers文件夹中。
cd /export/softwares/
rz
选中jdk压缩包,上传至当前目录下
mv jdk-8u161-linux-x64.tar.gz jdk
tar -zxvf jdk -C ../servers/
如果<code>rz</code>命令报错,则执行如下安装后再执行
yum -y install lrzsz
- 配置jdk的环境变量
export JAVA_HOME=/export/servers/jdk
export PATH=$PAHT:$JAVA_HOME/bin
保存后退出。
-
重新加载配置文件使刚才配置的环境变量生效。
source /etc/profile
-
查看是否配置成功:
输入java -version
出现jdk的版本信息即为安装配置成功。
上面的静态IP配置和jdk的安装在每台机器上都需要配置,所以在一台机器上配置成功后直接克隆该虚拟机(注意要创建完整克隆),注意,克隆完成后IP地址三台都相同,需要你把克隆的两台虚拟机在配置文件中把IP修改一下,修改完成后,重启网络服务,看看相互间能不能ping同,如果能ping通则说明IP修改成功。
重启网路服务:
systemctl restart network
3. 修改虚拟机的主机名,并添加映射
* 修改/etc/hostname
文件,将默认的第一行删掉,然后改为
master
,重启虚拟机,主机名修改生效。
同样的做法修改其他的两台虚拟机的主机名分别为:
slave1
、
slave2
,并重启虚拟机。 * 编辑
/etc/hosts
文件,追加如下内容(注意IP地址要改成自己的IP地址):
192.168.200.200 master
192.168.200.201 slave1
192.168.200.202 slave2
在其他两台机器上也追加同样的内容。
验证是否更改成功就看相互间能不能ping
通。例如在任意一台机器上执行如下命令:
ping master
ping slave1
ping slave2
4. 配置SSH免密登录
-
检查SSH是否已经安装(centos7默认是安装了的)
rpm -qa | grep ssh
出现如下结果即为已经安装:
openssh-7.4p1-21.el7.x86_64 libssh2-1.8.0-3.el7.x86_64 openssh-clients-7.4p1-21.el7.x86_64 openssh-server-7.4p1-21.el7.x86_64
如果没有安装的话则需手动安装:
yum -y install openssh-server yum -y install openssh-clients
-
测试SSH是否可用(该IP地址为要登录目标机器的IP地址:也就是子节点的IP地址)
ssh 192.168.200.201
按照提示输入目标机器的登录密码,登陆成功后说明ssh可用,然后执行如下命令返回最初的主机
exit
-
生成密钥
ssk-keygen
该过程需要反复确认,之间按回车就可以,注意:有时候需要回答
yes
或者no
!!! -
在master节点上对所有节点进行免密登录操作,包括master节点:
ssh-copy-id -i ~/.ssh/id_rsa.pub master ssh-copy-id -i ~/.ssh/id_rsa.pub slave1 ssh-copy-id -i ~/.ssh/id_rsa.pub slave2
由于master需要启动slave节点上的服务,所以需要master登录slave,因此把在master节点上执行上面的命令。
5. 配置时间同步服务
-
检查是否安装ntp服务
rpm -qa | grep ntp
没有安装的话安装ntp服务
yum -y install ntp
-
设置master节点为NTP时间同步服务的主节点(即以master节点的时间为准)
编辑
/etc/ntp.conf
文件,注释掉以server
开头的行,并添加如下代码:restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap server 127.127.1.0 fudge 127.127.1.0 stratum 10
-
配置节点时间同步(从master节点上获取时间)
在slave1、slave2节点中同样修改
/etc/ntp.conf
文件,注释掉以server
开头的行,添加如下代码:server master
设置子节点每10分钟和master(时间服务器)同步一次时间
crontab -e 编写定时任务: */10 * * * * /usr/sbin/ntpdate master
-
启动NTP服务
-
在master节点上启动ntp服务并加入开机自启
service ntpd start & chkconfig ntpd on
-
在从节点上(slave1、slave2)上手动同步一次时间
ntpdate master
-
在从节点上(slave1、slave2)上启动ntp服务并加入开机自启
service ntpd start & chkconfig ntpd on
-
查看ntp服务器有无和上层ntp连通
ntpstat 这个命令可能会看到 unsynchronised 这是正常情况,因为配置完成后,需要等待一会儿才能和/etc/ntp.conf中配置的标准时间进行同步。
-
查看ntp服务器和上层ntp的状态
ntpq -p 参数说明: when: 多少秒前进行过时间同步 poll: 下次更新在多少秒后 reach: 已经向上层ntp服务器要求更新的次数 delay: 网络延迟 offser: 时间补偿值 jitter: 系统时间与BIOS时间差
-
-
测试是否配置成功
在任意节点上修改时间:
date -s "2011-11-11 11:11:11"
等待十分钟后查看时间是否同步(实验时可以把10分钟调整为1分钟,节省时间)
date
扩展:如果需要和外网时间保持时钟同步的话就需要设置定时任务(其实虚拟机时间已经和网络上的时间同步了),我这里使用阿里云服务器的时间。----在master上操作
启动定时任务:
crontab -e
添加如下代码:分别代表 分 时 日 月 周
*/1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com
6. Hadoop安装(master上操作)
-
解压Hadoop安装包
进入到softwares目录 tar -zxvf hadoop-2.7.2.tar.gz -C ../servers/ cd ../servers/ mv hadoop-2.7.2.tar.gz hadoop
-
配置环境变量
export HADOOP_HOME=/export/servers/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存后记得
source /etc/profile
-
所有的配置文件都在如下路径中:
hadoop/etc/hadoop/
slaves
该配置文件保存slave节点的信息即节点的机器名称,删掉localhost修改为如下内容:
slave1 slave2
core-site.xml
Hadoop的核心配置文件
在<configuration></configuration>之间添加如下内容:
<property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/export/servers/hadoop/tmp</value> </property>
fs.defaultFS
属性是指定默认文件系统,他的值为hdfs以及master节点端口。hadoop.tmp.dir
属性是指定hdfs临时数据保存在哪个目录,默认值是Linux的tmp目录。hdfs-site.xml
HDFS相关的配置文件
在<configuration></configuration>之间添加如下内容:
<property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/export/servers/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/export/servers/hadoop/tmp/dfs/data</value> </property>
dfs.replication
属性表示数据块副本的数量,它的值默认为3,这里我们为了方便测试将它设置为1。dfs.namenode.name.dir
属性表示NameNode的临时数据存放目录。dfs.namenode.data.dir
属性表示Datanode的临时数据存放目录。mapred-site.xml
MapReduce的相关配置
对文件mapred-site.xml重命名,默认文件名为mapred-site.xml.template,并更改mapred-site.xml配置:
mv mapred-site.xml.template mapred-site.xml
在<configuration></configuration>之间添加如下内容:
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
mapreduce.framework.name
属性表示MapReduce程序的运行框架,默认值为local,也就是本地运行,这里我们设置为yarn,让MapReduce程序运行在YARN框架上。yarn-site.xml
YARN框架的配置
在<configuration></configuration>之间添加如下内容:
<property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
yarn.resourcemanager.hostname
属性指定ResourceManager运行在哪个节点上。yarn.nodemanager.aux-services
属性指定YARN的默认混洗方式,设置为MapReduce的默认混洗算法。hadoop-env.sh
Hadoop运行基本环境配置,自动化脚本启动的时候要用。
export JAVA_HOME=/export/servers/jdk
在文件的第25行位置,把前面的注释去掉,然后把后面的路径改为你
JAVA_HOME
的路径。 -
自此Hadoop就算配置完成了,这只是设置了正常启动所必须的设置项!!!
注:有关更多详细的配置信息,可以去Hadoop官网查看,打开后滑到页面的最下方,左下角Configuration下就有各个配置文件详细信息的链接。
7. Hadoop文件夹的分发
在master节点上配置好所有的配置文件后,将Hadoop文件夹分发给另外的两台子节点
scp -r /export/servers/hadoop slave1:/export/servers/
scp -r /export/servers/hadoop slave2:/export/servers/
8. 集群启动
启动集群前一定要关闭防火墙,注意,每台机器的防火墙都要关闭!!!
查看防火墙状态:
systemctl status firewalld
关闭防火墙:
systemctl stop firewalld
设置防火墙开机不启动(永久关闭防火墙,如果后面需要还可以手动打开):
systemctl disable firewalld
打开防火墙:
systemctl start firewalld
-
第一次启动前要格式化NameNode(后面启动的时候就不需要格式化了)
hdfs namenode -format
如果忘记格式化启动后,需要关掉所有namenode和datanode进程,然后删掉data和log数据,然后重新格式化。
-
集群启动方式分为两种,一种是手动启动,一种是自动化脚本启动
-
手动启动
1. 启动HDFS : 启动NameNode(master节点): hadoop-daemon.sh start namenode 启动Datanode(在Slave节点): hadoop-daemon.sh start datanode 启动SecondaryNameNode(在任意节点): hadoop-daemon.sh start secondarynamenode 2. 启动YARN : 启动ResourceManager(在Master节点): yarn-daemon.sh start resourcemanager 启动NodeManager(在Slave节点): yarn-daemon.sh start nodemanager 3. 启动历史任务服务: mr-jobhistory-daemon.sh start historyserver
-
自动化脚本启动(master节点上执行)
1. 启动HDFS : start-dfs.sh 2. 启动YARN : start-yarn.sh 3. 启动历史任务服务: mr-jobhistory-daemon.sh start historyserver 注:还有一个脚本是:start-all.sh,但是一般不建议使用,容易出错。
-
-
查看进程
jps
在master上看到如下进程即为启动成功:
[root@master ~]# jps 2016 ResourceManager 2353 Jps 1636 NameNode 1845 SecondaryNameNode 2310 JobHistoryServer [root@master ~]#
在slave上看到如下进程即为启动成功:
[root@slave1 ~]# jps 1554 Datanode 1830 Jps 1671 NodeManager [root@slave1 ~]#
说明:
NameNode、SecondaryNameNode
是HDFS在master上的进程,Datanode
是HDFS在slave上的进程,这三个进程存在,说明HDFS启动成功。ResourceManager
是YARN在master上的进程,NodeManager
是YARN在slave上的进程,这两个进程存在,说明YARN启动成功。JobHistoryServer
是历史服务的进程。 -
查看网页
集群启动后可以在浏览器中输入IP地址加端口号,访问它的UI页面,查看集群的详细信息。
查看HDFS集群详细信息: 192.168.200.200:50070 查看YARN集群详细信息: 192.168.200.200:8088 查看historyserver历史服务详细信息: 192.168.200.200:19888
-
关闭进程
把开启服务命令中的
start
改为stop
即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。