集群容错就是HA。这次顺带也练一下hadoop的HA


环境:

centos6.5+jdk1.7+hadoop2.2.0+tachyon0.5.0+zookeeper3.4.6

hadoop 192.168.1.107

slave1 192.168.1.108

slave2 192.168.1.109

(全虚拟机)


1. 在三台机器上安装jdk,关闭SELINUX,关闭防火墙,配置SSH免密码登陆(hadoop到其他机器上的和slave1到其他机器上的),修改 hosts文件

。。。 。。。


2. 安装zookeeper

2.1 下载解压

。。。 。。。

2.2 在zookeeper目录下创建 data 目录和 logs 目录

mkdir data
mkdir logs

2.3 配置环境变量(root)

vi /etc/profile
export ZOO_HOME=/home/hadoop/zookeeper-3.4.6/
export ZOO_LOG_DIR=/home/hadoop/zookeeper-3.4.6/logs
export PATH=$PAHT:$ZOO_HOME/bin

2.4 配置zoo.cfg(从zoo_sample.cfg复制)

2.4.1 修改dataDir

dataDir=/home/hadoop/zookeeper-3.4.6/data

2.4.2 增加server

server.=hadoop::
server.=slave1::
server.=slave2::

2.5 在/home/hadoop/zookeeper-3.4.6/data 下面新增一个文件myid,内容为1

echo  > /home/hadoop/zookeeper-3.4./data/myid

2.6 把zookeeper 文件夹复制到其他节点
。。。 。。。

2.7 把slave1上的myid文件内容改为2,把slave2上的myid文件内容改为3

.。。 。。。

2.8 启动测试,查看角色(三个都要启)

zkServer.sh start
zkServer.sh status

3. 安装hadoop2.2.0
3.1 下载解压

。。。 。。。

3.2 配置环境变量

。。。 。。。

3.3 修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh 文件中的JAVA_HOME变量

。。。 。。。

3.4 修改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>/home/hadoop/hadoop-2.2./tmp</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop:,slave1:,slave2:</value>
</property>
</configuration>

3.5 修改hdfs-site.xml

 <configuration>
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!-- ns1下面有两个DataNode,分别是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>hadoop:</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>hadoop:</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>slave1:</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>slave1:</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop:8485;slave1:8485;slave2:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/hadoop-2.2./journal</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</value>
</property>
<!-- 使用隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
</configuration>

3.6 修改slaves

hadoop
slave1
slave2

3.7 修改yarn-site.xml

 <configuration>
<!-- 指定resourcemanager地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop</value>
</property>
<!-- 指定nodemanager启动时加载server的方式为shuffle server -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

3.8 修改mapred-site.xml

 <configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

3.9 把hadoop文件夹复制到其他两个节点
。。。 。。。

3.10 启动journalnode进程

sbin/hadoop-daemons.sh start journalnode

3.11 格式化 HDFS

hadoop namenode -format
scp /home/hadoop/hadoop-2.2./tmp/ hadoop@slave1:~/hadoop-2.2./

3.12 格式化 ZK

hdfs zkfc formatZK

3.13 启动 HDFS

sbin/start-dfs.sh

3.14 启动 YARN

sbin/start-yarn.sh

3.15 在 slave1 上启动 namenode

sbin/hadoop-daemon.sh start master

4 安装 tachyon
4.1 下载解压tachyon0.5.0-bin(如果hadoop版本不是2.4,则需要重新编译)

.。。 。。。

4.2 配置环境变量

。。。 。。。

4.3 修改 tachyon-env.sh

JAVA_HOME=/home/hadoop/jdk1..0_71
export JAVA="$JAVA_HOME/bin/java"
export TACHYON_MASTER_ADDRESS=hadoop
export TACHYON_UNDERFS_ADDRESS=hdfs://hadoop:9000
export TACHYON_WORKER_MEMORY_SIZE=512MB
export TACHYON_UNDERFS_HDFS_IMPL=org.apache.hadoop.hdfs.DistributedFileSystem CONF_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" export TACHYON_JAVA_OPTS+="
-Dlog4j.configuration=file:$CONF_DIR/log4j.properties
-Dtachyon.debug=false
-Dtachyon.underfs.address=$TACHYON_UNDERFS_ADDRESS
-Dtachyon.underfs.hdfs.impl=$TACHYON_UNDERFS_HDFS_IMPL
-Dtachyon.data.folder=$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/data
-Dtachyon.workers.folder=$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/workers
-Dtachyon.worker.memory.size=$TACHYON_WORKER_MEMORY_SIZE
-Dtachyon.worker.data.folder=$TACHYON_RAM_FOLDER/tachyonworker/
-Dtachyon.master.worker.timeout.ms=
-Dtachyon.master.hostname=$TACHYON_MASTER_ADDRESS
-Dtachyon.master.journal.folder=$TACHYON_UNDERFS_ADDRESS/tachyon/journal/
-Dtachyon.master.pinlist=/pinfiles;/pindata
-Dorg.apache.jasper.compiler.disablejsr199=true
-Dtachyon.user.default.block.size.byte=
-Dtachyon.user.file.buffer.bytes=
-Dtachyon.usezookeeper=true
-Dtachyon.zookeeper.address=hadoop:,slave1:,slave2:
"

