Hadoop集群搭建实验(4) _HDFS Federation联邦集群部署

参考文章:

https://blog.csdn.net/pengxiaozhen1111/article/details/88095914

https://blog.csdn.net/wild46cat/article/details/53423472

https://blog.csdn.net/qq_39532946/article/details/76461110

https://my.oschina.net/cloudcoder/blog/880812

https://blog.csdn.net/u014679456/article/details/81486863

https://blog.csdn.net/liuzhuang2017/article/details/81630116

什么是NameNode Fedaeration联邦(HDFS联邦,Hadoop联邦)?

单个 NameNode 的集群架构使得 HDFS 在集群扩展性和性能上都有潜在的问题,当集群大到一定程度后,NameNode 进程用于存放元数据的内存可能会达到上百 G,NameNode 成为了性能瓶颈。为了解决NameNode内存不足导致无法存放更多元数据的瓶颈,提出了 NameNode 的水平扩展方案: HDFS Federation。Federation 中文意思为联邦,联盟,本质上是 NameNode 的 Federation,也就是会有多个NameNode。多个 NameNode 也意味着有多个 NameSpace(命名空间)

NameNode内存瓶颈:数据量越大,元数据也越多,内存有限,承载不了

NameNodeCPU瓶颈:业务量大,客户端多,高并发,读写请求,响应不了

实验目标:部署一个小型的HDFS联邦集群 ,用于教学演示
环境要求:    虚拟机VirtualBox     操作系统 Centos7    hadoop版本  hadoop-2.6.0-cdh5.7.0

集群规划:

主机ip主机名集群中的角色作用
192.168.56.9master1NameNode 存放电影应用的元数据
192.168.56.10master2NameNode 存放音乐应用的元数据
192.168.56.11slave1DataNode存储实际数据的公共节点
192.168.56.12slave2DataNode存储实际数据的公共节点
    

 

0  搭建HDFS联邦集群实验的准备:  
1)修改VirtualBox的虚拟机的名称
master1
master2
slave1
slave2

2)vi /etc/hosts  每台都要修改

192.168.56.9 master1
192.168.56.10 master2
192.168.56.11 slave1
192.168.56.12 slave2

3) SSH免密设置
1)为简化实验步骤,只配置
从master1主机到slave1,slave2主机的SSH免密登陆;
从master2主机到slave1,slave2主机的SSH免密登陆;

为稳妥起见,也可以把任意4个虚拟机之间的SSH免密登陆都配置一遍(配置SSH免密登录方法参考HAdoop HA实验)


4)对master1,master,slave1和slave2这4个主机都要清除无效的本地数据文件

