微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Hadoop:HA模式配置与实现

写的不到位的地方,欢迎评论指出不足之处

一、检查系统环境

        1、HostName、Hosts、JDK、SSH、网络、防火墙、数据源

一、集群角色分配表

        注:这只是实例

服务器
NameNodeNameNode Zookepper FailoverController DatanodeZookepperJournalNode
One yes (NN2和其它节点免密)

yes

yes

Two

yes

(NN1和其它节点免密)

yes

yes

yes

yes

Three

yes

yes

yes

Four

yes

yes

二、解压软件

        1、Hadoop、ZooKeeper 软件解压在了 /opt

        2、所有节点上的所有角色数据,都在 /var/hadoop/ha/dfs 目录下(每个节点都一样)

        注:配置的内容只要对,什么形式,大伙随意 

三、配置相关文件

        1、hadoop下的 core-site.xml

<!-- mycluster 配置一个服务逻辑名称 -->
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://myHA</value>
</property>

<!-- 配置 zookeeper 主机名:端口号,以逗号隔开 -->
<property>
   <name>ha.zookeeper.quorum</name>
   <value>two:2181,three:2181,four:2181</value>
</property>

        2、hadoop下的 hdfs-site.xml

<property>
  <name>dfs.nameservices</name>
  <value>myHA</value>
</property>

<!-- 
  为一对多的节点起逻辑名称,用逗号 隔开
  hadoop2.x支持2个 ,hadoop3.x支持5个
-->
<property>
  <name>dfs.ha.namenodes.myHA</name>
  <value>nn1,nn2</value>
</property>

<!-- 为每个节点配置对应的主机名 + 端口号,进行物理映射 -->
<property>
  <name>dfs.namenode.rpc-address.myHA.nn1</name>
  <value>one:8020</value>
</property>
<property>
  <name>dfs.namenode.http-address.myHA.nn1</name>
  <value>one:50070</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.myHA.nn2</name>
  <value>two:8020</value>
</property>
<property>
  <name>dfs.namenode.http-address.myHA.nn2</name>
  <value>two:50070</value>
</property>

<!-- 
  共享 EditLog 
  配置 JNode 协议 ,多个节点用分号隔开,指向服务,服务一对多的方式,给到对应的 NameNode
-->
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://one:8485;two:8485;three:8485/myHA</value>
</property>
<!-- 
  配置 JNode 数据位置
-->
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/var/hadoop/ha/dfs/jnode</value>
</property>

<!-- ha切换 NameNode 主从时命令发给哪个实现类去实现 -->
<property>
  <name>dfs.client.failover.proxy.provider.mycluster</name> 
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<!-- 
  如何发出信息的
  SSH免密(企业不直接使用 root )
-->
<property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value> <!-- 定义免密 -->
</property>
<property>
   <!-- 使用私有密钥,那么配置SSH免密时,就需要使用私有密钥 -->
   <name>dfs.ha.fencing.ssh.private-key-files</name> 
   <!-- 密钥物理位置 -->
   <value>/root/.ssh/id_rsa</value>
</property>

<!--
  认false,配置true
  true:当NameNode启动时,自动启动ZKFC
 -->
<property>
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
</property>

        3、hadoop下的 slaves

two
three
four

        4、配置 zookeeper

cd /opt/apache-zookeeper-3.5.9-bin/conf
# 将 zoo_sample.cfg 复制改名 zoo.cfg

#dataDir=/tmp/zookeeper                # 原本的样子
dataDir= /var/hadoop/ha/dfs/zk         # 修改 ZK 的数据目录

# 追加,server. (1、2、3)可随意写,只要保证是唯一即可,使用过半选举
# 由于zk有两状态(无主、有主),因此两端口号,各干各的事
server.1=two:2888:3888
server.2=three:2888:3888
server.3=four:2888:3888
# clientPort=2181                      #无需修改,这个端口是为了客户端连接通信时使用

        5、配置 zookeeper 权重,权重的目录需要自己创建,其它配置的目录会自动创建

# 在相应的 zookeeper 节点的目录下,加权重
# 权重内容要与配置文件一样
# 每个节点都要加,不要重复
# 1、2、3
echo 1 >  /var/hadoop/ha/dfs/zk/myid

        6、配置环境变量

vim /etc/profile

export JAVA_HOME=/usr/java/default
export HADOOP_HOME=/opt/hadoop-2.10.1
export ZOOKEEPER_HOME=/opt/apache-zookeeper-3.5.9-bin
export PATH=$PATH:${JAVA_HOME}/bin:$HADOOP_HOME/bin
:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin

        7、将配置好的软件,使用 SSH 发送到相应的服务器上,根据角色配置表,进行发送,ZK一定要记得

        注:配置文件调用的是 SSH 的私钥,所以将私钥发送对相关节点免密文件

        8、第一次启动,格式化

主控节点,选在one的带NN的服务器上,(具体随意)

1、# (主控节点上)生成 QuorumPeerMain 进程,在相应的节点启动 ZK
zkServer.sh start

2、# (主控节点上)生成 JournalNode 进程,在相应的节点启动 JN
hadoop-daemon.sh start journalnode

3、# (主控节点上)多个NN,选一个NN节点,进行格式化
hdfs namenode -format

4、# (主控节点上)启动NN(主) / namenode 换 zkfc 就是单独启动zkfc
hadoop-daemon.sh start namenode

5、# (副NN节点上)其它 NN (副)启动时同步数据
hdfs namenode -bootstrapStandby

6、# (主控节点上)进行ZK格式化 
hdfs zkfc -formatZK

7、# 启动服务
start-dfs.sh

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