4.4 复制到其他两个节点
。。。 。。。

4.5 修改 slave1 的 MASTER 地址

JAVA_HOME=/home/hadoop/jdk1..0_71
export JAVA="$JAVA_HOME/bin/java"
export TACHYON_MASTER_ADDRESS=slave1
export TACHYON_UNDERFS_ADDRESS=hdfs://hadoop:9000
export TACHYON_WORKER_MEMORY_SIZE=512MB
export TACHYON_UNDERFS_HDFS_IMPL=org.apache.hadoop.hdfs.DistributedFileSystem CONF_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" export TACHYON_JAVA_OPTS+="
-Dlog4j.configuration=file:$CONF_DIR/log4j.properties
-Dtachyon.debug=false
-Dtachyon.underfs.address=$TACHYON_UNDERFS_ADDRESS
-Dtachyon.underfs.hdfs.impl=$TACHYON_UNDERFS_HDFS_IMPL
-Dtachyon.data.folder=$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/data
-Dtachyon.workers.folder=$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/workers
-Dtachyon.worker.memory.size=$TACHYON_WORKER_MEMORY_SIZE
-Dtachyon.worker.data.folder=$TACHYON_RAM_FOLDER/tachyonworker/
-Dtachyon.master.worker.timeout.ms=
-Dtachyon.master.hostname=$TACHYON_MASTER_ADDRESS
-Dtachyon.master.journal.folder=$TACHYON_UNDERFS_ADDRESS/tachyon/journal/
-Dtachyon.master.pinlist=/pinfiles;/pindata
-Dorg.apache.jasper.compiler.disablejsr199=true
-Dtachyon.user.default.block.size.byte=
-Dtachyon.user.file.buffer.bytes=
-Dtachyon.usezookeeper=true
-Dtachyon.zookeeper.address=hadoop:,slave1:,slave2:
"

4.6 格式化 TACHYON

tachyon format

4.7 启动 TACHYON

tachyon-start.sh all SudoMount

(在其他tachyon的教程中一般命令都是"tachyon-start.sh all Mount" ,那是因为他们都是 root 用户,非 root 用户的话则要使用 “SudoMount” ,而且三个节点上的用户都应该是 sudoer )

4.8 在 slave1 启动tachyon 的 master 进程

tachyon-start.sh start master

4.9 进程查看

[hadoop@hadoop tachyon-0.5.-bin]$ jps
DFSZKFailoverController
JournalNode
TachyonWorker
NameNode
NodeManager
QuorumPeerMain
DataNode
Jps
ResourceManager
TachyonMaster [hadoop@slave1 hadoop-2.2.]$ jps
QuorumPeerMain
DataNode
JournalNode
TachyonWorker
TachyonMaster
DFSZKFailoverController
NodeManager
Jps
NameNode [hadoop@slave2 bin]$ jps
Jps
NodeManager
QuorumPeerMain
JournalNode
DataNode
TachyonWorker

5 测试 HA

先访问 http://hadoop:19999

杀掉 hadoop 上的 master 进程(kill -9 9106)

过几十秒后查看 http://slave1:19999


SUCCESS