执行命令 cd  /root/hdfs/tmp切换该目录,执行命令rm -rf /root/hdfs/tmp/* 清空目录所有的垃圾数据文件


5)剩下的步骤,参考本实验文档https://blog.csdn.net/qq_35447918/article/details/101761798完成实验即可

 

 

实验步骤:

1)先从完全分布式集群中的master主机复制一台新虚拟机,必须关机才能复制,  完成后启动新虚拟机

2)在新建虚拟机自带界面登陆, 通过配置文件修改虚拟机IP地址为192.168.56.9

配置文件位置/etc/sysconfig/network-scripts/ifcfg-enp0s8,文件名和网络接口名称对应, 然后service network restart重启网络接口

3)用XSHELL远程登录新虚拟机,请注意VirtualBox主机网络管理器的虚拟网卡IP地址必须和CentOS一个网段

4)修改前两台虚拟机的hostname主机名

新虚拟机的主机名修改为master1   vi /etc/hostname 

启动master主机, 主机名修改为master2      vi /etc/hostname   

注意:修改后要把当前的XSHELL登录会话断开再重新连接一下, 终端显示的主机名才会更新

5)依次修改四台主机的的hosts文件

启动 slave1, salve2,依次在master1, master2, slave1, salve2四台主机的终端执行  vi /etc/hosts   修改hosts文件,文件前两行必须保留不要修改,删除掉多余的行,新增加4行 

192.168.56.9     master1
192.168.56.10   master2
192.168.56.11   slave1
192.168.56.12   slave2

6)设置master1, master2, slave1, salve2四台主机之间的免密登陆,ssh免密登录成功后,必须输入exit退出并返回原会话,避免混淆

7)依次检查一下master1, master2, slave1, salve2四台主机的slave文件,执行命令:

cd /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop

cat slaves

slaves文件的内容都必须是:

slave1
slave2

8)检查一下master1, master2, slave1, salve2四台主机的环境变量

执行 echo $JAVA_HOME 和 echo $HADOOP_HOME 两个命令,查看输出的路径是否正确,测试一下环境变量是否生效

9)检查一下master1, master2, slave1, salve2四台主机的防火墙firewall和SeLinux是否关闭

关闭防火墙命令 systemctl disable firewalld 关闭后执行systemctl status firewalld查看防火墙状态为inactive,关闭成功

关闭SeLinux命令 setenforce 0 关闭后执行getenforce查看SeLinux的状态为Permissive,关闭成功

=============下面的步骤开始修改配置参数=================

请注意有的配置参数是针对master1,有的是针对master2,也就是master1和master2的配置参数是不一样的

10)修改主机master1的配置文件core-site.xml

core-site.xml文件路径是/usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop/core-site.xml

cd /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop

vi core-site.xml

删除掉<configuration> </configuration>之间原来的内容,替换为以下的配置参数,注意

 

     <property>
               <name>fs.defaultFS</name>
               <value>hdfs://master1:8020/</value>
    </property>

    <property>
               <name>hadoop.tmp.dir</name>
               <value>/root/hdfs/tmp</value>
    </property>
    
    <property>
        <name>fs.viewfs.mounttable.federation.homedir</name>
        <value>/home</value>
    </property>

    <property>
        <name>fs.viewfs.mounttable.federation.link./movie</name>
        <value>hdfs://master1:9000/movie</value>
    </property>

    <property>
        <name>fs.viewfs.mounttable.federation.link./music</name>
        <value>hdfs://master2:9000/music</value>
    </property>

    <property>
        <name>fs.default.name</name>
        <value>viewfs://federation</value>
    </property>    

11)修改主机master2的配置文件core-site.xml

core-site.xml文件路径是/usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop/core-site.xml

cd /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop

vi core-site.xml

删除掉<configuration> </configuration>之间原来的内容,替换为以下的配置参数

    <property>
               <name>fs.defaultFS</name>
               <value>hdfs://master2:8020/</value>
    </property>

    <property>
               <name>hadoop.tmp.dir</name>
               <value>/root/hdfs/tmp</value>
    </property>
    
    <property>
        <name>fs.viewfs.mounttable.federation.homedir</name>
        <value>/home</value>
    </property>

    <property>
        <name>fs.viewfs.mounttable.federation.link./movie</name>
        <value>hdfs://master1:9000/movie</value>
    </property>

    <property>
        <name>fs.viewfs.mounttable.federation.link./music</name>
        <value>hdfs://master2:9000/music</value>
    </property>

    <property>
        <name>fs.default.name</name>
        <value>viewfs://federation</value>
    </property>    

12)修改主机master1的配置文件hdfs-site.xml

hdfs-site.xml文件路径是/usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop/hdfs-site.xml

cd /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop

vi hdfs-site.xml

删除掉<configuration> </configuration>之间原来的内容,替换为以下的配置参数

    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>

    <property>
	    <name>dfs.nameservices</name>
	    <value>ns1, ns2</value>
    </property>
				
    <property>
	    <name>dfs.namenode.rpc-address.ns1</name>
	    <value>master1:9000</value>
    </property>	

    <property>
	<name>dfs.namenode.http-address.ns1</name>
	<value>master1:50070</value>
    </property>					

    <property>
	    <name>dfs.namenode.secondaryhttp-address.ns1</name>
	    <value>master1:50090</value>
    </property>	

    <property>
	    <name>dfs.namenode.rpc-address.ns2</name>
	    <value>master2:9000</value>
    </property>	

    <property>
	    <name>dfs.namenode.http-address.ns2</name>
	    <value>master2:50070</value>
    </property>					

    <property>
	    <name>dfs.namenode.secondaryhttp-address.ns2</name>
	    <value>master2:50090</value>
    </property>	

13)把master1core-site.xml 文件远程拷贝到slave1,slave2

master1主机依次执行远程拷贝命令:

scp core-site.xml  root@slave1:/usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop

scp core-site.xml  root@slave2:/usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop

把master1主机的配置文件core-site.xml 依次远程拷贝

slave1和slave2的配置文件目录/usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop,覆盖原有的配置文件core-site.xml

14)把master1hdfs-site.xml 文件远程拷贝到master2, slave1,slave2

master1主机依次执行远程拷贝命令:

scp hdfs-site.xml  root@master2:/usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop

scp hdfs-site.xml  root@slave1:/usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop

scp hdfs-site.xml  root@slave2:/usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop

把master1主机的配置文件hdfs-site.xml 依次远程拷贝

master2, slave1和slave2的配置文件目录/usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop,覆盖原有配置文件hdfs-site.xml

15)格式化之前,先清空/root/hdfs/tmp目录

依次在master1, master2, slave1, salve2四台主机的终端:

cd  /root/hdfs/tmp  进入tmp目录

执行 rm -rf * 命令清空 /root/hdfs/tmp已有全部内容

16)依次格式化master1和master2的HDFS文件系统

master1, mater2, slave1, slave2四个节点全部启动后,首次启动HDFS联邦集群之前,必须先格式化HDFS文件系统,必须依次对master1和master2执行格式化千万不要在slave1, slave2重复执行格式化命令

先在maste1执行格式化: hdfs namenode -format -clusterId ferderation

再在maste2执行格式化: hdfs namenode -format -clusterId ferderation

都要出现提示Storage directory /root/hdfs/tmp/dfs/name has been successfully formatted. 才说明格式化成功

17)启动HDFS联邦集群

可在任意一台主机上,执行脚本start-dfs.sh启动HDFS联邦集群

18)执行java进程查看命令jps,除了Jps进程外,在四台主机分别出现以下进程,说明HDFS联邦集群启动成功:

[root@master1 hadoop]# jps
2457 Jps
2268 NameNode

[root@master2 hadoop]# jps
2137 NameNode
2203 Jps

[root@slave1 ~]# jps
2146 Jps
2101 DataNode

[root@slave2 ~]# jps
2149 Jps
2103 DataNode

19)查看master1和master2各自的Web页面,进行对比

20)在master1和master2两个Namenode节点,分别创建对应的目录,执行以下命令:
hadoop fs -mkdir hdfs://master1:9000/movie
hadoop fs -mkdir hdfs://master2:9000/music

21)对HDFS联邦集群进行测试

a)查看HDFS联邦集群的视图根目录:执行命令 hadoop fs -ls /

输出:Found 2 items
-r-xr-xr-x   - root root          0 2019-10-23 11:35 /movie
-r-xr-xr-x   - root root          0 2019-10-23 11:35 /music

b)上传一个文件到master1 namenode namespace的映射目录movie:执行命令 

vi movie.txt 

hadoop fs -put movie.txt /movie

上传一个文件到master2 namenode namespace的映射目录music:执行命令 

vi music.txt 

hadoop fs -put music.txt /music

c)查看master1 namenode namespace的映射目录movie:执行命令 hadoop fs -ls /movie (或 hadoop fs -ls hdfs://master1:9000/movie

输出:Found 1 items
-rw-r--r--   2 root supergroup       1191 2019-10-21 18:04 /movie/movie.txt

查看master2 namenode namespace的映射目录music: 执行命令 hadoop fs -ls /music(或 hadoop fs -ls hdfs://master2:9000/music

输出:Found 1 items
-rw-r--r--   2 root supergroup       1191 2019-10-21 18:06 /music/music.txt

d)上传一个文件到master1 namenode namespace的根目录(非映射目录):执行命令 hadoop fs -put word.txt hdfs://master1:9000/

上传一个文件到master2 namenode namespace的根目录(非映射目录):执行命令 hadoop fs -put word.txt hdfs://master2:9000/

e)查看master1 namenode namespace的根目录(非映射目录):执行命令  hadoop fs -ls hdfs://master1:9000/

输出:Found 2 items
drwxr-xr-x   - root supergroup          0 2019-10-23 11:33 hdfs://master1:9000/movie
-rw-r--r--   2 root supergroup       1191 2019-10-23 11:57 hdfs://master1:9000/word.txt

查看master2 namenode namespace的根目录(非映射目录): 执行命令  hadoop fs -ls hdfs://master2:9000/

输出:Found 2 items
drwxr-xr-x   - root supergroup          0 2019-10-23 11:33 hdfs://master1:9000/movie
-rw-r--r--   2 root supergroup       1191 2019-10-23 11:57 hdfs://master1:9000/word.txt

f)思考一下:能上传文件到HDFS联邦集群的视图根目录吗?答:不能,根目录不是实际的挂载点!

尝试执行命令 hadoop fs -put word.txt /
输出报错:-put: Fatal internal error
org.apache.hadoop.fs.viewfs.NotInMountpointException: getDefaultReplication on path `viewfs://federation/word.txt._COPYING_' is not
within a mount point

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值