hadoop2.4.1集群搭建
准备Linux环境
修改主机名:
$ vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hadoop001
修改IP:
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=♦♦♦♦♦♦♦♦♦♦♦♦♦
TYPE=Ethernet
UUID=♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=172.17.30.111
NETMASK=255.255.254.0
GATEWAY=172.17.30.1
DNS1=223.5.5.5
DNS2=223.6.6.6
关闭防火墙:
查看防火墙状态
service iptables status
关闭防火墙
service iptables stop
查看防火墙开机启动状态
chkconfig iptables --list
关闭防火墙开机启动
chkconfig iptables off
修改主机名和IP映射关系:
$ vim /etc/hosts
172.17.30.111 hadoop001
172.17.30.112 hadoop002
172.17.30.113 hadoop003
172.17.30.114 hadoop004
172.17.30.115 hadoop005
172.17.30.116 hadoop006
172.17.30.117 hadoop007
重启机器:
# reboot
安装JDK
解压jdk:
# tar -zxvf jdk-7u79-linux-x64.tar.gz -C /opt/modules/
添加环境变量:
# vim /etc/profile
##JAVA
JAVA_HOME=/opt/modules/jdk1.7.0_79
JRE_HOME=/opt/modules/jdk1.7.0_79/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
刷新配置:
# source /etc/profile
安装hadoop2.4.1
解压hadoop2.4.1:
# tar -zxvf hadoop-2.4.1.tar.gz -C /opt/modules/
添加环境变量:
# vim /etc/profile
##HADOOP
export HADOOP_HOME=/opt/modules/hadoop-2.4.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
刷新配置:
# source /etc/profile
集群规划:
主机名 IP 安装的软件 运行的进程
hadoop001 172.17.30.111 jdk、hadoop NameNode、DFSZKFailoverController(zkfc)
hadoop002 172.17.30.112 jdk、hadoop NameNode、DFSZKFailoverController(zkfc)
hadoop003 172.17.30.113 jdk、hadoop ResourceManager
hadoop004 172.17.30.114 jdk、hadoop ResourceManager
hadoop005 172.17.30.115 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
hadoop006 172.17.30.116 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
hadoop007 172.17.30.117 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
说明:
1.在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。
hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode
这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态
2.hadoop-2.2.0中依然存在一个问题,就是ResourceManager只有一个,存在单点故障,hadoop-2.4.1解决了这个问题,有两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调
配置HDFS:
修改hadoop-env.sh:
# vim hadoop-env.sh
export JAVA_HOME=/opt/modules/jdk1.7.0_79
修改core-site.xml:
# vim core-site.xml
|
<configuration> <!-- 指定hdfs的nameservice为ns1 --> <property> <name>fs.defaultFS</name> <value>hdfs://ns1</value> </property> <!-- 指定hadoop临时目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/data/tmp</value> </property> <!-- 指定zookeeper地址 --> <property> <name>ha.zookeeper.quorum</name> <value>hadoop005:2181,hadoop006:2181,hadoop007:2181</value> </property> </configuration> |
修改hdfs-site.xml:
# vim hdfs-site.xml
|
<configuration> <!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 --> <property> <name>dfs.nameservices</name> <value>ns1</value> </property> <!-- ns1下面有两个NameNode,分别是nn1,nn2 --> <property> <name>dfs.ha.namenodes.ns1</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn1</name> <value>hadoop001:9000</value> </property> <!-- nn1的http通信地址 --> <property> <name>dfs.namenode.http-address.ns1.nn1</name> <value>hadoop001:50070</value> </property> <!-- nn2的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn2</name> <value>hadoop002:9000</value> </property> <!-- nn2的http通信地址 --> <property> <name>dfs.namenode.http-address.ns1.nn2</name> <value>hadoop002:50070</value> </property> <!-- 指定NameNode的元数据在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop005:8485;hadoop006:8485;hadoop007:8485/ns1</value> </property> <!-- 指定JournalNode在本地磁盘存放数据的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/opt/data/journaldata</value> </property> <!-- 开启NameNode失败自动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失败自动切换实现方式 --> <property> <name>dfs.client.failover.proxy.provider.ns1</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行--> <property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true) </value> </property> <!-- 使用sshfence隔离机制时需要ssh免登陆 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <!-- 配置sshfence隔离机制超时时间 --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> </configuration> |
修改mapred-site.xml:
# cp mapred-site.xml.template mapred-site.xml
# vim mapred-site.xml
|
<configuration> <!-- 指定mr框架为yarn方式 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> |
修改yarn-site.xml:
# vim yarn-site.xml
|
<configuration> <!-- 开启RM高可用 --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 指定RM的cluster id --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yrc</value> </property> <!-- 指定RM的名字 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 分别指定RM的地址 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>hadoop003</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>hadoop004</value> </property> <!-- 指定zk集群地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>hadoop005:2181,hadoop006:2181,hadoop007:2181</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration> |
修改slaves(slaves是指定子节点的位置,因为要在hadoop001上启动HDFS、在hadoop003启动yarn,所以hadoop001上的slaves文件指定的是datanode的位置,hadoop003上的slaves文件指定的是nodemanager的位置):
# vim slaves
|
hadoop005 hadoop006 hadoop007 |
配置免密码登录:
在hadoop001上产生一对密钥
# ssh-keygen -t rsa
配置hadoop001到hadoop002、hadoop003、hadoop004、hadoop005、hadoop006、hadoop007的免密码登陆
将公钥拷贝到其他节点,包括自己
# ssh-copy-id hadoop001
# ssh-copy-id hadoop002
# ssh-copy-id hadoop003
# ssh-copy-id hadoop004
# ssh-copy-id hadoop005
# ssh-copy-id hadoop006
# ssh-copy-id hadoop007
在hadoop003上产生一对密钥
# ssh-keygen -t rsa
配置hadoop003到hadoop004、hadoop005、hadoop006、hadoop007的免密码登陆
# ssh-copy-id hadoop004
# ssh-copy-id hadoop005
# ssh-copy-id hadoop006
# ssh-copy-id hadoop007
注意:两个namenode之间要配置ssh免密码登陆,
在hadoop002上产生一对密钥
# ssh-keygen -t rsa
配置hadoop002到hadoop001的免登陆
# ssh-copy-id hadoop001
将配置好的hadoop2.4.1拷贝到其他节点:
# scp -r hadoop-2.4.1/ hadoop002:/opt/modules/
# scp -r hadoop-2.4.1/ hadoop003:/opt/modules/
# scp -r hadoop-2.4.1/ hadoop004:/opt/modules/
# scp -r hadoop-2.4.1/ hadoop005:/opt/modules/
# scp -r hadoop-2.4.1/ hadoop006:/opt/modules/
# scp -r hadoop-2.4.1/ hadoop007:/opt/modules/
安装配置zooekeeper集群(在hadoop005)
解压zookeeper:
# tar -zxvf zookeeper-3.4.5.tar.gz -C /opt/modules/
添加环境变量:
# vim /etc/profile
##ZOOKEEPER
export ZOOKEEPER_HOME=/opt/modules/zookeeper-3.4.5
export PATH=$PATH:$ZOOKEEPER_HOME/bin
修改配置:
# pwd
/opt/modules/zookeeper-3.4.5/conf
# cp zoo_sample.cfg zoo.cfg
# vim zoo.cfg
修改:dataDir=/opt/modules/zookeeper-3.4.5/tmp
在配置文件最后添加:
server.1=hadoop005:2888:3888
server.2=hadoop006:2888:3888
server.3=hadoop007:2888:3888
创建tmp文件夹
# mkdir tmp
在tmp文件夹中创建空文件添加myid文本为1
# echo 1 > myid
示例:
# cat myid
1
将配置好的zookeeper拷贝到其他节点:
# scp -r zookeeper-3.4.5/ hadoop006:/opt/modules/
# scp -r zookeeper-3.4.5/ hadoop007:/opt/modules/
注意:修改hadoop006、hadoop007对应/opt/modules/zookeeper-3.4.5/tmp/myid内容
hadoop006:
# echo 2 > myid
hadoop007:
# echo 3 > myid
注意:第一次启动集群严格按照下面的步骤:
启动zookeeper集群(分别在hadoop005、hadoop00、hadoop007上启动)
$ zkServer.sh start
查看状态:
# zkServer.sh status 一个leader两个follower
启动journalnode(分别在hadoop005、hadoop00、hadoop007上执行)
# hadoop-daemon.sh start journalnode
运行jps命令:若是有JournalNode进程说明journalnode执行成功
# jps
示例:
2308 QuorumPeerMain
2439 JournalNode
2486 Jps
格式化HDFS:
# hdfs namenode –format
格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/opt/data/tmp,然后将/opt/data/tmp拷贝到hadoop002的/opt/data/下。
scp -r tmp/ hadoop002: /opt/data/
格式化ZKFC:
# hdfs zkfc –formatZK
启动HDFS(在hadoop001上启动):
# start-dfs.sh
启动YARN(注意:在hadoop003上启动。把namenode和resourceManager分开是因为性能问题,因为他们都要占用大量的资源,所以要分开,启动当然是在不同机器上启动。):
# start-yarn.sh
hadoop2.4.1配置完毕,可以浏览器访问:
NameNode’hadoop001:9000’(active)
NameNode’hadoop002:9000’(standby)
测试集群工作状态的一些指令 :
# hdfs dfsadmin -report 查看hdfs的各节点状态信息
# hdfs haadmin -getServiceState nn1 获取一个namenode节点的HA状态
# hadoop-daemon.sh start namenode 单独启动一个namenode进程
# hadoop-daemon.sh start zkfc 单独启动一个zkfc进程
如果只有3台主机,可以按照如下规划来部署安装
hadoop001 zookeeper journalnode namenode zkfc resourcemanager datanode
hadoop002 zookeeper journalnode namenode zkfc resourcemanager datanode
hadoop003 zookeeper journalnode datanode
hadoop2.4.1集群搭建的更多相关文章
- 懒人记录 Hadoop2.7.1 集群搭建过程
懒人记录 Hadoop2.7.1 集群搭建过程 2016-07-02 13:15:45 总结 除了配置hosts ,和免密码互连之外,先在一台机器上装好所有东西 配置好之后,拷贝虚拟机,配置hosts ...
- hadoop2.7.2集群搭建
hadoop2.7.2集群搭建 1.修改hadoop中的配置文件 进入/usr/local/src/hadoop-2.7.2/etc/hadoop目录,修改hadoop-env.sh,core-sit ...
- hadoop2.8 ha 集群搭建
简介: 最近在看hadoop的一些知识,下面搭建一个ha (高可用)的hadoop完整分布式集群: hadoop的单机,伪分布式,分布式安装 hadoop2.8 集群 1 (伪分布式搭建 hadoop ...
- centos下hadoop2.6.0集群搭建详细过程
一 .centos集群环境配置 1.创建一个namenode节点,5个datanode节点 主机名 IP namenodezsw 192.168.129.158 datanode1zsw 192.16 ...
- Hadoop2.0 HA集群搭建步骤
上一次搭建的Hadoop是一个伪分布式的,这次我们做一个用于个人的Hadoop集群(希望对大家搭建集群有所帮助): 集群节点分配: Park01 Zookeeper NameNode (active) ...
- hadoop2.6.0集群搭建
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- Hadoop2.6.5集群搭建
一. Hadoop的分布式模型 Hadoop通常有三种运行模式:本地(独立)模式.伪分布式(Pseudo-distributed)模式和完全分布式(Fully distributed)模式.安装完成后 ...
- vmware10上三台虚拟机的Hadoop2.5.1集群搭建
由于官方版本的Hadoop是32位,若在64位Linux上安装,则必须先重新在64位环境下编译Hadoop源代码.本环境采用编译后的hadoop2.5.1 . 安装参考博客: 1 http://www ...
- hadoop2.2.0集群搭建与部署
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3818908.html 一.安装环境 1.系统环境 CentOS 6.4 2.集群机器节点ip 节点一i ...
随机推荐
- ListActivity的使用
Android中经常用到列表,ListActivity是实现列表的一种好方法. 使用ListActivity的方法,首先定义布局文件: <?xml version="1.0" ...
- 非阻塞同步算法与CAS(Compare and Swap)无锁算法
锁(lock)的代价 锁是用来做并发最简单的方式,当然其代价也是最高的.内核态的锁的时候需要操作系统进行一次上下文切换,加锁.释放锁会导致比较多的上下文切换和调度延时,等待锁的线程会被挂起直至锁释放. ...
- MySQL建表规范与常见问题
一. 表设计 库名.表名.字段名必须使用小写字母,“_”分割. 库名.表名.字段名必须不超过12个字符. 库名.表名.字段名见名知意,建议使用名词而不是动词. 建议使用InnoDB存储引擎. 存储精确 ...
- 修复 XE8 for Android 方向传感器 headingX,Y,Z 不会动的问题
问题:XE8 for Android 方向传感器无法正常运作(在 XE7 是正常的) 测试:官方示例 Samples\Object Pascal\Mobile Snippets\Orientation ...
- Scalaz(1)- 基础篇:隐式转换解析策略-Implicit resolution
在正式进入scalaz讨论前我们需要理顺一些基础的scalaz结构组成概念和技巧.scalaz是由即兴多态(ad-hoc polymorphism)类型(typeclass)组成.scalaz typ ...
- (学习笔记)PHP的输出echo和print
echo 和 print 之间的差异: echo - 能够输出一个以上的字符串 print - 只能输出一个字符串,并始终返回 1 echo语句 echo 或 echo()均可. 输出换行 echo ...
- 《构建高性能web站点》随笔 无处不在的性能问题
前言– 追寻大牛的足迹,无处不在的“性能”问题. 最近在读郭欣大牛的<构建高性能Web站点>,读完收益颇多.作者从HTTP.多级缓存.服务器并发策略.数据库.负载均衡.分布式文件系统多个方 ...
- Java在方法作用域内创建的内部类
在方法作用域内创建的内部类,用来实现一个接口 /** * Created by xfyou on 2016/11/3. * Java内部类演示 */ public class Parcel3 { pu ...
- SNMPv3/pygal制图/smtplib发邮件
SNMPv3 SNMPv3在路由器端的配置 这个我都没配置过,还得现学现卖这个链接说的是SNMPv3的基本配置 这个链接说的是SNMPv3的view命令,用于管理员可以看到哪些层级的内容 1) 配置 ...
- 你应该知道的10个奇特的 HTML5 单页网站
网页设计师努力寻找新的方式来展现内容.其中一个大的趋势是单页网站,现在被世界上的一些大的品牌广泛采用,使用它们来为用户提供一个快速,干净和简单的而且美丽的网站. 下面是10个令人惊叹的单页 H ...