HDFS HA 集群搭建:

  DN(DataNode):3个;NN(NameNode):2;ZK(ZooKeeper):3(大于1的奇数个);ZKFC:和NN在同一台机器;JN:3;RM(ResourceManager):1;DM(DataManager):3个;与DN在同一台,就近原则

  √表示在该机器上有该进程。

  NN DN ZK ZKFC JN RM DM
Node1      
Node2  
Node3      
Node4        

1.解压  hadoop-2.5.2.tar.gz

[hadoop@node1 software]$ tar -zxvf hadoop-2.5..tar.gz 

其中 -zxvf 含义如下:

-z, gzip : 对归档文件使用 gzip 压缩

-x, --extract, --get : 释放归档文件中文件及目录

-v, --verbose : 显示命令整个执行过程

-f, --file=ARCHIVE : 指定 (将要创建或已存在的) 归档文件名

这里注意,我们的环境为CentOS7 64位系统,这里的tar包也需要为64位,可以使用如下方法查看hadoop tar包是32位还是64位:

/hadoop-2.5./lib/native
[hadoop@node1 native]$ ls
libhadoop.a libhadoop.so libhadooputils.a libhdfs.so
libhadooppipes.a libhadoop.so.1.0. libhdfs.a libhdfs.so.0.0.
[hadoop@node1 native]$ file libhadoop.so.1.0.
libhadoop.so.1.0.: ELF -bit LSB shared object, x86-, version (SYSV), dynamically linked, BuildID[sha1]=29e15e4c9d9840a7b96b5af3e5732e5935d91847, not stripped

2.进入hadoop解压后的目录修改hadoop-env.sh,主要修改JAVA_HOME

[hadoop@node1 hadoop]$ echo $JAVA_HOME
/usr/java/jdk1..0_75
[hadoop@node1 hadoop]$ vim hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1..0_75

2. 修改hdfs-site.xml,可以参照官档 http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

<configuration>
<!--配置服务名称,名称可以随意-->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!--配置所有NameNode名称,这里名称随意-->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!--配置所有NameNode的RPC协议端口-->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>node1.example.com:</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node2.example.com:i8020</value>
</property>
<!--配置Http协议端口和主机-->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>node1.example.com:</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node2.example.com:</value>
</property>
<!--配置JournalNodes 的地址-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node2:8485;node3:8485;node4:8485/mycluster</value>
</property>
<!--配置客户端要使用的类,客户端使用这个类找到Active NodeName-->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--配置sshfence-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_dsa</value>
</property> <!--配置JournalNodes的工作目录-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/jn/data</value>
</property> <!--开启自动切换,当然手动切换也是可用用的-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property> </configuration>

3.配置core-site.xml

<configuration>
<!--配置NameNode入口,这里配置集群名称,不能配置具体的ip-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!--配置zk,表明zk在哪些机器上有-->
<property>
<name>ha.zookeeper.quorum</name>
<value>node1:,node2:,node3:</value>
</property>
<!--修改hadoop的临时目录,默认目录在系统的tmp目录下-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop</value>
</property> </configuration>

4.配置zk

initLimit=
syncLimit=
dataDir=/opt/zookeeper
clientPort= server.=node1::
server.=node2::
server.=node3::

在配置的dataDir目录下创建myid文件,在node1上配置,稍后还要在node2,node3做相应配置

[hadoop@node1 zookeeper]$ cat /opt/zookeeper/myid

将node1上的zookeeper目录拷贝的node2,及node3上

[root@node1 opt]# scp -r zookeeper/ root@node2:/opt/
[root@node1 opt]# scp -r zookeeper/ root@node3:/opt/

并在node2及node3上分别修改myid文件,node2修改为2,node3修改为3

将node1上的zk的目录拷贝到node2,node3上

[hadoop@node1 software]$ scp -r zookeeper-3.4. hadoop@node2:/home/hadoop/software/
[hadoop@node1 software]$ scp -r zookeeper-3.4. hadoop@node3:/home/hadoop/software/

配置3台节点的ZK_HOME的环境变量:

[root@node1 bin]# vim /etc/profile
export ZK_HOME=/home/hadoop/software/zookeeper-3.4.
export PATH=$PATH:$ZK_HOME/bin

关闭防火墙,并在3台机器上分别启动zk

# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/hadoop/software/zookeeper-3.4./bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
# jps
Jps
QuorumPeerMain

5.配置slaves

[root@node1 hadoop]# vim slaves 

node2
node3
node4

6,将配置好的hadoop目录拷贝到其他节点

[hadoop@node1 hadoop]$ scp * hadoop@node2:/home/hadoop/software/hadoop-2.5./etc/hadoop/
[hadoop@node1 hadoop]$ scp * hadoop@node3:/home/hadoop/software/hadoop-2.5./etc/hadoop/
[hadoop@node1 hadoop]$ scp * hadoop@node4:/home/hadoop/software/hadoop-2.5./etc/hadoop/

