hadoop学习(三)----hadoop2.x完全分布式环境搭建
今天我们来完成hadoop2.x的完全分布式环境搭建,话说学习本来是一件很快乐的事情,可是一到了搭环境就怎么都让人快乐不起来啊,搭环境的时间比学习的时间还多。都是泪。话不多说,走起。
1 准备工作
开工之前先说一下我们的机器环境:
一共是4台主机,主机1,2,3都是从master克隆过来的:
| 主机名 | IP | 用户 |
|---|---|---|
| hadoopmaster | 192.168.131.128 | hadoop |
| hadoopslaver1 | 192.168.131.130 | hadoop |
| hadoopslaver2 | 192.168.131.131 | hadoop |
| hadoopslaver3 | 192.168.131.132 | hadoop |
集群组成:
- Namenode:2台
- Datanode: 3台
- Journalnode:3台
- Zookeeper: 3台
- ZKFC:2台
- ResourceManager:2台
- NodeManager:3台
| Namenode | Datanode | Journalnode | Zookeeper | ZKFC | ResourceManager | NodeManager | |
|---|---|---|---|---|---|---|---|
| hadoopmaster | 1 | 1 | 1 | 1 | |||
| hadoopslaver1 | 1 | 1 | 1 | 1 | 1 | 1 | |
| hadoopslaver2 | 1 | 1 | 1 | 1 | 1 | ||
| hadoopslaver3 | 1 | 1 | 1 |
首先我们保证做好了如下工作:
- 关闭防火墙
- 安装jdk
- 配置好了环境变量
本次安装的hadoop版本为2.7.3。
1.1 关闭防火墙,修改主机名、配置host文件、设置时间同步
1.1.1 防火墙状态
查看防火墙是否开启
# service iptables status
如果开启则使用如下命令关闭
# service iptables stop
1.1.2 修改主机名:
修改master主机的 /etc/sysconfig/network文件,将HOSTNAME改为master,其余三台主机分别改为对应的主机名。
# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hadoopmaster
其余三台分别改为相应的主机名,现在四台主机的主机名分别是:
192.168.131.128 hadoopmaster
192.168.131.130 hadoopslaver1
192.168.131.131 hadoopslaver2
192.168.131.132 hadoopslaver3
1.1.3 修改host文件
# vim /etc/hosts
添加如下配置:
192.168.131.128 hadoopmaster
192.168.131.130 hadoopslaver1
192.168.131.131 hadoopslaver2
192.168.131.132 hadoopslaver3
1.1.4 删除持久化文件/etc/udev/rules.d/70-persistent-net.rules ,重启虚拟主机,使配置生效。
# rm /etc/udev/rules.d/70-persistent-net.rules
| TIPS: 该文件记录的是当前主机的MAC地址与IP地址的映射关系,因为我们后面三台主机都是通过克隆来的,所以四台主机的MAC地址是一样的。后面我们四台主机通信的时候你却会发现有问题,我们需要删除这个持久化文件,然后重启一下机器,系统会检测该文件,发现不存在会重新生成该文件。 |
1.1.5 4台主机做时间同步
# yum install ntp
使用ntp工具来同步时间,这里使用的时间服务器的ip是上海交通大学学的NTP服务器地址,其他的地址自行百度:
# ntpdate 202.120.2.101
需要注意的是,如果执行上面的命令出现如下提示:
ntpdate[2747]: no server suitable for synchronization found
首先检查你的防火墙是否关闭,没有的话先关闭,如果关闭了还是不行可以试一下如下方法:
使用rdate命令来更新服务器时间,
查看时间服务器的时间:
# rdate time-b.nist.gov
如果命令不生效请安装rdate,
yum install -y rdate
设置时间和时间服务器同步:
# rdate -s time-b.nist.gov
| TIPS: 以上所有操作需要在4台机器上同步执行!!! |
2 配置ssh免密
如果设置主机master到主机slaver1的免密钥登录,可按如下方式进行:
在A主机执行
1、# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
-t 密钥类型(rsa 或 dsa)
-P 旧密码 ''代表为空
-f 密钥文件生成后,保存的位置
2、# ssh-copy-id 192.168.131.130
IP是主机slaver1的IP地址,将主机master生成的密钥,拷贝到远程主机对应的账户下
执行过程中,会提示让输入主机slaver1的登录密码
我们可以使用上面的命令设置4台机器互相免密。
3 安装jdk,hadoop,zookeeper,配置环境变量
3.1 配置环境变量
这里我用的jdk是1.8,hadoop是2.7,zookeeper是3.4.11.配置环境变量:
# vim /etc/profile
环境信息如下:
JAVA_HOME=/usr/java/jdk
JRE_HOME=/usr/java/jdk/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/jt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
配置完成以后执行:
# source /etc/profile
使配置生效。
3.2 安装zookeeper
| 注意: 环境配置中后面有关zookeeper这两行只用在master、slaver1和slaver2中配置,即只在这三台机器中安装zookeeper。 |
zookeeper解压到/usr/local/zookeeper目录,我们进入目录/usr/local/zookeeper/conf修改文件模板文件:
mv zoo_sample.cfg zoo.cfg
1.首先修改文件中的dataDir,路径是zookeeper的快照存储路径,不要使用默认的路径,重启的话会清空/tmp目录导致数据丢失:
dataDir=/usr/local/zookeeper/tmp
| ✔此处注意:tmp目录是我新建的。 |
2.在文件的最后加入zookeeper节点的配置:
server.1=hadoopmaster:2888:3888
server.2=hadoopslaver1:2888:3888
server.3=hadoopslaver2:2888:3888
然后我们需要注意的是:上面指定的配置节点server1.2.3是需要我们手动指定,需要在快照目录新建一个文件:myid。
# vim myid
然后内容为该服务器对应的节点id,本次试验:hadoopmaster对应的是1,hadoopslaver1对应的是2,hadoopslaver2对应的是3.
上面我们在master中配置完之后需要分别在另外两台也要配置,我们直接复制过去得了:
scp -r zookeeper hadoopslaver1:/usr/local/zookeeper
scp -r zookeeper hadoopslaver2:/usr/local/zookeeper
然后记得改一下myid,hadoopslaver1的改为2,hadoopslaver2的改为3。
好了,配置完成,接下来到了激动人心的启动时刻,启动脚本在bin目录下的zkServer.sh文件:
zkServer.sh start
| TIPS: ✔✔注意:三台机器都需要启动啊!!! |
查看zookeeper的状态:
zkServer.sh status
如果出现如下提示表明启动成功:

关闭命令:
zkServer.sh stop
3.3 安装hadoop
hadoop集群的配置文件主要涉及到以下这几个:
hadoop-env.sh
core-site.xml
hdfs-site.xml
slaves
mapred-site.xml
yarn-site.xml
下面以此对上面的文件进行配置:
hadoop-env.sh文件,设置jdk的路径:
export JAVA_HOME=/usr/java/jdk
core-site.xml文件,在configuration里面添加如下配置:
<configuration>
<property>
<name>fs.defaultFS</name>
<!--此处名称需要和hdfs-site.xml中的dfs.nameservice保持一致-->
<value>hdfs://rickiyang</value>
</property>
<property>
<!--配置路径-->
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoopmaster:2181,hadoopslaver1:2181,hadoopslaver2:2181</value>
</property>
</configuration>
hdfs-site.xml文件:
<configuration>
<property>
<name>dfs.nameservices</name>
<!--此处名称需与core-site.xml中fs.defaultFS的值保持一致-->
<value>rickiyang</value>
</property>
<!--配置namenode的组成 -->
<property>
<name>dfs.ha.namenodes.rickiyang</name>
<value>nn1,nn2</value>
</property>
<property>
<!--配置namenode1的rpc端口 -->
<name>dfs.namenode.rpc-address.rickiyang.nn1</name>
<value>hadoopmaster:8020</value>
</property>
<property>
<!--配置namenode2的rpc端口 -->
<name>dfs.namenode.rpc-address.rickiyang.nn2</name>
<value>hadoopslaver1:8020</value>
</property>
<property>
<!--配置namenode1的http端口 -->
<name>dfs.namenode.http-address.rickiyang.nn1</name>
<value>hadoopmaster:50070</value>
</property>
<property>
<!--配置namenode2的http端口 -->
<name>dfs.namenode.http-address.rickiyang.nn2</name>
<value>hadoopslaver1:50070</value>
</property>
<property>
<!--配置journalnode集群 -->
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoopmaster:8485;hadoopslaver1:8485;hadoopslaver2:8485/rickiyang</value>
</property>
<property>
<!--配置后台类。作用:HDFS Client用此类联系处于active状态的namenode -->
<name>dfs.client.failover.proxy.provider.rickiyang</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<!--用于主备节点切换时实现隔离机制的 -->
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<!--配置密钥的路径 需与前面免密钥设置的路径保持一致-->
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/hadoop/.ssh/id_rsa</value>
</property>
<property>
<!--journalnode的持久化文件保存路径 -->
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop/journal/data</value>
</property>
<property>
<!--设置故障自动切换功能可用 -->
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
复制配置文件的时候把注释删除,注释是给你看的,不用放进去。
slaves文件: 配置datanode的主机名称:
hadoopslaver1
hadoopslaver2
hadoopslaver3
mapred-site.xml文件,配置yarn:
使用自带的模板文件
# mv mapred-site.xml.template mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
yarn-site.xml文件:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>myyarncluster</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoopslaver2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoopslaver3</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoopmaster:2181,hadoopslaver1:2181,hadoopslaver2:2181</value>
</property>
</configuration>
以上6个文件配置完毕,同步至其他3台主机:
进入路径:/usr/local/hadoop/etc/hadoop/下:
scp * hadoopslaver1:`pwd`
scp * hadoopslaver2:`pwd`
scp * hadoopslaver3:`pwd`
启动journalnode集群。(之所以将journalnode集群放在namenode之前启动,是因为namenode启动时,会往journalnode写入edits日志文件)
在三台journalnode主机分别启动:
hadoop-daemon.sh start journalnode
NN的格式化 与 同步
在其中一台NN上,执行文件系统的格式化操作。注意:此处的格式化并非真正的格式化,而是一些准备和清除操作(比如清空fsimage和edits文件的存储目录下已有的文件)
hdfs namenode -format
此时,这一台NN已经完成了格式化操作,接下来,需要将格式化之后的文件系统同步到另一台NN。同步时,第二台NN会从第一台NN读取数据,故需要先将第一台NN启动起来。
hadoop-daemon.sh start namenode
第一台NN启动后,在第二台NN上执行以下命令(此时NN尚未启动),即可完成同步操作:
hdfs namenode -bootstrapStandby
zookeeper集群的格式化
在上面已经启动了zookeeper集群,故此处在其中一台NN上执行以下命令,完成zookeeper的格式化:
集群的一些高可用信息读到zookeeper中
hdfs zkfc -formatZK
至此,Hadoop完全分布式集群的配置工作都已经完成!
接下来,启动集群,在其中一台主机上执行以下命令(最好是在NN上执行,因为NN->DN设置了免密钥):
start-all.sh
然后分别在RS主机上启动resourcemanager:
yarn-daemon.sh start resourcemanager
在start-all.sh的时候会有如下信息输出:

