HDFS HA系列实验之五:client 配置
阅读原文时间:2021年04月20日阅读:1

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>




&nbsp; <name>fs.defaultFS</name>




&nbsp; <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>




&nbsp; &nbsp;<name>dfs.client.failover.proxy.provider.cluster1</name>




&nbsp; &nbsp;<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>




&nbsp; <name>fs.defaultFS</name>




&nbsp; <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