一、搭建HDFS联盟
1、为什么引入HDFS(NameNode)联盟?
引入Federation的最主要原因是简单,其简单性是与真正的分布式Namenode相比而言的。Federation能够快速的解决了大部分单Namenode HDFS的问题。
Federation是简单鲁棒的设计,由于联盟中各个Namenode之间是相互独立的。Federation整个核心设计实现大概用了3.5个月。大部分改变是在Datanode、Config和Tools,而Namenode本身的改动非常少,这样Namenode原先的鲁棒性不会受到影响。比分布式的Namenode简单,虽然这种实现的扩展性比起真正的分布式的Namenode要小些,但是可以迅速满足需求。另外一个原因是Federation良好的向后兼容性,已有的单Namenode的部署配置不需要任何改变就可以继续工作。
2、什么是HDFS联盟
HDFS Federation使用了多个独立的Namenode/namespace来使得HDFS的命名服务能够水平扩展。在HDFS Federation中的Namenode之间是联盟关系,他们之间相互独立且不需要相互协调。HDFS Federation中的Namenode提供了提供了命名空间和块管理功能。HDFS Federation中的datanode被所有的Namenode用作公共存储块的地方。每一个datanode都会向所在集群中所有的Namenode注册,并且会周期性的发送心跳和块信息报告,同时处理来自Namenode的指令。
作用:(1)实现Load Balance:根据路由规则
(2)缓存更多的元信息(默认情况是存储1000M,可以修改配置文件增加),引入联盟可以存储无穷大的元信息。
3、搭建HDFS的联盟
(*)规划
NameNode: bigdata12 bigdata13
DataNode: bigdata14 bigdata15
(*)准备工作:清除之前的环境
(*)在bigdata12上进行配置
hadoop-env.sh JAVA_HOME /root/training/jdk1.8.0_144
core-site.xml
<property>
<name>hadoop.tmp.dir</name>
<value>/root/training/hadoop-2.7.3/tmp</value>
</property>
mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata12</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
slaves
bigdata14
bigdata15
hdfs-site.xml
<property>
<name>dfs.nameservices</name>
<value>ns1,ns2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1</name>
<value>192.168.100.12:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1</name>
<value>192.168.100.12:50070</value>
</property>
<property>
<name>dfs.namenode.secondaryhttp-address.ns1</name>
<value>192.168.100.12:50090</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns2</name>
<value>192.168.100.13:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.ns2</name>
<value>192.168.100.13:50070</value>
</property>
<property>
<name>dfs.namenode.secondaryhttp-address.ns2</name>
<value>192.168.100.13:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
增加路由规则-----> core-site.xml中
<property>
<name>fs.viewfs.mounttable.abc.homedir</name>
<value>/home</value>
</property>
<property>
<name>fs.viewfs.mounttable.abc.link./hahaha</name>
<value>hdfs://192.168.100.12:9000/hahaha</value>
</property>
<property>
<name>fs.viewfs.mounttable.abc.link./logs</name>
<value>hdfs://192.168.100.13:9000/logs</value>
</property>
<property>
<name>fs.default.name</name>
<value>viewfs://abc</value>
</property>
注意:如果路由规则太多了,不方便维护 ----> 单独创建一个xml文件(mountTable.xml)
参考官方的文档:http://hadoop.apache.org/docs/r2.7.6/hadoop-project-dist/hadoop-hdfs/Federation.html
http://hadoop.apache.org/docs/r2.7.6/hadoop-project-dist/hadoop-hdfs/ViewFs.html
复制到其他节点
scp -r /root/training/hadoop-2.7.3/ root@bigdata13:/root/training
scp -r /root/training/hadoop-2.7.3/ root@bigdata14:/root/training
scp -r /root/training/hadoop-2.7.3/ root@bigdata15:/root/training
对每个NameNode(bigdata12 bigdata13)进行格式化
注意ID号
hdfs namenode -format -clusterId abc
在启动Hadoop之前,应该在对应的NameNode上,创建好目录。
hadoop fs -mkdir hdfs://192.168.100.12:9000/hahaha
hadoop fs -mkdir hdfs://192.168.100.13:9000/logs
一定要注意
[root@bigdata12 training]# hdfs dfs -ls / 查看到的是路由规则,不是目录
4、通过网页验证是否搭建成功
欢迎大佬们扫下面二维码关注我个人微信公众号(Java大数据架构师成长之路)