大数据学习(3)-Hadoop 高可用HA-HDFS分布式集群搭建及使用

HDFS集群要保证NameNode的高可用性,为了让NameNode更安全,这里选择用ZooKeeper集群来保证

环境及准备

同上篇普通版

zookeeper集群的搭建

  1. 下载并解压zookeeper
  2. 在zookeeper根目录下创建data文件夹
  3. 进入conf文件夹修改配置
    3.1 修改zoo_sample.cfg 名字为 zoo.cfg
    3.2 编辑 zoo.cfg
       dataDir=/opt/install/zookeeper-3.4.5/data

       server.0=hadoop1.msk.com:2888:3888
       server.1=hadoop2.msk.com:2888:3888
       server.2=hadoop3.msk.com:2888:3888
  1. 在zookeeper/data下创建myid文件
第一台节点myid里面填0  第二台  1  以此类推(三台机器分别为 0,1,2)
  1. 用主节点分别ssh免密登录三台机器(包括主节点自身)
    zookeeper的启停命令
bin/zkServer.sh start | stop | restart | status

zookeeper客户端命令

  • 注:在zookeeper的主节点运行
 bin/zkCli.sh

HA-HDFS分布式集群搭建

  • 如果使用的是以前的普通集群建议先清空data/tmp,如果是新环境可以参考以往基础版集群文章搭建基础环境
  1. 配置文件的修改
    core-site.xml
<!--  这里的ns随意  只是入口  -->
       <property>		
			<name>fs.defaultFS</name>
			<value>hdfs://ns</value>
	   </property>
	   <property>
			<name>hadoop.tmp.dir</name>
			<value>/opt/install/hadoop-2.5.2/data/tmp</value>
	   </property>
	   <property>
		    <name>ha.zookeeper.quorum</name>
            <value>hadoop1.msk.com:2181,hadoop2.msk.com:2181,hadoop3.msk.com:2181</value>
	   </property>

**hdfs-site.xml **

<property>
		  <name>dfs.permissions.enabled</name>
		  <value>false</value>
	  </property>
		
	  <!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致 -->
	  <property>
		  <name>dfs.nameservices</name>
		  <value>ns</value>
	  </property>
	  <!-- ns下面有两个NameNode,分别是nn1,nn2 -->
	  <property>
		  <name>dfs.ha.namenodes.ns</name>
		  <value>nn1,nn2</value>
	  </property>
  <!-- nn1的RPC通信地址 -->
	  <property>
		  <name>dfs.namenode.rpc-address.ns.nn1</name>
		  <value>hadoop1.msk.com:8020</value>
	  </property>
	  <!-- nn1的http通信地址 -->
	  <property>
		  <name>dfs.namenode.http-address.ns.nn1</name>
		  <value>hadoop1.msk.com:50070</value>
	  </property>
  <!-- nn2的RPC通信地址 -->
	  <property>
		  <name>dfs.namenode.rpc-address.ns.nn2</name>
		  <value>hadoop2.msk.com:8020</value>
	  </property>
	  <!-- nn2的http通信地址 -->
	  <property>
		  <name>dfs.namenode.http-address.ns.nn2</name>
		  <value>hadoop2.msk.com:50070</value>
	  </property>

	<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
	<property>
		<name>dfs.namenode.shared.edits.dir</name>
		<value>qjournal://hadoop1.msk.com:8485;hadoop2.msk.com:8485;hadoop3.msk.com:8485/ns</value>
	</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
	<property>
		<name>dfs.journalnode.edits.dir</name>
		<value>/opt/install/hadoop-2.5.2/journal</value>
	</property>
	<!-- 开启NameNode故障时自动切换 -->
	<property>
		<name>dfs.ha.automatic-failover.enabled</name>
		<value>true</value>
	</property>
    <!-- 配置失败自动切换实现方式 -->
	<property>
		<name>dfs.client.failover.proxy.provider.ns</name>
		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property>
	<!-- 配置隔离机制,如果ssh是默认22端口,value直接写sshfence即可 -->
	<property>
		<name>dfs.ha.fencing.methods</name>
		<value>sshfence</value>
	</property>
	<!-- 使用隔离机制时需要ssh免登陆 -->
	<property>
		<name>dfs.ha.fencing.ssh.private-key-files</name>
		<value>/root/.ssh/id_rsa</value>
	</property>

yarn-env.sh

export JAVA_HOME=/usr/java/jdk1.7.0_71
  1. 首先启动zookeeper集群(三台都要执行启动zookeeper服务指令)
  2. 在主NameNode节点格式化zkfc
    bin/hdfs zkfc -formatZK
  1. 在每个journalnode节点用如下命令启动journalnode
    sbin/hadoop-daemon.sh start journalnode
  1. 在主namenode节点格式化namenode和journalnode目录
     bin/hdfs namenode -format ns
  1. 在主namenode节点启动namenode进程
     sbin/hadoop-daemon.sh start namenode
  1. 在备namenode节点执行第一行命令,这个是把备namenode节点的目录格式化并把元数据从主namenode节点copy过来,并且这个命令不会把journalnode目录再格式化了!然后用第二个命令启动备namenode进程
     bin/hdfs namenode -bootstrapStandby
     sbin/hadoop-daemon.sh start namenode
  1. 在两个namenode节点都执行以下命令
     sbin/hadoop-daemon.sh start zkfc
  1. 在所有datanode节点都执行以下命令启动datanode
    sbin/hadoop-daemon.sh start datanode
  1. 日常启停命令
    sbin/start-dfs.sh
    sbin/stop-dfs.sh
发布了19 篇原创文章 · 获赞 8 · 访问量 4552

猜你喜欢

转载自blog.csdn.net/M283592338/article/details/90950966