7. 启动JournalNode

分别在node2,node3,node4机器上上启动JournalNode

[hadoop@node2 sbin]$ ./hadoop-daemon.sh start journalnode
starting journalnode, logging to /home/hadoop/software/hadoop-2.5./logs/hadoop-hadoop-journalnode-node2.out
[hadoop@node2 sbin]$ jps
JournalNode
Jps
QuorumPeerMain
[hadoop@node2 sbin]$

8.在其中一台含有Namenode的机器上进行格式化

[hadoop@node1 bin]$ ./hdfs namenode -format

9.将刚才格式化好的元数据文件拷贝到其他的namenode节点上

  9.1 先启动刚才格式化后的Namenode节点(只启动NameNode)

[hadoop@node1 sbin]$ ./hadoop-daemon.sh start namenode
[hadoop@node1 sbin]$ jps
QuorumPeerMain
NameNode
Jps

  9.2 再在未格式化的节点上执行以下命令:

[hadoop@node2 bin]$ ./hdfs namenode -bootstrapStandby

  检查是否有相应目录生成

10.先停止所有的服务,除了ZK

[hadoop@node1 sbin]$ ./stop-dfs.sh
Stopping namenodes on [node1 node2]
node2: no namenode to stop
node1: stopping namenode
node2: no datanode to stop
node4: no datanode to stop
node3: no datanode to stop
Stopping journal nodes [node2 node3 node4]
node3: stopping journalnode
node2: stopping journalnode
node4: stopping journalnode
Stopping ZK Failover Controllers on NN hosts [node1 node2]
node2: no zkfc to stop
node1: no zkfc to stop
[hadoop@node1 sbin]$

11.格式化zkfc ,在任意一台有Namenode机器上进行格式化

[hadoop@node1 bin]$ ./hdfs zkfc -formatZK

12.启动hdfs

[hadoop@node1 sbin]$ ./start-dfs.sh
Starting namenodes on [node1 node2]
node1: starting namenode, logging to /home/hadoop/software/hadoop-2.5./logs/hadoop-hadoop-namenode-node1.out
node2: starting namenode, logging to /home/hadoop/software/hadoop-2.5./logs/hadoop-hadoop-namenode-node2.out
node4: starting datanode, logging to /home/hadoop/software/hadoop-2.5./logs/hadoop-hadoop-datanode-node4.out
node2: starting datanode, logging to /home/hadoop/software/hadoop-2.5./logs/hadoop-hadoop-datanode-node2.out
node3: starting datanode, logging to /home/hadoop/software/hadoop-2.5./logs/hadoop-hadoop-datanode-node3.out
Starting journal nodes [node2 node3 node4]
node3: starting journalnode, logging to /home/hadoop/software/hadoop-2.5./logs/hadoop-hadoop-journalnode-node3.out
node2: starting journalnode, logging to /home/hadoop/software/hadoop-2.5./logs/hadoop-hadoop-journalnode-node2.out
node4: starting journalnode, logging to /home/hadoop/software/hadoop-2.5./logs/hadoop-hadoop-journalnode-node4.out
Starting ZK Failover Controllers on NN hosts [node1 node2]
node1: starting zkfc, logging to /home/hadoop/software/hadoop-2.5./logs/hadoop-hadoop-zkfc-node1.out
node2: starting zkfc, logging to /home/hadoop/software/hadoop-2.5./logs/hadoop-hadoop-zkfc-node2.out
[hadoop@node1 sbin]$ jps
Jps
QuorumPeerMain
NameNode
DFSZKFailoverController
[hadoop@node1 sbin]$

通过jps查看需要的节点是否启动成功

[hadoop@node2 opt]$  jps
JournalNode
DataNode
DFSZKFailoverController
NameNode
Jps
QuorumPeerMain
[hadoop@node2 opt]$
[hadoop@node3 opt]$ jps
JournalNode
QuorumPeerMain
DataNode
Jps
[hadoop@node3 opt]$
[hadoop@node4 sbin]$ jps
Jps
DataNode
JournalNode
[hadoop@node4 sbin]$

13,通过浏览器访问

哪个节点为 Standby,哪个为active是通过CPU竞争机制。  

测试创建目录和上传文件:

[hadoop@node1 bin]$ ./hdfs dfs -mkdir -p /usr/file
[hadoop@node1 bin]$ ./hdfs dfs -put /home/hadoop/software/jdk-7u75-linux-x64.rpm /usr/file/

到此 Hadoop2.x HA 就搭建完成。

