Hadoop HA 集群搭建(非CDH版本)

 

日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)


大数据组件安装(非CDH)和使用 总文章

代码下载链接:

https://pan.baidu.com/s/1VhxRXB63vz_4QZyKVFqoZQ 
提取码:2v0l 


 Hadoop HA--集群搭建 的角色分配

1.集群部署节点角色的规划: 
	1.部署7节点: 
		server01   namenode   	zkfc
		server02   namenode   	zkfc
		server03   resourcemanager
		server04   resourcemanager
		server05   datanode   	nodemanager      zookeeper     journal node
		server06   datanode   	nodemanager      zookeeper     journal node 
		server07   datanode   	nodemanager      zookeeper     journal node 

	2.部署3节点: 
		server01   namenode    datanode   resourcemanager  nodemanager   zookeeper     journal node   zkfc	
		server02   namenode    datanode   resourcemanager  nodemanager   zookeeper   journal node   zkfc  
		server03   datanode    nodemanager   zookeeper   journal node
		
		hdfs集群:
			server01:namenode(主节点)    	datanode(从节点)    	
			server02:namenode(主节点的备节点)datanode(从节点)    
			server03:datanode(从节点)    			      
		yarn集群:
			server01:resourcemanager(主节点)  	nodemanager(从节点)    	
			server02:resourcemanager(主节点的备节点)  nodemanager(从节点)    
			server03:nodemanager(从节点)   

		NameNode之间共享数据(NFS 、Quorum Journal Node(用得多)):
			两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。
			当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。
			standby状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。
			standby可以确保在集群出错时,命名空间状态已经完全同步了。

 	3.每台Linux都需要执行时间同步命令进行时间同步:ntpdate ntp6.aliyun.com

	4.配置环境变量 
		1.vim /etc/profile 在profile文件最后添加:
			export JAVA_HOME=/root/java/jdk1.8.0_45
			export PATH=$PATH:$JAVA_HOME/bin
			export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
			export ZOOKEEPER_HOME=/root/zookeeper
			export PATH=$PATH:$ZOOKEEPER_HOME/bin
			export KE_HOME=/root/kafka-eagle
			export PATH=${KE_HOME}/bin:$PATH
			export HADOOP_HOME=/root/hadoopHA
			export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
			export HIVE_HOME=/root/hive
			export PATH=$PATH:$HIVE_HOME/bin	
		2.刷新配置:source /etc/profile

zookeeper

1.安装zookeeper之前的准备工作:
	1.卸载openjdk:
		1.rpm -qa | grep java:查询出 java相关的 openjdk
	  	2.rpm -e --nodeps 要卸载的软件名:卸载java相关的 openjdk
	
	2.安装sum公司提供的linux版本的JDK
	  注意:如果需要给多台linux都安装JDK时,可以scp命令把jdk推送到多台linux下
	        命令:scp -r /root/java/jdk1.8.0_45 root@linux的IP:/root/java/  然后输入别的linux下用户的密码
		     把当前jdk目录“/root/java/jdk1.8.0_45”推送到别的linux下,在推送之前首先需要在别的linux下执行“mkdir -p /root/java”

		1.tar -zxvf jdk.xx.tar.gz
		2.vi /etc/profile
		  在profile文件末尾添加以下配置:每个环境变量的末尾不能带有“/”
			export JAVA_HOME=jdk的根目录的绝对路径 
			export PATH=$PATH:$JAVA_HOME/bin
			export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
		  比如:
			export JAVA_HOME=/root/java/jdk1.8.0_45
			export PATH=$PATH:$JAVA_HOME/bin
			export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
 
	3.重新加载环境变量配置文件:source /etc/profile
	4.查看最新JDK版本:java -version

	5.关闭防火墙
		1.service iptables stop
		2.永久关闭防火墙(推荐):chkconfig iptables off
		3.查看关闭情况:chkconfig iptables --list

	6.关闭selinux,修改后需重启
		vi /etc/sysconfig/selinux
		把“SELINUX=enforcing”这一行注释掉, 然后下一行添加:SELINUX=disabled
 
	7.修改hosts文件:
		linux:vi /etc/hosts
		window:C:\Windows\System32\drivers\etc
		linux每台机器都应该在hosts文件中配置相同的域名映射文件,windows也应该把对应的linux 的ip和域名给配置上。
		hosts文件中添加如下配置:
			192.168.25.100 node1
			192.168.25.101 node2
			192.168.25.102 node3

	8.CentOS7下用ntpdate同步时间问题:
	  当Linux服务器的时间不对的时候,可以使用ntpdate工具来校正时间。
	  安装 ntp:yum install -y ntp
	  时间同步命令:ntpdate ntp6.aliyun.com
	  作用:当使用了多台服务器进行zookeeper集群时,必须保证每台服务器的时间都是相同的准确的,才能进行正确的zookeeper集群。
	        因为zookeeper的特性中顺序性、实时性需要保证zookeeper集群中的每台服务器的时间都是相同的准确的。

