HDFS HA系列实验之五:client 配置

Hadoop client访问HDFS是通过client端的hadoop配置文件来访问hadoop集群的,一般的情况下我们在配置文件core-site.xml中配置fs.defaultFS是使用一个类似hdfs://hadoop1:8000/的固定地址和端口,显然这在访问HA时存在很大的局限性:HA如果切换了NN,那么就无法访问了;在federation中只能访问部分HDFS等等。那么在HA和Federation下该如何访问HDFS呢?

1:实验目的
A:client如何访问HA HDFS
B:client如何访问HA HDFS + Federation

2:client如何访问HA HDFS
本实验环境搭建指导: HDFS HA系列实验之二:HA+JournalNode+zookeeper
本实验相关的hadoop配置文件下载(HA+JN+ZK)
根据上面相关资料重新配置HA+JournalNode+zookeeper环境,并格式化后启动,然后使用物理机192.168.100.111(机器名wyy)作为客户端来访问集群。

A:启动集群
[hadoop@product202 ~]$ /app/hadoop/zookeeper345/bin/zkServer.sh start
[hadoop@product202 ~]$ /app/hadoop/hadoop220/sbin/hadoop-daemon.sh start journalnode
[hadoop@product203 ~]$ /app/hadoop/zookeeper345/bin/zkServer.sh start
[hadoop@product203 ~]$ /app/hadoop/hadoop220/sbin/hadoop-daemon.sh start journalnode
[hadoop@product204 ~]$ /app/hadoop/zookeeper345/bin/zkServer.sh start
[hadoop@product204 ~]$ /app/hadoop/hadoop220/sbin/hadoop-daemon.sh start journalnode

[hadoop@product201 ~]$ cd /app/hadoop/hadoop220/
[hadoop@product201 hadoop220]$ bin/hdfs namenode -format
[hadoop@product201 hadoop220]$ bin/hdfs zkfc -formatZK
[hadoop@product201 hadoop220]$ sbin/hadoop-daemon.sh start zkfc
[hadoop@product202 ~]$ cd /app/hadoop/hadoop220/
[hadoop@product202 hadoop220]$ sbin/hadoop-daemon.sh start zkfc
[hadoop@product201 hadoop220]$ sbin/hadoop-daemon.sh start namenode
[hadoop@product202 hadoop220]$ bin/hdfs namenode -bootstrapStandby
[hadoop@product202 hadoop220]$ sbin/hadoop-daemon.sh start namenode
[hadoop@product201 hadoop220]$ sbin/hadoop-daemons.sh start datanode

B:客户端连结测试
将hadoop集群的配置文件复制到客户端192.168.100.111(机器名wyy)的配置目录中,并在客户端的/etc/hosts解析集群的NN机器名。
hadoop@wyy:/app/hadoop/hadoop220/etc$ scp -r hadoop@product201:/app/hadoop/hadoop220/etc/hadoop ./
hadoop@wyy:/app/hadoop/hadoop220/etc$ cat /etc/hosts
    
    
    
    
192.168.100.201 product201 product201.product
192.168.100.202 product202 product202.product
hadoop@wyy:/app/hadoop/hadoop220$ cat etc/hadoop/core-site.xml
    
    
    
    
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://product201:8020</value>
</property>
hadoop@wyy:/app/hadoop/hadoop220/etc$ cd ..
hadoop@wyy:/app/hadoop/hadoop220$ bin/hdfs dfs -mkdir /test
hadoop@wyy:/app/hadoop/hadoop220$ bin/hdfs dfs -put /home/mmicky/data/2013.txt /test/.
hadoop@wyy:/app/hadoop/hadoop220$ bin/hdfs dfs -ls /test
Found 1 items
-rw-r--r--   3 hadoop supergroup  258570165 2014-02-23 13:35 /test/2013.txt

杀死product201 namenode进程,模拟HA故障转移:
[root@product201 ~]# jps
1964 NameNode
1906 DFSZKFailoverController
2425 Jps
2061 DataNode
[root@product201 ~]# kill 1964


此时在客户端连结hadoop 集群的时候就会出错:
hadoop@wyy:/app/hadoop/hadoop220$ bin/hdfs dfs -ls /test
ls: Call From wyy/127.0.1.1 to product201:8020 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused

C:解决方案
使用参数dfs.client.failover.proxy.provider.[nameservice ID],该参数定义HDFS客户端用来和活动的namenode节目联系的java类。配置的java类是用来给HDFS客户端判断哪个namenode节点是活动的,当前是哪个namenode处理客户端的请求,目前hadoop2.2.0提供了唯一的一个实现类是ConfiguredFailoverProxyProvider,除非你自己定义了一个类,否则都将使用这个类。

重新配置hdfs-site.xml和core.xml,然后重新将配置文件发布到所有节点和客户端,再进行测试。
[hadoop@product201 hadoop]$ vi hdfs-site.xml
[hadoop@product201 hadoop]$ cat hdfs-site.xml
    
    
    
    
<property>
   <name>dfs.client.failover.proxy.provider.cluster1</name>
   <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
[hadoop@product201 hadoop]$ vi core-site.xml
[hadoop@product201 hadoop]$ cat core-site.xml
    
    
    
    
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://cluster1</value>
</property>
注意以上配置中cluster1是hdfs-site.xml中定义的[nameservice ID]。

重新启动hadoop集群
hadoop@wyy:/app/hadoop/hadoop220$ bin/hdfs dfs -ls /test
Found 1 items
-rw-r--r--   3 hadoop supergroup  258570165 2014-02-23 13:35 /test/2013.txt

杀死product201 namenode进程,模拟HA故障转移:
[hadoop@product201 hadoop220]$ jps
1776 DFSZKFailoverController
1834 NameNode
1978 Jps
[hadoop@product201 hadoop220]$ kill 1834

此时在客户端连结hadoop集群的时候还是能正常访问
hadoop@wyy:/app/hadoop/hadoop220$ bin/hdfs dfs -ls /test
Found 1 items
-rw-r--r--   3 hadoop supergroup  258570165 2014-02-23 13:35 /test/2013.txt


3:client如何访问HA HDFS + Federation







你可能感兴趣的:(HDFS HA系列实验之五:client 配置)