阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop2.0 federation与HA的配置

102次阅读
没有评论

共计 11235 个字符,预计需要花费 29 分钟才能阅读完成。

在上一篇文章《Hadoop2.0 federation 的配置》(见 http://www.linuxidc.com/Linux/2014-05/101180.htm)中介绍了单独配置 federation,本文继续介绍同时配置 HA 和 federation。关于 zookeeper 的安装和配置,这里不做介绍,大家可以参考网上的资料。

1 准备 

假定已经有一个 zookeeper 集群,包含 3 个 zookeeper 节点:

  • zookeeper1
  • zookeeper2
  • zookeeper3

另外,还有 4 个 namenode 节点:

  • namenode1
  • namenode2
  • namenode3
  • namenode4

和 3 个 journalnode 节点:

  • journalnode1
  • journalnode2
  • journalnode3

其他机器角色本文中不涉及的可以参考《hadoop2.0 的安装和基本配置》一文。

2 federation 和 HA 的结构 

我们假定 hadoop 集群的 clusterid 是 hellokitty,有 2 个 namespace/name service,分别是“mycluster”和“yourcluster”,分别挂载在 viewfs 的“/my”和“/your”目录下。

“mycluster”和“yourcluster”都配置成 HA。其中“mycluster”的两个主备 namenode 节点分别是 namenode1 和 namenode2,NN_ID 分别是“nn1”和“nn2”;“yourcluster”的两个主备 namenode 节点分别是 namenode3 和 namenode4,NN_ID 分别是的“nn1”和“nn2”。

如下图所示:

Hadoop2.0 federation 与 HA 的配置 

3 federation 和 HA 的配置 

federation 和 HA 的配置只涉及到 core-site.xml 和 hdfs-site.xml 两个配置文件,其他配置可以文件参考《Hadoop2.0 的安装和基本配置》一文(见 http://www.linuxidc.com/Linux/2014-05/101173.htm)。

为了简单起见,我们先不配置 HA 的自动切换,后面再把 HA 的自动切换配置上。

3.1 core-site.xml 

<configuration>

        <property>

                <name>fs.defaultFS</name>

                <value>viewfs:///</value>

        </property>

        <property>

                <name>fs.viewfs.mounttable.default.link./my</name>

                <value>hdfs://mycluster/</value>

        </property>

        <property>

                <name>fs.viewfs.mounttable.default.link./your</name>

                <value>hdfs://yourcluster/</value>

        </property>

        <property>

                <name>hadoop.tmp.dir</name>

                <value>/home/tmp/hadoop2.0</value>

        </property>

</configuration>

3.2 hdfs-site.xml 

<configuration>

        <property>

                <name>dfs.replication</name>

                <value>1</value>

        </property>

      <property>

                <name>dfs.namenode.name.dir</name>

                <value>/home/dfs/name</value>

        </property>

        <property>

                <name>dfs.datanode.data.dir</name>

                <value>/home/dfs/data</value>

        </property>

        <property>

                <name>dfs.datanode.edit.dir</name>

                <value>/home/dfs/edit</value>

        </property>

        <property>

                <name>dfs.permissions</name>

                <value>false</value>

        </property>

        <property>

                <name>dfs.nameservices</name>

                <value>mycluster,yourcluster</value>

        </property>

        <property>

                <name>dfs.ha.namenodes.mycluster</name>

                <value>nn1,nn2</value>

        </property>

        <property>

                <name>dfs.ha.namenodes.yourcluster</name>

                <value>nn1,nn2</value>

        </property>

        <property>

                <name>dfs.namenode.rpc-address.mycluster.nn1</name>

                <value>namenode1:8020</value>

        </property>

        <property>

                <name>dfs.namenode.rpc-address.mycluster.nn2</name>

                <value>namenode2:8020</value>

        </property>

        <property>

                <name>dfs.namenode.rpc-address.yourcluster.nn1</name>

                <value>namenode1:8020</value>

        </property>

        <property>

                <name>dfs.namenode.rpc-address.yourcluster.nn2</name>

                <value>namenode2:8020</value>

        </property>

        <property>

                <name>dfs.namenode.http-address.mycluster.nn1</name>

                <value>namenode1:50070</value>

        </property>

        <property>

                <name>dfs.namenode.http-address.mycluster.nn2</name>

                <value>namenode2:50070</value>

        </property>

        <property>

                <name>dfs.namenode.http-address.yourcluster.nn1</name>

                <value>namenode1:50070</value>

        </property>

        <property>

                <name>dfs.namenode.http-address.yourcluster.nn2</name>

                <value>namenode2:50070</value>

        </property>

<!–dfs.namenode.shared.edits.dir 的配置在 namenode1 和 namenode2 上用以下这个 –>

        <property>

                <name>dfs.namenode.shared.edits.dir</name>

                <value>qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/mycluster</value>

        </property>

<!–dfs.namenode.shared.edits.dir 的配置在 namenode3 和 namenode4 上用以下这个

        <property>

                <name>dfs.namenode.shared.edits.dir</name>

                <value>qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/yourcluster</value>

        </property>

–>

        <property>

                <name>dfs.journalnode.edits.dir</name>

                <value>/home/dfs/journal</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.client.failover.proxy.provider.yourcluster</name>

                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

        </property>

        <property>

                <name>dfs.ha.fencing.methods</name>

                <value>shell(/bin/true)</value>

        </property>

</configuration>

  • dfs.namenode.shared.edits.dir

这个参数要注意,在两组 HA 中的值是不一样的,即在“mycluster”(namenode1 和 namenode2) 和是“yourcluster”(namenode3 和 namenode4) 中是不同。

 

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-05/101181p2.htm

4 启动

4.1 先启动 journalnode,在 journalnode 节点上执行以下命令

$Hadoop_HOME/sbin/hadoop-daemon.sh start journalnode

4.2 在 namenode1 和 namenode3 上执行格式化命令并启动 namenode

$HADOOP_HOME/bin/hdfs namenode -format –clusterId hellokitty

$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode

4.3 在 namenode2 和 namenode4 上执行 bootstrapStandby 命令并启动 namenode

$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode -bootstrapStandby

$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode

这时 namenode1,namenode2,namenode3,namenode4 四个 namenode 都是“standby”状态。

4.4 在 namenode1 和 namenode3 执行以下命令,切换成“active”状态

$HADOOP_HOME/bin/hdfs haadmin -transitionToActive nn1

4.5 在 datanode 节点上启动 datanode

$HADOOP_HOME/sbin/hadoop-daemon.sh start datanode

5 检查和测试

查看 namenode1,namenode2,namenode3,namenode4 的 HDFS 的监控页面,都能看到所有的 datanode

http://namenode1:50070/dfshealth.jsp

http://namenode2:50070/dfshealth.jsp

http://namenode3:50070/dfshealth.jsp

http://namenode4:50070/dfshealth.jsp

其中 namenode1 和 namenode3 为“active”状态,namenode2 和 namenode4 为“standby”状态。

可以参考《Hadoop2.0 federation 的配置》(见 http://www.linuxidc.com/Linux/2014-05/101180.htm)和《Hadoop2.0 QJM 方式的 HA 的配置》(见 http://www.linuxidc.com/Linux/2014-05/101175.htm)运行 HDFS 命令测试 federation 和 HA 的特性是否生效。

6 配置 HA 的主备自动切换

我们接着通过配置 zookeeper 把 HA 主备自动切换的特性加上。

6.1 在 core-site.xml 加上以下参数

<property>

<name>ha.zookeeper.quorum</name>

<value>zookeeper1:2181,zookeeper2:2181,zookeeper3:2181</value>

</property>

6.2 在 hdfs-site.xml 加上以下参数

<property>

<name>dfs.ha.automatic-failover.enabled</name>

<value>true</value>

</property>

6.3 在 zookeeper 中初始化

$HADOOP_HOME/bin/hdfs zkfc -formatZK

运行这个命令后,会在 zookeeper 上创建一个 /hadoop-ha/mycluster/ 的 znode,用来存放 automatic failover 的数据。

6.4 启动 zkfc daemon 进程

$HADOOP_HOME/sbin/hadoop-daemon.sh start zkfc

在 namenode1,namenode2,namenode3,namenode4 上都启动 zkfc daemon 进程。

这样 2 组 HA 的主备自动切换就配置好了,可以参考《hadoop2.0 HA 的主备自动切换》(见 http://www.linuxidc.com/Linux/2014-05/101176.htm)测试是否生效。

7 实战 tips

federation 并不能解决 namenode 的单点问题,因此在实践中需要给 federation 的每个 namenode 都配置成 HA,才能解决 namenode 的单点问题。

参考资料:

http://hadoop.apache.org/docs/r2.2.0/hadoop-yarn/hadoop-yarn-site/HDFSHighAvailabilityWithQJM.html

http://hadoop.apache.org/docs/r2.2.0/hadoop-project-dist/hadoop-hdfs/Federation.html

 

更多 Hadoop 相关信息见 Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

在上一篇文章《Hadoop2.0 federation 的配置》(见 http://www.linuxidc.com/Linux/2014-05/101180.htm)中介绍了单独配置 federation,本文继续介绍同时配置 HA 和 federation。关于 zookeeper 的安装和配置,这里不做介绍,大家可以参考网上的资料。

1 准备 

假定已经有一个 zookeeper 集群,包含 3 个 zookeeper 节点:

  • zookeeper1
  • zookeeper2
  • zookeeper3

另外,还有 4 个 namenode 节点:

  • namenode1
  • namenode2
  • namenode3
  • namenode4

和 3 个 journalnode 节点:

  • journalnode1
  • journalnode2
  • journalnode3

其他机器角色本文中不涉及的可以参考《hadoop2.0 的安装和基本配置》一文。

2 federation 和 HA 的结构 

我们假定 hadoop 集群的 clusterid 是 hellokitty,有 2 个 namespace/name service,分别是“mycluster”和“yourcluster”,分别挂载在 viewfs 的“/my”和“/your”目录下。

“mycluster”和“yourcluster”都配置成 HA。其中“mycluster”的两个主备 namenode 节点分别是 namenode1 和 namenode2,NN_ID 分别是“nn1”和“nn2”;“yourcluster”的两个主备 namenode 节点分别是 namenode3 和 namenode4,NN_ID 分别是的“nn1”和“nn2”。

如下图所示:

Hadoop2.0 federation 与 HA 的配置 

3 federation 和 HA 的配置 

federation 和 HA 的配置只涉及到 core-site.xml 和 hdfs-site.xml 两个配置文件,其他配置可以文件参考《Hadoop2.0 的安装和基本配置》一文(见 http://www.linuxidc.com/Linux/2014-05/101173.htm)。

为了简单起见,我们先不配置 HA 的自动切换,后面再把 HA 的自动切换配置上。

3.1 core-site.xml 

<configuration>

        <property>

                <name>fs.defaultFS</name>

                <value>viewfs:///</value>

        </property>

        <property>

                <name>fs.viewfs.mounttable.default.link./my</name>

                <value>hdfs://mycluster/</value>

        </property>

        <property>

                <name>fs.viewfs.mounttable.default.link./your</name>

                <value>hdfs://yourcluster/</value>

        </property>

        <property>

                <name>hadoop.tmp.dir</name>

                <value>/home/tmp/hadoop2.0</value>

        </property>

</configuration>

3.2 hdfs-site.xml 

<configuration>

        <property>

                <name>dfs.replication</name>

                <value>1</value>

        </property>

      <property>

                <name>dfs.namenode.name.dir</name>

                <value>/home/dfs/name</value>

        </property>

        <property>

                <name>dfs.datanode.data.dir</name>

                <value>/home/dfs/data</value>

        </property>

        <property>

                <name>dfs.datanode.edit.dir</name>

                <value>/home/dfs/edit</value>

        </property>

        <property>

                <name>dfs.permissions</name>

                <value>false</value>

        </property>

        <property>

                <name>dfs.nameservices</name>

                <value>mycluster,yourcluster</value>

        </property>

        <property>

                <name>dfs.ha.namenodes.mycluster</name>

                <value>nn1,nn2</value>

        </property>

        <property>

                <name>dfs.ha.namenodes.yourcluster</name>

                <value>nn1,nn2</value>

        </property>

        <property>

                <name>dfs.namenode.rpc-address.mycluster.nn1</name>

                <value>namenode1:8020</value>

        </property>

        <property>

                <name>dfs.namenode.rpc-address.mycluster.nn2</name>

                <value>namenode2:8020</value>

        </property>

        <property>

                <name>dfs.namenode.rpc-address.yourcluster.nn1</name>

                <value>namenode1:8020</value>

        </property>

        <property>

                <name>dfs.namenode.rpc-address.yourcluster.nn2</name>

                <value>namenode2:8020</value>

        </property>

        <property>

                <name>dfs.namenode.http-address.mycluster.nn1</name>

                <value>namenode1:50070</value>

        </property>

        <property>

                <name>dfs.namenode.http-address.mycluster.nn2</name>

                <value>namenode2:50070</value>

        </property>

        <property>

                <name>dfs.namenode.http-address.yourcluster.nn1</name>

                <value>namenode1:50070</value>

        </property>

        <property>

                <name>dfs.namenode.http-address.yourcluster.nn2</name>

                <value>namenode2:50070</value>

        </property>

<!–dfs.namenode.shared.edits.dir 的配置在 namenode1 和 namenode2 上用以下这个 –>

        <property>

                <name>dfs.namenode.shared.edits.dir</name>

                <value>qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/mycluster</value>

        </property>

<!–dfs.namenode.shared.edits.dir 的配置在 namenode3 和 namenode4 上用以下这个

        <property>

                <name>dfs.namenode.shared.edits.dir</name>

                <value>qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/yourcluster</value>

        </property>

–>

        <property>

                <name>dfs.journalnode.edits.dir</name>

                <value>/home/dfs/journal</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.client.failover.proxy.provider.yourcluster</name>

                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

        </property>

        <property>

                <name>dfs.ha.fencing.methods</name>

                <value>shell(/bin/true)</value>

        </property>

</configuration>

  • dfs.namenode.shared.edits.dir

这个参数要注意,在两组 HA 中的值是不一样的,即在“mycluster”(namenode1 和 namenode2) 和是“yourcluster”(namenode3 和 namenode4) 中是不同。

 

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-05/101181p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计11235字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中