參考:https://blog.csdn.net/wild46cat/article/details/53423472
hadoop2.7.3在集群中配置多個namenode(federation cluster)
首先需要說明的是,在集群中配置多個namenode和在集群中使用secondaryNamenode是完完全全的兩碼事。具體是如何區分的,我之后會在寫一篇haoop官方當中的譯文,同時解釋一下這兩者的區別。在這里先簡單的說一下。secondaryNamenode的作用是給namenode分擔壓力的,會定時的幫助namenode做一些處理。而配置多個namenode的相當於配置了一個聯邦集群,每個anmenode之間都不會進行通信,各自管理各自的命名空間。
好,下面上貨。
當然,完成本篇配置的前提:
1、已經能夠配置單個namenode的hadoop集群。
2、haoop集群最好是完全分布式的(偽分布式沒有測試,但是單點估計是不行。)
一、硬件環境:
host1 192.168.1.221
host2 192.168.1.222
host3 192.168.1.223
二、配置文件
其中,host1用作namenode,host2用作namenode,host3用作datanode。
配置文件(每個主機上的相同):hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>4096</value>
</property>
<property>
<name>dfs.federation.nameservices</name>
<value>host1,host2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.host1</name>
<value>host1:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.host1</name>
<value>host1:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address.host1</name>
<value>host1:9001</value>
</property>
<property>
<name>dfs.namenode.rpc-address.host2</name>
<value>host2:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.host2</name>
<value>host2:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address.host2</name>
<value>host2:9001</value>
</property>
</configuration>
host1上的配置文件:core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://host1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
</configuration>
host2上的配置文件:core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://host2:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
</configuration>
host3上的配置文件:core-site.xml(需要說明一下,這里的df.defaultFS配置成任意一個就可以了)
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://host1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
</configuration>
注意,host3作為datanode沒有使用core-site.xml中的配置,而host1和host2在進行文件讀取的時候,都會先讀取本地的core-site.xml這個配置文件。
三、測試截圖
下面是一個簡單的測試,用來顯示和證明這兩個namenode是分開的分別擁有自己的命名空間的。
首先是啟動hadoop:
啟動后,從web中看兩個namenode的情況:
在host1中創建一個目錄。
host1中的文件夾:
在host2中創建一個目錄。
host2中的文件夾:
這樣說明了兩個namenode是分離的,分別保存着自己的文件塊對應表。
原文鏈接:https://blog.csdn.net/wild46cat/article/details/53423472