在上面截图的信息中我们可以看到,集群的启动顺序是:
| NN –> DN –> JN –>ZKFC –> NM |
jps 查看进程
hadoop集群的启动顺序:
1、启动zk集群
zkServer.sh start | status
2、start-all.sh
3、手动启动两台RS
yarn-daemon.sh start resourcemanager
停止顺序:
1、stop-all.sh
2、手动停止两台rs
yarn-daemon.sh stop resourcemanager
3、停止zk集群
启动完成,浏览器访问:



至此,我们的高可用环境就搭建完毕了。大家动手尝试吧!
hadoop学习(三)----hadoop2.x完全分布式环境搭建的更多相关文章
- Hadoop学习笔记1:伪分布式环境搭建
在搭建Hadoop环境之前,请先阅读如下博文,把搭建Hadoop环境之前的准备工作做好,博文如下: 1.CentOS 6.7下安装JDK , 地址: http://blog.csdn.net/yule ...
- 【Hadoop离线基础总结】完全分布式环境搭建
完全分布式环境搭建 服务规划 适用于工作当中正式环境搭建 安装步骤 第一步:安装包解压 停止之前的Hadoop集群的所有服务,并删除所有机器的Hadoop安装包,然后重新解压Hadoop压缩包 三台机 ...
- [hadoop]hadoop2.6完全分布式环境搭建
在经过几天的环境搭建,终于搭建成功,其中对于hadoop的具体设置倒是没有碰到很多问题,反而在hadoop各节点之间的通信遇到了问题,而且还反复了很多遍,光虚拟机就重新安装了4.5次,但是当明白了问题 ...
- hadoop2.6.2分布式环境搭建
1.准备三台机器,机器名是:master.slave01.slave02 1.1 最小化安装centos6.5 1.2 安装ssh,yum -y install openssh-clients(这一步 ...
- Hadoop学习笔记(3)——分布式环境搭建
Hadoop学习笔记(3) ——分布式环境搭建 前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里, ...
- ubuntu + hadoop2.5.2分布式环境配置
ubuntu + hadoop2.5.2分布式环境配置 我之前有详细写过hadoop-0.20.203.0rc1版本的环境搭建 hadoop学习笔记——环境搭建 http://www.cnblogs. ...
- 大数据学习笔记【一】:Hadoop-3.1.2完全分布式环境搭建(Windows 10)
一.前言 Hadoop原理架构本人就不在此赘述了,可以自行百度,本文仅介绍Hadoop-3.1.2完全分布式环境搭建(本人使用三个虚拟机搭建). 首先,步骤: ① 准备安装包和工具: hadoop-3 ...
- 攻城狮在路上(陆)-- hadoop分布式环境搭建(HA模式)
一.环境说明: 操作系统:Centos6.5 Linux node1 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 ...
- Hadoop-2.4.1完全分布式环境搭建
Hadoop-2.4.1完全分布式环境搭建 Hadoop-2.4.1完全分布式环境搭建 一.配置步骤如下: 主机环境搭建,这里是使用了5台虚拟机,在ubuntu 13系统上进行搭建hadoop ...
随机推荐
- scrapy实战4 GET方法抓取ajax动态页面(以糗事百科APP为例子):
一般来说爬虫类框架抓取Ajax动态页面都是通过一些第三方的webkit库去手动执行html页面中的js代码, 最后将生产的html代码交给spider分析.本篇文章则是通过利用fiddler抓包获取j ...
- Linux 操作系统及其组成,shell命令
Linux 操作系统及其组成 操作系统的作用 操作系统(OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石.操作系统需要处理如管理与配置内存.决定系统资源供需的优先次序.控制 ...
- 你必须了解的java内存管理机制(四)-垃圾回收
本文在个人技术博客不同步发布,详情可用力戳 亦可扫描屏幕右侧二维码关注个人公众号,公众号内有个人联系方式,等你来撩... 相关链接(注:文章讲解JVM以Hotspot虚拟机为例,jdk版本为1.8) ...
- centos下安装色彩scrapy
一.安装Python2.7.6 更新CentOS lib库文件 yum -y update 安装开发工具包 yum groupinstall -y development 安装扩展包 yum inst ...
- python 3.7 新特性 - popitem
百度上大多文章说 popitem 随机删除字典的一个键值对 python 3.7 官方文档已经说了,popitem 删除字典最后一个添加进去的键值对
- springboot快速入门02--Controller编写和测试
02springboot快速入门--Controller编写和测试 1.新建一个HelloController import org.springframework.boot.SpringApplic ...
- Jmeter--录制脚本-用户参数化-添加断言
使用jmeter实现的场景 1.使用badboy录制脚本 2.使用jmeter自带元件进行用户参数化 3.给请求添加断言(给请求添加检查点) 使用badboy录制脚本导入jmeter 1.输入http ...
- WSASocket()创建套接字不成功解决方法
这几天我在写一个模仿windows自带的ping程序,可是套接字总是创建不成功,在网上找了一些资料最后总算把问题解决了,现在总结一下. 解决方法:以管理员运行VS就行了我的是vs2013,vs2010 ...
- linux初学者-软件安装与管理篇
linux初学者-软件安装与管理篇 在linux的学习和工作中需要安装许多的软件.在redhat的linux操作系统下,软件一般都是rpm格式的.以下将介绍一些软件安装和管理的内容. 1.软件名称 在 ...
- [ PyQt入门教程 ] Qt Designer工具的使用
Qt Designer是PyQt程序UI界面的实现工具,Qt Designer工具使用简单,可以通过拖拽和点击完成复杂界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用.本文 ...