2.安装zookeeper
	1.tar -zxvf zookeeper-3.4.6.tar.gz
	  mv zookeeper-3.4.6 zookeeper 
           mkdir -p /root/zookeeperdata

	2.修改Zookeeper配置文件
		1.cd /root/zookeeper/conf
		2.cp zoo_sample.cfg zoo.cfg
		3.vi zoo.cfg
		  	1.zoo.cfg修改如下信息:dataDir=/root/zookeeperdata
		  	2.zoo.cfg文件末尾添加如下信息:
				server.1=IP地址/域名:2888:3888
				server.2=IP地址/域名:2888:3888
				server.3=IP地址/域名:2888:3888			
			  如:
				server.1=node1:2888:3888
				server.2=node2:2888:3888
				server.3=node3:2888:3888
	
	3.在/root/zookeeperdata目录下创建myid文件。
		比如:在第一个zookeeper的Linux下,/root/zookeeperdata目录下的myid文件内容为1。
		      在第一个zookeeper的Linux下,/root/zookeeperdata目录下的myid文件内容为2。
		命令:echo 内容 > myid

	4.把第一台Linux下配置好的zookeeper推送到别的Linux下。
		1.首先每台Linux都先执行“mkdir -p /root/zookeeperdata” 
	  	2.然后再执行 scp -r /root/zookeeperdata root@linux的IP:/root/  然后修改myid文件内容 
		3.然后再执行 scp -r /root/zookeeper root@linux的IP:/root/
		4.每台Linux都需要配置环境变量:
			1.vi /etc/profile
		  	2.在profile文件末尾添加以下配置:每个环境变量的末尾不能带有“/”
				export ZOOKEEPER_HOME=zookeeper安装目录安装目录的绝对路径
				export PATH=$PATH:$ZOOKEEPER_HOME/bin
			  如:
				export ZOOKEEPER_HOME=/root/zookeeper
				export PATH=$PATH:$ZOOKEEPER_HOME/bin
		5.重新加载环境变量配置文件:source /etc/profile

	5.每台Linux下启动zookeeper进行集群:
		1.每台机器下启动zookeeper:
			cd /root/zookeeper/bin/
		  	zkServer.sh start

		2.或者编写一个脚本来批量启动所有机器:
 			启动脚本记得要改成自己的主机名和自己的文件位置!!  
			1.一键启动:vim zkStart.sh(逐一启动每台linux下的zookeeper,包括node1、node2、node3远程的linux下的zookeeper)
				#!/bin/bash
				for host in node1 node2 node3
				do
				{
				echo $host start
				ssh $host "source /etc/profile;/root/zookeeper/bin/zkServer.sh start"
				echo "$host zk is running"
				}
				done

			2.一键关闭:vim zkStop.sh(逐一关闭每台linux下的zookeeper,包括node1、node2、node3远程的linux下的zookeeper)
				#! /bin/bash
				for host in node1 node2 node3
				do
				{
        				echo "$host zk is stopping"
        				ssh $host "/root/zookeeper/bin/zkServer.sh stop"
				}
				wait
				done

			3.修改sh脚本的执行权限:
				chmod 777 zkStart.sh
				chmod 777 zkStop.sh

			4.执行一键启动脚本:./zkStart.sh:
				因为会逐一启动每台linux下的zookeeper,包括node1、node2、node3远程的linux下的zookeeper,所以需要输入远程linux下用户的密码

			5.jps命令查看zookeeper进程:
				1.命令:jps
				2.jps命令的打印结果:下面信息表示为启动zookeeper集群成功
					99881 Jps
					99503 QuorumPeerMain
				3.jps命令作用解析:
					1.jps:
						是用于查看有权访问的hotspot虚拟机的进程,当未指定hostid时,默认查看本机jvm进程,
					  	否则查看指定的hostid机器上的jvm进程,此时hostid所指机器必须开启jstatd服务。
			 		  	jps可以列出jvm进程lvmid,主类类名,main函数参数, jvm参数,jar名称等信息。
					2.QuorumPeerMain:
			 			Zookeeper集群启动的入口类是QuorumPeerMain来加载配置启动QuorumPeer线程。
	
			6.查看集群状态、主从信息:
				1.cd /root/zookeeper/bin/
				2../zkServer.sh status # 查看状态:一个leader,两个follower
				3.“follower跟随者”的打印结果:
					JMX enabled by default
					Using config: /root/zookeeper/bin/../conf/zoo.cfg
					Mode: follower
				4.“leader领导者”的打印结果:
					JMX enabled by default
					Using config: /root/zookeeper/bin/../conf/zoo.cfg
					Mode: leader

			7.进入zookeeper客户端,查看zookeeper集群信息
				1.cd /root/zookeeper/bin/
				2../zkCli.sh # ls / 或 ls /zookeeper 或 ls /zookeeper/quota
		
			8.如果启动不成功,可以观察 zookeeper.out日志,查看错误信息进行排查
				tail -100f zookeeper.out