hadoop 2.x 完全分布式搭建的更多相关文章

  1. Hadoop简介与伪分布式搭建—DAY01

    一.  Hadoop的一些相关概念及思想 1.hadoop的核心组成: (1)hdfs分布式文件系统 (2)mapreduce 分布式批处理运算框架 (3)yarn 分布式资源调度系统 2.hadoo ...

  2. hadoop集群完全分布式搭建

    Hadoop环境搭建:完全分布式 集群规划: ip                 hostname 192.168.204.154     master      namenode   resour ...

  3. hadoop集群为分布式搭建

    1.准备Linux环境设置虚拟机网络    1.0点击VMware快捷方式,右键打开文件所在位置 -> 双击vmnetcfg.exe -> VMnet1 host-only ->修改 ...

  4. 大数据系列(3)——Hadoop集群完全分布式坏境搭建

    前言 上一篇我们讲解了Hadoop单节点的安装,并且已经通过VMware安装了一台CentOS 6.8的Linux系统,咱们本篇的目标就是要配置一个真正的完全分布式的Hadoop集群,闲言少叙,进入本 ...

  5. Hadoop学习笔记(3)——分布式环境搭建

    Hadoop学习笔记(3) ——分布式环境搭建 前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里, ...

  6. hadoop分布式搭建

    1.新建三台机器,分别为: hadoop分布式搭建至少需要三台机器: master extension1 extension2 本文利用在VMware Workstation下安装Linux cent ...

  7. hadoop完全分布式搭建HA(高可用)

    2018年03月25日 16:25:26 D调的Stanley 阅读数:2725 标签: hadoop HAssh免密登录hdfs HA配置hadoop完全分布式搭建zookeeper 配置 更多 个 ...

  8. Hadoop生态圈-hbase介绍-完全分布式搭建

    Hadoop生态圈-hbase介绍-完全分布式搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  9. 超详细解说Hadoop伪分布式搭建--实战验证【转】

    超详细解说Hadoop伪分布式搭建 原文http://www.tuicool.com/articles/NBvMv2原原文 http://wojiaobaoshanyinong.iteye.com/b ...

随机推荐

  1. insertBefore的兼容性问题

    父级.insertBefore(新的元素,被插入的元素)方法 在指定的元素前面插入一个新元素 在ie下如果第二个参数的节点不存在,会报错 在其他浏览器下如果第二个参数不存在,则会以appendChil ...

  2. PAT 1029. 旧键盘(20)

    旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及实际被输入的文字,请你列出肯定坏掉的那些键. 输入格式: 输入在2行中分别给出应该输入的文字.以及实际 ...

  3. P1835 素数密度_NOI导刊2011提高(04)

    题目描述 给定区间[L,R](L≤R≤2147483647,R-L≤1000000),请计算区间中素数的个数. 输入输出格式 输入格式: 两个数L和R. 输出格式: 一行,区间中素数的个数. 输入输出 ...

  4. 搜索引擎关键词劫持之asp篇

    摘要:关键词劫持(黑帽seo)其实原理很简单:搜索引擎关键词劫持的过程实际上就是,修改肉鸡站点(webshell站点)A的首页(希望被搜索引擎收录的页面,一般情况下是首页),使之做出判断... 黑帽S ...

  5. BZOJ 1066 【SCOI2007】 蜥蜴

    Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为$1$,蜥蜴的跳跃距离是d,即蜥蜴可以跳 ...

  6. LINQ 查询表达式(C# 编程指南)

    语言集成查询 (LINQ) 是一组技术的名称,这些技术建立在将查询功能直接集成到 C# 语言(以及 Visual Basic 和可能的任何其他 .NET 语言)的基础上.  借助于 LINQ,查询现在 ...

  7. React Native中设计主题机制

    昨天和同事讨论组件隔离性的时候讨论到关于默认样式的问题:很多情况下我们希望能够把组件设计为通用的,然后在具体项目中给他们指定一些通用的样式,譬如:背景颜色.默认字体等等.这听起来在CSS下运作起来就很 ...

  8. 给大一的学弟学妹们培训java web的后台开发讨论班计划

    蓝旭工作室5月大一讨论班课程计划   课时 讨论班性质 讨论班名称 主要内容 主讲人   第一讲 先导课 后台开发工具的使用与MySQL数据库基础 后台开发工具的基本使用方法与工程的创建,MySQL数 ...

  9. leetcode 315. Count of Smaller Numbers After Self 两种思路(欢迎探讨更优解法)

    说来惭愧,已经四个月没有切 leetcode 上的题目了. 虽然工作中很少(几乎)没有用到什么高级算法,数据结构,但是我一直坚信 "任何语言都会过时,只有数据结构和算法才能永恒". ...

  10. 如何在 apache 中开启 gzip 压缩服务

    服务器设置 gzip 压缩是 web 开发里很普遍的做法.假设你要请求一个 100k 的文件,网络传输速度为 50k/s,需要 2s 才能得到数据,但是如果在服务器设置了 gzip 压缩,将服务端的文 ...