tachyon 集群容错的更多相关文章

  1. Dubbo工作原理,集群容错,负载均衡

    Remoting:网络通信框架,实现了sync-over-async和request-response消息机制. RPC:一个远程过程调用的抽象,支持负载均衡.容灾和集群功能. Registry:服务 ...

  2. Dubbo 源码分析 - 集群容错之 LoadBalance

    1.简介 LoadBalance 中文意思为负载均衡,它的职责是将网络请求,或者其他形式的负载"均摊"到不同的机器上.避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况.通 ...

  3. Dubbo 源码分析 - 集群容错之 Cluster

    1.简介 为了避免单点故障,现在的应用至少会部署在两台服务器上.对于一些负载比较高的服务,会部署更多台服务器.这样,同一环境下的服务提供者数量会大于1.对于服务消费者来说,同一环境下出现了多个服务提供 ...

  4. Dubbo 源码分析 - 集群容错之 Router

    1. 简介 上一篇文章分析了集群容错的第一部分 -- 服务目录 Directory.服务目录在刷新 Invoker 列表的过程中,会通过 Router 进行服务路由.上一篇文章关于服务路由相关逻辑没有 ...

  5. Dubbo 源码分析 - 集群容错之 Directory

    1. 简介 前面文章分析了服务的导出与引用过程,从本篇文章开始,我将开始分析 Dubbo 集群容错方面的源码.这部分源码包含四个部分,分别是服务目录 Directory.服务路由 Router.集群 ...

  6. dubbo集群容错解决方案

    dubbo主要核心部件 Remoting:网络通信框架,实现了sync-over-async和request-response消息机制. RPC:一个远程过程调用的抽象,支持负载均衡.容灾和集群功能. ...

  7. dubbo源码解析五 --- 集群容错架构设计与原理分析

    欢迎来我的 Star Followers 后期后继续更新Dubbo别的文章 Dubbo 源码分析系列之一环境搭建 博客园 Dubbo 入门之二 --- 项目结构解析 博客园 Dubbo 源码分析系列之 ...

  8. Dubbo负载均衡与集群容错机制

    1  Dubbo简介 Dubbo是一款高性能.轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现. 作为一个轻量级RPC框架,D ...

  9. dubbo负载均衡策略和集群容错策略都有哪些

    dubbo负载均衡策略 random loadbalance 默认情况下,dubbo是random load balance随机调用实现负载均衡,可以对provider不同实例设置不同的权重,会按照权 ...

随机推荐

  1. 第三百四十六天 how can I 坚持

    徐斌的电脑来了,thinkpad,感觉还好,电脑也就这样,联想..不好说,不做评论,末日王者吧. 为什么写博客tab键不管用了呢. 下午又去奥体跑了一圈,好累,刚跑完腿疼,现在还好. 还没洗澡呢,都这 ...

  2. deque 居然已经实现了 insert 接口

    最近有个开发需求,根据server传递来的广告位来展示某条广告. 但最终存储广告的数据结构是deque,里面存储的东西还是对象(stl 基于拷贝语义). 想了半天,在开头和结尾插入比较方便,在中间插入 ...

  3. C# 固定窗体大小且不能鼠标调整大小完美实现

    1.先把MaximizeBox和MinimumBox设置为false,这时你发现最大最小化按钮不见了,但是鼠标仍能调整窗体的大小. 2.有人说直接把MaximumSize和MinimumSize设置成 ...

  4. AcceptEx编辑

    Windows套接字AcceptEx函数接受一个新的连接,返回本地和远程地址,并接收由客户端应用程序发送的第一块数据.Windows 95/98不支持AcceptEx函数. 平台SDK:Windows ...

  5. Android读取assets目录下的资源

    1.获取资源的输入流 资源文件 sample.txt 位于 $PROJECT_HOME/assets/ 目录下,可以在 Activity 中通过 Context.getAssets().open(“s ...

  6. DIV CSS阴影

    .mydiv{ width:250px;height:auto;border:#909090 1px solid;background:#fff;color:#333; filter:progid:D ...

  7. 【flash】关于flash的制作透明gif的一个小技巧

    关于flash的制作透明gif的一个小技巧 或者说是一个需要注意的地方 1.导出影片|gif,得到的肯定是不透明的.2.想要透明背景,必须通过发布.3.flash中想要发布gif动画的话,不能有文字, ...

  8. ......那么Win8.1怎么去掉文件夹?

    (从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期2014-05-11) 细心的朋友会发现,在Win8.1这台电脑(计算机)中,除了我们最熟悉的磁盘外,还新增了视频.图片.文档.下载.音 ...

  9. github命令

    git push origin master //把本地源码库push到Github上 git pull origin master //从Github上pull到本地源码库

  10. java中导入常量

    import关键字除了导入包之外,还可以导入静态成员,这时JDK5.0以上版本提供的新功能.导入静态成员可以是程序员编程更为方便. 使用import导入静态成员的语法为: import static ...