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>

<property>
    <name>ipc.client.connect.timeout</name>
    <value>90000</value>
</property>

<property>
    <name>ipc.client.connect.max.retries</name>
    <value>100</value>
    <description>Indicates the number of retries a client will make to establish a server connection.</description>
</property>
<property>
    <name>ipc.client.connect.retry.interval</name>
    <value>10000</value>
    <description>Indicates the number of milliseconds a client will wait for before retrying to establish a server connection.</description>
</property>

        2、hadoop下的 hdfs-site.xml

<property>
  <name>dfs.replication</name>
  <value>2</value>
</property>
<property>
  <name>dfs.namenode.name.dir</name>
  <value>/var/hadoop/ha/dfs/name</value>
</property>
<property>
  <name>dfs.datanode.data.dir</name>
  <value>/var/hadoop/ha/dfs/data</value>
</property>


<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.myHA</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>


<property>
   <name>dfs.qjournal.start-segment.timeout.ms</name>
   <value>90000</value>
</property>
<property>
   <name>dfs.qjournal.select-input-streams.timeout.ms</name>
   <value>90000</value>
</property>
<property>
   <name>dfs.qjournal.write-txns.timeout.ms</name>
   <value>90000</value>
</property>

        3、hadoop下的 slaves

two
three
four

        4、配置 zookeeper

cd /opt/zookeeper-3.4.6/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.6.5
export ZOOKEEPER_HOME=/opt/zookeeper-3.4.6
export PATH=$PATH:${JAVA_HOME}/bin:$HADOOP_HOME/bin
:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin

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

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

六、第一次启动,格式化

主控节点,选在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

七、之后启动通过脚本

# 创建一个 sh 脚本文件
# 编辑内容

ssh two "/opt/zookeeper-3.4.6/bin/zkServer.sh start"
ssh three "/opt/zookeeper-3.4.6/bin/zkServer.sh start"
ssh four "/opt/zookeeper-3.4.6/bin/zkServer.sh start"
ssh one "/opt/hadoop-2.10.1/sbin/start-dfs.sh"

八、通过命令操作 hdfs

hdfs dfs -mkdir -p '/data/root'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

家道消乏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值