3./root/zookeeper/conf/zoo.cfg 配置文件中参数说明:
	1.tickTime这个时间是作为zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是说每个tickTime时间就会发送一个心跳。
	2.initLimit这个配置项是用来配置zookeeper接受客户端(这里所说的客户端不是用户连接zookeeper服务器的客户端,
		而是zookeeper服务器集群中连接到leader的follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。
		当已经超过10个心跳的时间(也就是tickTime)长度后 zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。
		总的时间长度就是 10*2000=20秒。
	3.syncLimit这个配置项标识leader与follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。
	4.dataDir顾名思义就是zookeeper保存数据的目录,默认情况下zookeeper将写数据的日志文件也保存在这个目录里;
	5.clientPort这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求;
	6.server.A=B:C:D
		A是一个数字,表示这个是第几号服务器,
		B是这个服务器的IP地址,
		C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口,
		D是在leader挂掉时专门用来进行选举leader所用的端口。

4.kafka-eagle监控zookeeper状态的监控工具:
	1.tar -zxvf kafka-eagle-1.0.8-bin.tar.gz
	  mv kafka-eagle-1.0.8 kafka-eagle

	2.每台Linux都需要配置环境变量:
		1.vi /etc/profile
		2.在profile文件末尾添加以下配置:每个环境变量的末尾不能带有“/”
				export KE_HOME=kafka-eagle的安装目录的绝对路径
				export PATH=${KE_HOME}/bin:$PATH
			  如:
				export KE_HOME=/root/kafka-eagle
				export PATH=${KE_HOME}/bin:$PATH
		3.重新加载环境变量配置文件:source /etc/profile

	3.修改配置文件system-config.properties:
		1.cd /root/kafka-eagle/conf/
		2.vi system-config.properties
		  system-config.properties配置文件修改如下内容:
			kafka.zk.list=node1:2181,node2:2181,node3:2181

	4.修改ke.sh权限:
		cd /root/kafka-eagle/bin/
		chmod 777 ke.sh
		
	5.把配置好的到别的多台linux下
	        命令:scp -r /root/kafka-eagle/ root@linux的IP:/root/  然后输入别的linux下用户的密码
 
	6.启动kafka-eagle:
		cd /root/kafka-eagle/bin/
		./ke.sh start

	7.谷歌浏览器访问:192.168.25.100:8048/ke

 

 


 Hadoop HA--集群搭建 

 

1.安装hadoop 之前的准备工作
	1.yum install -y vim 建议安装 vim 编辑器
	2.配置好各虚拟机的网络(采用NAT联网模式)
		1.第一种:通过Linux图形界面进行修改(桌面版本Centos)
			进入Linux图形界面 -> 右键点击右上方的两个小电脑 -> 点击Edit connections -> 选中当前网络System eth0 -> 点击edit按钮 -> 选择IPv4 ->
			 method选择为manual -> 点击add按钮 -> 添加IP:192.168.1.101 子网掩码:255.255.255.0 网关:192.168.1.1 -> apply

		2.第二种:修改配置文件方式
			vi /etc/sysconfig/network-scripts/ifcfg-eth0
			DEVICE="eth0"
			BOOTPROTO="static"               ### IP地址为静态
			HWADDR="00:0C:29:3C:BF:E7"
			IPV6INIT="yes"
			NM_CONTROLLED="yes"
			ONBOOT="yes"
			TYPE="Ethernet"
			UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c"
			IPADDR="192.168.1.101"           ### 具体的静态固定IP
			NETMASK="255.255.255.0"          ### 子网掩码
			GATEWAY="192.168.1.1"            ### 网关IP

	3.修改各个虚拟机主机名
		1.vi /etc/sysconfig/network
		2.network文件中配置:
			NETWORKING=yes
			HOSTNAME=主机名

	4.修改hosts中的主机名和IP的映射关系
		1.vi /etc/hosts
		2.hosts文件中配置:	
			192.168.1.100	NODE1
			192.168.1.101	NODE2
			192.168.1.102	NODE3
 
	5.每台机器之间都需要配置ssh免密登陆:即每台机器之间都不需要密码而是使用私钥进行登录
		1.生成ssh免登陆密钥:ssh-keygen -t rsa (四个回车)
		  执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
		2.将公钥拷贝到要免密登陆的目标机器上(每一台机器,包括自己):ssh-copy-id IP地址/主机名
		3.第一台Linux 自己配置连接自己 免密登录:ssh-copy-id 192.168.25.100 或 ssh-copy-id node1
		4.第二台Linux 自己配置连接自己 免密登录:ssh-copy-id 192.168.25.101 或 ssh-copy-id node2

	6.同步每个机器的时间(集群需要)
		1.常用的手动进行时间的同步(一般不使用):date -s "2017-03-03 03:03:03"
		2.网络同步:
			yum install ntpdate
			ntpdate cn.pool.ntp.org
			ntpdate ntp6.aliyun.com
		3.查看linux当前时间的命令:date
	7.关闭防火墙 和 selinux 
		1.查看防火墙状态:service iptables status
		2.关闭防火墙:service iptables stop
		3.查看防火墙开机启动状态:chkconfig iptables --list
		4.永久关闭防火墙:chkconfig iptables off
		5.关闭 selinux 
			1.vi /etc/sysconfig/selinux
			2.把下面#后面的那一行注释掉, 改成下面那一行
				#SELINUX=enforcing
				SELINUX=disabled
		6.查看slinux状态:sestatus。为disabled 则表示关闭成功

	8.安装JDK
		1.上传jdk:rz jdk-8u65-linux-x64.tar.gz
		2.解压jdk:tar -zxvf jdk-8u65-linux-x64.tar.gz -C /root/apps
		3.将java添加到环境变量中(用vim有特殊单词颜色标记可以减少出错率):vim /etc/profile
		  在profile文件最后添加:
			export JAVA_HOME=/root/java/jdk1.8.0_45
			export PATH=$PATH:$JAVA_HOME/bin
			export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
			export ZOOKEEPER_HOME=/root/zookeeper
			export PATH=$PATH:$ZOOKEEPER_HOME/bin
			export KE_HOME=/root/kafka-eagle
			export PATH=${KE_HOME}/bin:$PATH
			export HADOOP_HOME=/root/hadoopHA
			export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
			export HIVE_HOME=/root/hive
			export PATH=$PATH:$HIVE_HOME/bin	
		4.刷新配置:source /etc/profile
		5.每台Linux的环境变量都需要一致:
			scp -r /etc/profile root@node2:/etc	刷新配置:source /etc/profile
			scp -r /etc/profile root@node3:/etc	刷新配置:source /etc/profile
			
2.安装hadoop
	1.tar zxvf hadoop-2.7.4-with-centos-6.7.tar.gz -C /root/
	  解压到指定的目录/root/hadoop, 安装目录可以自定义
		Linux:hadoop-2.7.4-with-centos-6.7.tar.gz
		Window:hadoop-2.7.4-with-windows.tar.gz

	2.配置Hadoop相关的 环境变量 
		1.编辑环境变量的profile配置文件: vi /etc/profile 
		2.profile配置文件末尾添加如下配置信息:
			export JAVA_HOME=/root/apps/jdk1.8.0_65(jdk目录的绝对路径) 
			export HADOOP_HOME=/root/hadoopHA(hadoop目录的绝对路径) 
			export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin 
		3.保存配置文件,重新加载配置文件:source /etc/profile

	注意:
		1.配置HDFS(hadoop2.0所有的配置文件都在$HADOOP_HOME/etc/hadoop目录下)
	 	2.修改hosts中的主机名和IP的映射关系
			1.vi /etc/hosts
			2.hosts文件中配置:	
				192.168.1.100	NODE1
				192.168.1.101	NODE2
				192.168.1.102	NODE3

	3.配置 hadoop-env.sh 
		1.cd /root/hadoopHA/etc/hadoop
		2.vim hadoop-env.sh
		3.hadoop-env.sh 修改如下,保证能够引用到javahome:export JAVA_HOME=/root/java/jdk1.8.0_45

	4.配置 core-site.xml
		1.cd /root/hadoopHA/etc/hadoop
		2.core-site.xml 修改如下:
			<configuration>
				<!-- 集群名称在这里指定:<value>hdfs://集群名</value>。该值来自于hdfs-site.xml中的配置 -->
				<property>
					<name>fs.defaultFS</name>
					<value>hdfs://cluster1</value>
				</property>
				<!-- 这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录。
				     会在格式化namenode的时候创建 hadoop临时目录:根据core-site.xml中的 hadoop.tmp.dir 所配置 /root/hadoopTmpData 生成目录 -->
				<property>
					<name>hadoop.tmp.dir</name>
					<value>/root/hadoopTmpData</value>
				</property>

				<!-- ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点-->
				<property>
					<name>ha.zookeeper.quorum</name>
					<value>NODE1:2181,NODE2:2181,NODE3:2181</value>
				</property>
			</configuration>
	
	5.配置 hdfs-site.xml
		1.cd /root/hadoopHA/etc/hadoop
		2.hdfs-site.xml 修改如下:
			<configuration>
				<!--指定hdfs的nameservice集群名称为cluster1,需要和core-site.xml中的<value>hdfs://集群名</value>保持一致 -->
				<property>
					<name>dfs.nameservices</name>
					<value>cluster1</value>
				</property> 
				<!-- cluster1下面有两个NameNode,分别是nn1(hdfs集群中server01中的namenode主节点) 和 nn2(hdfs集群中server02中的namenode主节点的备节点) -->
				<property>
					<name>dfs.ha.namenodes.cluster1</name>
					<value>nn1,nn2</value>
				</property>
				<!-- nn1的RPC通信地址  -->
				<property>
					<name>dfs.namenode.rpc-address.cluster1.nn1</name>
					<value>NODE1:9000</value>
				</property>
				<!-- nn1的http通信地址 -->
				<property>
					<name>dfs.namenode.http-address.cluster1.nn1</name>
					<value>NODE1:50070</value>
				</property>
				<!-- nn2的RPC通信地址 -->
				<property>
					<name>dfs.namenode.rpc-address.cluster1.nn2</name>
					<value>NODE2:9000</value>
				</property>
				<!-- nn2的http通信地址 -->
				<property>
					<name>dfs.namenode.http-address.cluster1.nn2</name>
					<value>NODE2:50070</value>
				</property>
				<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
				<property>
					<name>dfs.namenode.shared.edits.dir</name>
					<value>qjournal://NODE1:8485;NODE2:8485;NODE3:8485/cluster1</value>
				</property>
				<!-- 指定JournalNode在本地磁盘存放数据的位置,并且该目录需要先创建出来:mkdir -p /root/journalData -->
				<property>
					<name>dfs.journalnode.edits.dir</name>
					<value>/root/journalData</value>
				</property>
				<!-- 开启NameNode失败自动切换 -->
				<property>
					<name>dfs.ha.automatic-failover.enabled</name>
					<value>true</value>
				</property>
				<!-- 指定该集群出故障时,哪个实现类负责执行故障切换 -->
				<property>
					<name>dfs.client.failover.proxy.provider.cluster1</name>
					<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
				</property>
				<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
				<property>
					<name>dfs.ha.fencing.methods</name>
					<value>sshfence</value>
				</property>
				<!-- 使用sshfence隔离机制时需要ssh免登陆。
			     		用于某个主机kill掉另外一个主机中的namenode,防止原来那个主机从zookeeper断开连接后,又重新立即连接到zookeeper。
			     	 	因此两个namenode都需要互相配置免密登录,配置的目录为秘钥所在的目录 -->
				<property>
					<name>dfs.ha.fencing.ssh.private-key-files</name>
					<value>/root/.ssh/id_rsa</value>
				</property>
				<!-- 配置sshfence隔离机制超时时间 -->
				<property>
					<name>dfs.ha.fencing.ssh.connect-timeout</name>
					<value>30000</value>
				</property>
			</configuration>

	6.配置 mapred-site.xml
		1.cd /root/hadoopHA/etc/hadoop
		2.mv mapred-site.xml.template mapred-site.xml
		3.hdfs-site.xml 修改如下:
			<configuration>
				<!-- 指定mr框架为yarn方式 -->
				<property>
					<name>mapreduce.framework.name</name>
					<value>yarn</value>
				</property>
			</configuration>	

	7.配置 yarn-site.xml
		1.cd /root/hadoopHA/etc/hadoop
		2.yarn-site.xml 修改如下:
			<configuration>
				<!-- 开启RM高可用 -->
				<property>
					<name>yarn.resourcemanager.ha.enabled</name>
					<value>true</value>
				</property>
				<!-- 指定RM的cluster id -->
				<property>
					<name>yarn.resourcemanager.cluster-id</name>
					<value>yrc</value>
				</property>
				<!-- 指定RM的名字:分别是 rm1(yarn集群中server01中的resourcemanager主节点) 和 rm2(yarn集群中server02resourcemanager主节点的备节点) -->
				<property>
					<name>yarn.resourcemanager.ha.rm-ids</name>
					<value>rm1,rm2</value>
				</property>
				<!-- 指定rm1的地址 -->
				<property>
					<name>yarn.resourcemanager.hostname.rm1</name>
					<value>NODE1</value>
				</property>
				<!-- 指定rm2的地址 -->
				<property>
					<name>yarn.resourcemanager.hostname.rm2</name>
					<value>NODE2</value>
				</property>
				<!-- 指定zk集群地址 -->
				<property>
					<name>yarn.resourcemanager.zk-address</name>
					<value>NODE1:2181,NODE2:2181,NODE3:2181</value>
				</property>
				<property>
					<name>yarn.nodemanager.aux-services</name>
					<value>mapreduce_shuffle</value>
				</property>
			</configuration>

	8.修改 $HADOOP_HOME/etc/hadoop目录下的 slaves文件:slaves 文件里面记录的是集群主机名 
		1.cd /root/hadoopHA/etc/hadoop
		2.vim slaves 
			删除 slaves文件中的信息localhost,添加集群中的所有主机名如下:
				node1
				node2
				node3

	9.把 /root目录下的 hadoop文件夹($HADOOP_HOME目录) 推送给第二台、第三台linux:
		scp -r /root/hadoopHA root@node2:/root
		scp -r /root/hadoopHA root@node3:/root

	  把 /etc目录下的 profile文件(环境变量) 推送给第二台、第三台linux的/etc目录下:
		scp -r /etc/profile root@node2:/etc	重新加载配置文件:source /etc/profile
		scp -r /etc/profile root@node3:/etc	重新加载配置文件:source /etc/profile


 Hadoop HA--集群搭建--集群启动

1.每台Linux下启动zookeeper进行集群:
	1.每台机器下启动zookeeper:
		cd /root/zookeeper/bin/
		  zkServer.sh start

2.查看zookeeper集群状态、主从信息:
		1.cd /root/zookeeper/bin/
		2../zkServer.sh status # 查看状态:一个leader,两个follower
		3.“follower跟随者”的打印结果:
					JMX enabled by default
					Using config: /root/zookeeper/bin/../conf/zoo.cfg
					Mode: follower
		4.“leader领导者”的打印结果:
					JMX enabled by default
					Using config: /root/zookeeper/bin/../conf/zoo.cfg
					Mode: leader

3.分别在node1、node2、node3上 手动启动journalnode 
	1.cd /root/hadoopHA/sbin 
	2.hadoop-daemon.sh start journalnode
	3.运行jps命令检验,分别在node1、node2、node3上多了JournalNode进程

4.格式化node1、node2 上的 namenode 
	1.本质是对namenode进行初始化,两个命令都可,一定要在namenode机器上格式化,格式化的时候就会创建 hadoop临时目录。
	  即格式化后会在根据core-site.xml中的 hadoop.tmp.dir 所配置 /root/hadoopTmpData 生成目录。
  	  同 core-site.xml 的 hadoop.tmp.dir,如果需要再次格式化,需要把每台服务器的 hadoop.tmp.dir 指定的数据文件夹删除。
	2.配置了Hadoop的环境变量的配置后,任意目录下执行下面命令即可
		格式一:hdfs namenode -format 输入 y
	  	格式二:hadoop namenode -format 输入 y
	3.hadoop临时目录(/root/hadoopTmpData)下自动生成以下目录和文件:
		1.自动生成该目录:/root/hadoopTmpData/dfs/name/current
		2.该目录下自动生成以下文件:fsimage_0000000000000000000、fsimage_0000000000000000000.md5、seen_txid  VERSION

	4.注意:要保证node1 和 node2上 hadoop临时目录中的元数据相同,因此把node1中格式化后的生成的hadoop临时目录(/root/hadoopTmpData)推送到node2中
		scp -r /root/hadoopTmpData root@node2:/root
		scp -r /root/hadoopTmpData root@node3:/root

5.格式化ZKFC (只需要在node1上执行即可)
	执行 hdfs zkfc -formatZK 最终会显示成功创建集群....
	显示成功信息:Successfully created /hadoop-ha/cluster1 in ZK.

6.hdfs 集群启动(脚本一键启动(推荐) )
	如果配置了 etc/hadoop/slaves 和 ssh 免密登录,则可以使用程序脚本启动所有 Hadoop 两个集群的相关进程,在主节点所设定的机器上执行。 
			1.只需要在node1上 启动 hdfs 集群:(即可启动node1 和 node2 中的 namenode、datanode)
				cd /root/hadoopHA/sbin	
				./start-dfs.sh 

			2.停止 hdfs 集群:
				cd /root/hadoopHA/sbin 
				./stop-dfs.sh

 
7.yarn集群启动(脚本一键启动(推荐) )
			1.在node1上 启动 yarn集群:(只启动了yarn集群中server01中的resourcemanager主节点) 
				cd /root/hadoopHA/sbin 
				./start-yarn.sh 

			2.还需要在 node2上 启动 yarn 集群:(只启动了yarn集群中server02中的resourcemanager主节点的备节点)
				cd /root/hadoopHA/sbin 
				./yarn-daemon.sh start resourcemanager 
			3.停止 yarn 集群:
				cd /root/hadoopHA/sbin 
				./stop-yarn.sh
 

 


测试 hadoopHA集群

3.node1:8088 访问active状态的节点
	
4.node2:8088 无法访问standby状态的节点,只有在节点变成active状态才能访问

5.测试上传文件
	hadoop fs -put /root/install.log /
	hadoop fs -ls /

6.运行mapreduce 测试计算π值
	cd /root/hadoopHA/share/hadoop/mapreduce
	hadoop jar hadoop-mapreduce-examples-2.7.4.jar pi 4 8

7.测试集群工作状态的一些指令 :
	查看hdfs的各节点状态信息:hdfs dfsadmin -report	 
	获取一个namenode节点的HA状态:hdfs haadmin -getServiceState nn1
	示例:
		[root@NODE1 mapreduce]# hdfs haadmin -getServiceState nn1
		active
		[root@NODE1 mapreduce]# hdfs haadmin -getServiceState nn2
		standby	 

java程序 操作的hadoopHA集群

必须在项目的\src\main\resources 目录下存放配置core-site.xml、hdfs-site.xml:
只需要把 hadoop根目录下/etc/hadoop目录中的core-site.xml、hdfs-site.xml 拷贝到 项目的\src\main\resources 目录下即可

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

あずにゃん

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值