hadoop客户端配置识别两个高可用(ha)集群的逻辑名称访问

##yarn-site.xml官网配置说明地址:

http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

1.问题描述:

使用distcp时指定源集群地址和目标集群地址时需要指定具体的ip,但是如果集群在nn主备切换之后命令会无法使用;解决办法是需要判断一下active nn;或者直接配置使用多个集群的namespaces

hadoop distcp -Dmapred.job.queue.name=root.userA -pb \
hdfs://192.168.1.1:9000/user/userA/source_path/source_file \
hdfs://192.168.100.1:9000/user/userA/dest_path

2.相关配置参数:

dfs.nameservices           ##配置多个逻辑nameservice名;以逗号分隔

dfs.internal.nameservices  

##配置属于本集群的nameservice;默认等于dfs.nameservices 的值

##根据上面两个参数的解释:

一般情况,某个ha集群只有一个nameservice,且dfs.nameservices只配置了自己集群的一个nameservice;该值刚好被dfs.internal.nameservices继承;因此实际本来就是由dfs.internal.nameservices控制本集群的nameservice就不存在问题;

配置两个ha集群互访时,则首先在dfs.nameservices配置上需要访问的所有nameservices,然后直接列举其他集群nameservice对应的信息(两个nn以及端口等信息);最后再配置dfs.internal.nameservices参数对应的本集群即可;

进一步地,如果一个ha集群有多个namespace(联邦模式下).dfs.nameservices还是配置所有需要识别的逻辑nameservice;然后dfs.internal.nameservices则可以配置上属于自己集群的多个nameservices用逗号分开;

另外,在core-site.xml中配置的当前客户端默认使用的nameservice:

vi core-site.xml

property>
 <name>fs.defaultFS</name>
 <value>hdfs://nameservice1</value>
</property>

3.具体配置举例

vi hdfs-site.xml

##dfs.nameservices配置了需要访问的两个namespace:ns1、ns8;接着直接配置需要使用逻辑名访问的ns8的相关配置信息;

##在dfs.internal.nameservices中配置本集群ns1,然后配置相关信息4.

<!-- services -->
<!-- local sevice and remote service -->
<property>
      <name>dfs.nameservices</name>
      <value>ns1,ns8</value>
</property>

<!-- remote namespace ns8 -->
<!-- service ns8 -->
<property>
	<name>dfs.ha.namenodes.ns8</name>
	<value>nn1,nn2</value>
</property>
<property>
	<name>dfs.namenode.rpc-address.ns8.nn1</name>
	<value>192.168.100.1:8020</value>
</property>
<property>
	<name>dfs.namenode.rpc-address.ns8.nn2</name>
	<value>192.168.100.2:8020</value>
</property>
<property>
	<name>dfs.namenode.http-address.ns8.nn1</name>
	<value>192.168.100.1:50070</value>
</property>
<property>
	<name>dfs.namenode.http-address.ns8.nn2</name>
	<value>192.168.100.2:50070</value>
</property>
<property>
    <name>dfs.client.failover.proxy.provider.ns8</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>


<!-- local namespace ns1 -->
<!-- service ns1 -->
<property>
      <name>dfs.internal.nameservices</name>
      <value>ns1</value>
</property>
<property>
    <name>dfs.ha.namenodes.ns1</name>
    <value>nn1,nn2</value>
</property>
<property>
    <name>dfs.namenode.rpc-address.ns1.nn1</name>
    <value>dev01:8020</value>
</property>
<property>
    <name>dfs.namenode.rpc-address.ns1.nn2</name>
    <value>dev02:8020</value>
</property>
<property>
    <name>dfs.namenode.http-address.ns1.nn1</name>
    <value>dev01:50070</value>
</property>
<property>
    <name>dfs.namenode.http-address.ns1.nn2</name>
    <value>dev02:50070</value>
</property>
<property>
    <name>dfs.client.failover.proxy.provider.ns1</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

4.验证

##配置之后,可以使用命令验证:

hadoop fs -ls /
hadoop fs -ls hdfs://ns1/          ##访问客户端默认的集群

hadoop fs -ls hdfs://ns8/          ##访问ns8集群

然后distcp命令可以如下简化;并且不用关心主备是否切换。

hadoop distcp -Dmapred.job.queue.name=root.userA -pb \
hdfs://ns1/user/userA/source_path/source_file \
hdfs://ns8/user/userA/dest_path

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是hadoop高可用集群配置的步骤: 1. 配置hadoop集群的core-site.xml文件,增加如下配置: ```xml <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>zk1:2181,zk2:2181,zk3:2181</value> </property> ``` 2. 配置hadoop集群的hdfs-site.xml文件,增加如下配置: ```xml <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>node1:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>node2:8020</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>node1:50070</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>node2:50070</value> </property> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/data/journal</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/hadoop/.ssh/id_rsa</value> </property> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> ``` 3. 配置hadoop集群的mapred-site.xml文件,增加如下配置: ```xml <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> ``` 4. 配置hadoop集群的yarn-site.xml文件,增加如下配置: ```xml <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.cluster-id</name> <value>mycluster</value> </property> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>node1</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>node2</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm1</name> <value>node1:8088</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm2</name> <value>node2:8088</value> </property> <property> <name>yarn.resourcemanager.zk-address</name> <value>zk1:2181,zk2:2181,zk3:2181</value> </property> ``` 5. 配置zookeeper集群的zoo.cfg文件,增加如下配置: ```cfg server.1=node1:2888:3888 server.2=node2:2888:3888 server.3=node3:2888:3888 ``` 6. 在每个节点上创建一个myid文件,文件内容为该节点在zookeeper集群中的编号,例如在node1上创建myid文件,文件内容为1。 7. 启动zookeeper集群。 8. 在hadoop集群的每个节点上启动journalnode: ```bash hadoop-daemon.sh start journalnode ``` 9. 在namenode1上格式化hdfs: ```bash hdfs namenode -format ``` 10. 在namenode1上启动hdfs: ```bash start-dfs.sh ``` 11. 在namenode1上启动yarn: ```bash start-yarn.sh ``` 12. 在namenode1上启动自动故障转移: ```bash hdfs haadmin -transitionToActive nn1 ``` 13. 在namenode2上启动hdfs: ```bash start-dfs.sh ``` 14. 在namenode2上启动yarn: ```bash start-yarn.sh ``` 15. 在namenode2上启动自动故障转移: ```bash hdfs haadmin -transitionToStandby nn2 ``` 16. 测试hadoop高可用集群是否正常工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值