HDFS高可用完全分布式搭建

目录

  • 集群规划
  • 关闭防火墙
  • 时间同步
  • 修改hosts文件
  • 配置免密登录
  • 所有节点配置JDK
  • 配置hadoop
  • 搭建zookeeper集群
  • 格式化
  • 验证HA故障自动切换
  • 需要注意的问题

集群规划

HDFS高可用完全分布式搭建_第1张图片

关闭防火墙

时间同步

  1. 安装ntp
	yum install ntp
  1. 网上查找最新的时间服务器,如ntp1.aliyun.com,在所有节点时间同步
	ntpdate ntp1.aliyun.com

修改hosts文件

vim /etc/hosts
192.168.80.131 node01
192.168.80.132 node02
192.168.80.133 node03
192.168.80.134 node04

配置免密登录

所有节点执行  ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

node01->node01 node01->node02 node01->node03 node01->node04
node02->node01
在node02节点执行,将node01的公钥加入到其他节点的白名单中 ssh-copy-id -i ~/.ssh/id_rsa.pub root@node01

所有节点配置JDK

  1. 卸载旧有jdk
	rpm -qa|grep java
	rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
	rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
	rpm -e --nodeps tzdata-java-2013g-1.el6.noarch
  1. 配置新jdk
	#vi /etc/profile 加入如下内容:
	export JAVA_HOME=/opt/software/jdk/jdk1.8.0_151
	export PATH=$PATH:$JAVA_HOME/bin 

配置hadoop

  1. 修改hdfs-site.xml配置文件
	
	 		    dfs.nameservices
	 		    mycluster
	
	
	  dfs.ha.namenodes.mycluster
	  nn1,nn2
	
	
	  dfs.namenode.rpc-address.mycluster.nn1
	  node01:8020
	
	
	  dfs.namenode.rpc-address.mycluster.nn2
	  node02:8020
	
	
	  dfs.namenode.http-address.mycluster.nn1
	  node01:50070
	
	
	  dfs.namenode.http-address.mycluster.nn2
	  node02:50070
	
	
	  dfs.namenode.shared.edits.dir
	  qjournal://node01:8485;node02:8485;node03:8485/mycluster
	
	
	  dfs.journalnode.edits.dir
	  /var/sxt/hadoop/ha/jn
	
	
	  dfs.client.failover.proxy.provider.mycluster  	org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
	
	
	  dfs.ha.fencing.methods
	  sshfence
	
	
	  dfs.ha.fencing.ssh.private-key-files
	  /root/.ssh/id_rsa
	
	
	   dfs.ha.automatic-failover.enabled
	   true
	 


  1. 修改core-site.xml配置文件
	
	   fs.defaultFS
	   hdfs://mycluster
	
	
	   ha.zookeeper.quorum
	   node02:2181,node03:2181,node04:2181
	


  1. 修改slaves文件
node01
node02
node03
  1. 修改hadoop-env.sh 中的JAVA_HOME=/opt/software/java/jdk1.8.0
  2. 将配置好的HDFS安装包拷贝到node02 node03 node04
	scp -r hadoop-2.6.5 root@node02:/opt/software/hadoop/
	scp -r hadoop-2.6.5 root@node03:/opt/software/hadoop/
	scp -r hadoop-2.6.5 root@node04:/opt/software/hadoop/
  • 注意传输后的位置,我的是/opt/software/hadoop/hadoop-2.6.5

搭建zookeeper集群

  1. 解压zookeeper-3.4.10
    以我为例,解压到了/opt/software/hadoop,跟/opt/software/hadoop/hadoop-2.6.5在同级目录
  2. 修改conf目录下的zoo_sample.cfg
	#解压后,进入conf目录内,将zoo_sample.cfg重命名,改为zoo.cfg
	mv zoo_sample.cfg zoo.cfg
	#修改zoo.cfg
	dataDir=/var/zfg/zookeeper
	server.1=node02:2888:3888
	server.2=node03:2888:3888
	server.3=node04:2888:3888

  1. 在dataDir目录下创建一个myid文件,在这个文件中写上当前节点ID号
    比如我这里在node02节点上是ID号是1
    在这里插入图片描述

  2. 将配置好的zookeeper安装包拷贝到node03 node04

  3. 拷贝完毕后,在各自节点上创建myid号,ID号要依次递增

  4. 添加环境变量

     export PATH=$PATH:/opt/software/hadoop/zookeeper-3.4.10/bin
    
  5. 启动node2、node3、node4节点上的zookeeper

     ./zkServer.sh start
    

格式化

  1. 启动 journalnode
    在node01、node02、node03分别执行如下命令在node01、node02、node03分别执行如下命令

     hadoop-daemon.sh start journalnode
    
  2. 随机选择一台NameNode执行,我这里在node01节点即NameNode1上执行

    hdfs namenode -format
    hadoop-daemon.sh start namenode
    
  3. 另外一台NameNode节点执行

     hdfs namenode  -bootstrapStandby
    
  4. 启动zkfc服务

      hdfs zkfc -formatZK
    
  5. 关闭所有节点上的进程

     stop-dfs.sh
    
  6. 启动HDFS

     start-dfs.sh
    

验证HA故障自动切换

可以看到NameNode1和NameNode2现在分别为active和standby状态
HDFS高可用完全分布式搭建_第2张图片
HDFS高可用完全分布式搭建_第3张图片
在NameNode1所在的node01节点上,kill掉NameNode1进程
在这里插入图片描述
再查看两个NameNode2状态,可以看到已转为active状态
HDFS高可用完全分布式搭建_第4张图片

需要注意的问题

  1. 要先启动zookeeper服务再进行NameNode初始化。

  2. 如果最后启动的节点不全或者datanode启动后马上自动关闭。需要删除/tmp目录下的hadoop-root临时文件和dfs.journalnode.edits.dir配置的目录文件,比如我这里是

     
     	  dfs.journalnode.edits.dir
     	  /var/sxt/hadoop/ha/jn
     
    

那就删除var目录下的指定目录(以我为例,是sxt目录)。然后重新搭建格式化NameNode。

你可能感兴趣的:(hadoop学习笔记)