大数据学习之路(四)——hadoop分布式ha(高可用)

拉着狗继续写

现在开始加入zookeeper


参考文章zookeeper https://zookeeper.apache.org/doc/r3.4.12/

参考文章hadoop ha http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

zookeeper3.4.6, 解压到/usr/local目录下(所有的服务器)

zookeeper的介绍请自行百度,或者去官网查看


ok,节点分布如下

服务器 NN JN DN ZK(zookeeper|QuorumPeerMain) ZKFC(DFSZKFailoverController)
hadoop004 Y Y Y
hadoop001 Y Y Y Y Y
hadoop002 Y Y Y
hadoop003 Y Y

接下来继续写配置文件,还是那几个


1. core-site.xml

<property>
   <name>ha.zookeeper.quorum</name>
   <value>hadoop004:2181,hadoop001:2181,hadoop2:2181</value>
</property>
配置zookeeper所在服务器

2. hdfs-site.xml

<property>
  <!--启用命名空间-->
  <name>dfs.nameservices</name>
  <!-- 这个名字随便取,注意后面配置中要与之对应 -->
  <value>zyf</value>
</property>
<property>
  <!--配置namenode节点别名-->
  <name>dfs.ha.namenodes.zyf</name>
  <value>nn1,nn2</value>
</property>
<property>
  <!--配置namenode节点地址-->
  <name>dfs.namenode.rpc-address.zyf.nn1</name>
  <value>hadoop004:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.zyf.nn2</name>
  <value>hadoop001:8020</value>
</property>
<property>
  <!-- http服务地址 -->
  <name>dfs.namenode.http-address.zyf.nn1</name>
  <value>hadoop004:50070</value>
</property>
<property>
  <name>dfs.namenode.http-address.bjsxt.nn2</name>
  <value>hadoop001:50070</value>
</property>
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <!--配置JN--> <value>qjournal://hadoop001:8485;hadoop002:8485;hadoop003:8485/zyf</value
>
</property>
<property>
  <name>dfs.client.failover.proxy.provider.zyf</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
  <!--ssh验证方式,官网还有另一种-->
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
</property>
<property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/zhengyifan/.ssh/id_rsa</value>
</property>
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/opt/journal</value>
</property>
<property>
   <!--启用高可用-->
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
</property>
ok,和之前的/opt/hadoop一样,保证/opt/journal为空或没有,记得保证有权限

3. zoo.cfg

ZOOKEEPER_HOME目录下/conf下,
cp zoo_sample.cfg zoo.cfg
编辑文件zoo.cfg
# 修改dataDir
dataDir=/opt/zookeeper
# 编辑节点
server.1=hadoop004:2888:3888
server.2=hadoop001:2888:3888
server.3=hadoop002:2888:3888

4. 创建myid

在被指定配置zookeeper的服务器的/opt/zookeeper下新建文件myid
并写入与配置文件对应的数字,例如,hadoop004这台服务器在配置文件中被指定的是server.1,那么myid中写入1,不要有多余的字符

5. scp zookeeper到各个服务器中

6. 分别在三台服务器中启动zookeeper

./zkServer.sh start

7. 启动 JournalNode

./hadoop-daemon.sh start journalnode

8. 格式化其中一台namenode

hdfs namenode -format

9. 同步数据到第二台namenode

启动刚刚格式化的namenode:
start-dfs.sh
在没有格式化的namenode上执行:
hdfs namenode -bootstrapStandby
启动第二个namenode:
start-dfs.sh

10 .格式化ZK

在其中一个namenode上初始化zkfc
hdfs zkfc -formatZK

ok,启动完毕,jps验证各个节点对应的服务是否全部启动

查看hadoop004:50070hadoop001:50070,是否一个为active,一个为standby

停掉active的namenode

hadoop-daemon.sh stop namenode

验证:active的服务页面是否挂掉,standby的节点是否变为active

猜你喜欢

转载自blog.csdn.net/qq_31343581/article/details/80851258