[记录]如何把普通hadoop集群转换到基于QJM的高可用集群

普通Hadoop集群搭建,可参考本站另一篇文章《超详细配置hadoop2.7.3集群与开发环境》,这里把这个普通集群环境转成基于QJM的高可用集群环境。


配置Zookeeper
高可用集群需要Zookeeper,下载安装,我目前使用的是3.4.9版本,安装目录是:
/opt/zookeeper-3.4.9
我在原来的3台虚拟机上部署zookeeper,这里直接上配置,在conf/zoo.cfg文件的内容如下:

tickTime=2000
dataDir=/home/kime/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=master.hadoop:2888:3888
server.2=slaves1.hadoop:2888:3888
server.3=slaves2.hadoop:2888:3888

上面的配置中,最后三行分别是zookeeper集群中各服务器的地址,格式为:
server.ID=服务器地址:端口1:端口2,其中端口1是集群中各节点与leader交互端口,而端口2是选举leader时使用的端口;

接着在每台虚拟机的dataDir对应的目录下新建myid文件,写入上面配置中对应的ID值。

到每台虚拟机上用bin/zkServer.sh start启动zookeeper服务,用bin/zkCli.sh -server 127.0.0.1:2181连接zookeeper进行测试,无报错即配置成功。

调整普通Hadoop集群配置
这里主要调整的配置文件为core-site.xmlhdfs-site.xml两个文件下面直接上修改后的配置:
core-site.xml配置内容:

<configuration>
<property>
<name>fs.defaultFS</name>
<!--<value>hdfs://master.hadoop:9000</value>-->
<value>hdfs://mycluster</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>master.hadoop:2181,slaves1.hadoop:2181,slaves2.hadoop:2181</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/kime/hadoop-tmp</value>
</property>
<property>
 <name>hadoop.proxyuser.kime.hosts</name>
 <value>*</value>
</property>
<property>
 <name>hadoop.proxyuser.kime.groups</name>
 <value>*</value>
</property>
</configuration>

hdfs-site.xml配置内容:

<configuration>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
 <name>dfs.ha.namenodes.mycluster</name>
 <value>nn1,nn2</value>
</property>
<property>
 <name>dfs.namenode.rpc-address.mycluster.nn1</name>
 <value>master.hadoop:9000</value>
</property>
<property>
 <name>dfs.namenode.rpc-address.mycluster.nn2</name>
 <value>slaves1.hadoop:9000</value>
</property>
<property>
 <name>dfs.namenode.http-address.mycluster.nn1</name>
 <value>master.hadoop:50070</value>
</property>
<property>
 <name>dfs.namenode.http-address.mycluster.nn2</name>
 <value>slaves1.hadoop:50070</value>
</property>
<property>
 <name>dfs.namenode.shared.edits.dir</name>
 <value>qjournal://master.hadoop:8485;slaves1.hadoop:8485;slaves2.hadoop:8485/mycluster</value>
</property>
<property>
 <name>dfs.client.failover.proxy.provider.mycluster</name>
 <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
 <name>dfs.journalnode.edits.dir</name>
 <value>/home/kime/journalnode</value>
</property>
<property>
 <name>dfs.ha.automatic-failover.enabled</name>
 <value>true</value>
 </property>
 <property>
<name>dfs.ha.fencing.methods</name>
<value>shell(/bin/true)</value>
</property>
<!--
 <property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/kime/.ssh/id_rsa</value>
</property>
-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>

启动HA集群前,还需要做的事
1,假设已经停止hadoop集群了
2,先手动把普通集群的namenode的metadata,复制到另外一个namenode虚拟机相同位置(按我这里的配置,是复制/home/kime/hadoop-tmp目录下的name目录),如果是全新的集群,不需要做这个,直接format即可;
3,在所有要启动journalnode服务的虚拟机上,运行命令hadoop-daemon.sh start journalnode
4,在旧的namenode上执行命令hdfs namenode -initializeSharedEdits,选Y;并用hadoop-daemon.sh start namenode启动namenode;
5,在另一个namenode虚拟机上,执行命令hdfs namenode -bootstrapStandby选Y;
6,在所有要部署zookeeper的虚拟机执行命令zkServer.sh start,启动zookeeper服务;
7,在任意一台部署namenode的机器上,执行命令hdfs zkfc -formatZK,初始化zookeeper;

高可用Hadoop集群启动顺序
假设已经按照前面所述配置完成,现在所有服务均未启动,下面是启动顺序说明:
1,先启动所有zookeeper服务,命令为:zkServer.sh start
2,在任意一台namenode机器上启动hadoop,命令为:sbin/start-dfs.shsbin/start-yarn.sh,会自动启动journalNode和ZK failover服务;

» 本文链接地址:https://www.xidige.com/960

打开支付宝扫一扫,即可进行扫码打赏哦

扫码支持
扫码打赏,你说多少就多少

标签:

分享到:

扫一扫 在手机阅读、分享本文

上一篇: 下一篇:
评论区1人评论1,380人参与
  1. 喜博 2017年1月22日 上午7:36  回复

    感谢

电子邮件地址不会被公开。 必填项已用*标注

*

loading

赞助商广告