HA高可用集群详细搭建过程及配置文件简介(附带各种组件的安装配置)

本文详细介绍了如何搭建HA高可用集群,包括网络配置、免密配置和Hadoop集群的设置。已成功配置HDFS、MapReduce、YARN、Journal、Zookeeper等组件,并搭建了Hive、Flume、Sqoop、Azkaban等辅助工具。文章还概述了各组件的作用和在项目中的工作流程,为理解Hadoop生态系统提供了基础。
  1. 配置网络
    保证可以ping通外网,关闭防火墙,然后用xshell来操作
//配置的ip、网关等信息
vim /etc/sysconfig/network-scripts/ifcfg-eth0
	//网卡
	DEVICE=eth0
	//是否开机启动
	ONBOOT=yes
	//ip地址
	IPADDR=192.168.0.100
	//子网掩码
	NETMASK=255.255.255.0
	//网关
	GATEWAY=192.168.0.2
	//使用静态的ip形式
	BOOTPROTO=static
//关闭防火墙
	service iptables stop
	//永久性关闭防火墙
	chkconfig iptables off
//dns解析
vim /etc/resolv.conf
	nameserver 114.114.114.114
//映射
vim /etc/hosts
	//追加配置内容
	192.168.0.100 node01
	192.168.0.101 node02
	192.168.0.103 node03
//时间同步
	//下载ntp命令
	yum install -y ntp
	//使用命令来让时间和网络、本地时间同步
	ntpdate -u ntp1.aliyun.com

至此,网络部分的配置就完成了,如果在本地搭建的话,注意要配置vmware的虚拟网络编辑器,保证nat模式网络模式下的网段和子网掩码都和自己配置的一致,否则可能会导致ping不通外网。

2.免密配置
先上传jdk的tar包,将jdk的tar包上传至节点上,这里我们将所有的jar包进行一个目录规划,tar包统一放在/home/tools下,统一解压到/home/bigdata下(解压命令:tar -zxvf tar包名 -C /home/bigdata)。在其他节点我们只需要创建/home/bigdata目录,将在节点1上配置好的直接发送过去即可。

//配置环境变量
vim ~/.bash_profile(~其实就是代表/root/)
	export JAVA_HOME=/home/bigdata/jdk1.8.0_151
	export PATH=$PATH:$JAVA_HOME/bin
//刷新环境变量
source ~/.bash_profile
//测试
	jav使用tab键,如果可以补齐java就说明配置成功
//发送到其他节点
	//在/home/bigdata/下发送
	scp -r jdk1.8.0_151/ node02:`pwd`
	scp -r jdk1.8.0_151/ node03:`pwd`
	//在/root/下发送.bash_profile到其他节点,道理一样,但要记得刷新一下(使用上述命令)
	scp .bash_profile node02:`pwd`
	scp .bash_profile node023:`pwd`
	//刷新环境变量
	source ~/.bash_pfofile
//到/root/.ssh下
cd /root/.ssh
	//生成公钥和私钥
	ssh-keygen
	//直接回车到底
	//使用ll可以看到生成的文件
	//将公钥发送到其他节点上,包括本机,发送时要输入yes,下一步输出密码,密码就是你登录linux的密码
	ssh-copy-id -i id_rsa.pub node01
	ssh-copy-id -i id_rsa.pub node02
	ssh-copy-id -i id_rsa.pub node03
	//因为我们搭建的是HA,所以要在另一个namenode节点(这里是节点2)上也要免秘钥,操作同上
//到节点2的/root/.ssh下
cd /root/.ssh
	//生成公钥和私钥
	ssh-keygen
	//直接回车到底
	//使用ll可以看到生成的文件
	//将公钥发送到其他节点上,包括本机
	ssh-copy-id -i id_rsa.pub node01
	ssh-copy-id -i id_rsa.pub node02
	ssh-copy-id -i id_rsa.pub node03
//测试
ssh node02,(如果root@node01变成了root@node02,即成功,使用exit来回到原来节点)
  1. hadoop集群配置
    hadoop的tar包上传至节点的/home/tools下,统一解压到/home/bigdata下,配置hadoop文件。
配置hadoop的环境变量,同java一样
		vim  ~/.bash_profile
		export HADOOP_HOME=/home/bigdata/hadoop-2.8.3
		export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
//配置文件存储目录
 		 cd /home/bigdata/hadoop-2.8.3/etc/hadoop/
 		 配置hadoop-env.sh
 		 	//只需配置JAVA_HOME的路径
 		 	export JAVA_HOME=/home/bigdata/jdk1.8.0_151
 		 配置core-site.xml
 		 	<configuration>
 		 	<!--hadoop的集群入口-->
				<property>
					<name>fs.defaultFS</name>   
					<value>hdfs://hadoopCluster01</value>
			    </property>
				<!--hadoop的工作路径,会自动创建 -->
				 <property>
			        <name>hadoop.tmp.dir</name>   
			        <value>/home/bigdata/hadoop-2.8.3/hadoop2.8.3_metadata</value> 
				</property>
				<!-- zookeeper的端口配置-->
				<property>
			  		<name>ha.zookeeper.quorum</name> 
			   		<value>node01:2181,node02:2181,node03:2181</value>
			 	</property>
			</configuration>
		配置hdfs-site.xml
			<configuration>
				<!--hdfs集群名称:-->
					<property>
						<name>dfs.nameservices</name>
						<value>hadoopCluster01</value>   		
					</property>				
					<!--为多个注册到hdfs集群名称的NN,起别名-->
					<property>
						<name>dfs.ha.namenodes.hadoopCluster01</name>
						<value>nn1,nn2</value> 
					</property>					
					<!--nn1 : node01的rpc访问端口,rpc(远程调用协议)-->
				    <property>
				        <name>dfs.namenode.rpc-address.hadoopCluster01.nn1</name>
				        <value>node01:8020</value>
				    </property>				
					<!--nn2 : node02的rpc访问端口,rpc(远程调用协议)-->
				    <property>
				        <name>dfs.namenode.rpc-address.hadoopCluster01.nn2</name>
				        <value>node02:8020</value>
				     </property>					 
					<!--nn1 : node01的http访问端口-->
				    <property>
				        <name>dfs.namenode.http-address.hadoopCluster01.nn1</name>
				        <value>node01:50070</value>
				    </property>					
					<!--nn2 : node02的http访问端口-->
				     <property>
				        <name>dfs.namenode.http-address.hadoopCluster01.nn2</name>
				        <value>node02:50070</value>
				    </property>
				<!--把journalnode集群整合到hadoop集群,把journalnode所在节点以及访问端口进行配置-->
				    <property>
						<name>dfs.namenode.shared.edits.dir</name>
						<value>qjournal://node01:8485;node02:8485;node03:8485/hadoopCluster01</value>
				    </property>				
					<!--把journalnode集群的工作空间,需要手动创建-->
					<property>
				        <name>dfs.journalnode.edits.dir</name>
				        <value>/home/bigdata/hadoop-2.8.3/journal_data</value>
				    </property>					
					<!--启动高可用的代理类-->
				    <property>
				        <name>dfs.client.failover.proxy.provider.hadoopCluster01</name>
				        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
					</property>					
					<!--高可用下,依赖的ssh机制(免密钥)-->
					<property>
						<name>dfs.ha.fencing.methods</name>
						<value>sshfence</value>
					</property>				
					<!--指定免密钥后的私钥所在路径-->
					<property>
				        <name>dfs.ha.fencing.ssh.private-key-files</name>
				         <value>/root/.ssh/id_rsa</value>
				    </property>					
					<!--是否启用高可用功能服务,默认是false, 如果开启高可用需要修改为true-->
				    <property>
				   		<name>dfs.ha.automatic-failover.enabled</name>
				 		<value>true</value>
					</property>
				</configuration>
			配置mapred-site.xml(需要先改名字,原先是mapred-site.xml.template,是一个模板,去掉后缀)
				<configuration>
				<!--MapReduce运行时的资源依赖-->
				    <property>
				        <name>mapreduce.framework.name</name>  
				        <value>yarn</value>
				    </property>
					<property>
				</configuration>
				配置yarn-site.xml
					<configuration>
					<!--指定yarn集群支持工作任务类型,把MapReduce指定为集群的一种任务类型-->
						<property>
					        <name>yarn.nodemanager.aux-services</name>  
					        <value>mapreduce_shuffle</value>
						</property>
						<!--启用yarn的高可用服务,默认是false-->
						<property>
							<name>yarn.resourcemanager.ha.enabled</name>  
							<value>true</value>
						</property>	
						<!--指定yarn集群的集群名称,要求该名称和hdfs集群名称不一样-->
						<property>
							<name>yarn.resourcemanager.cluster-id</name>  
							<value>yarnCluster</value>  
						</property>	
						<!--为多个resourcemanager起别名-->
						<property>
							<name>yarn.resourcemanager.ha.rm-ids</name>   
							<value>rm1,rm2</value>
						</property>	
						<!--别名为rm1的resourcemanager进程的启动节点-->
						<property>
							<name>yarn.resourcemanager.hostname.rm1</name> 
							<value>node01</value>
						</property>	
						<!--别名为rm2的resourcemanager进程的启动节点-->
						<property>
							<name>yarn.resourcemanager.hostname.rm2</name> 
							<value>node02</value>
						</property>
						<!--把zk集群集成在yarn集群中:-->
						<property>
							<name>yarn.resourcemanager.zk-address</name>  
							<value>node01:2181,node02:2181,node03:2181</value>
						</property>
					</configuration>
				配置slaves
					将里面的localhost删除,添加node01、node02、node03,这是配置的datanode,可以自定义
				配置masters(需要自己创建,名字必须是masters)
					vim masters
					内容是:node02
至此,配置文件就配置完成了,接下来将配置好的hadoop目录发送给其他节点
在/home/bigdata/目录下使用scp发送
scp -r hadoop-2.8.3/ node02:`pwd`
scp -r hadoop-2.8.3/ node03:`pwd`
将配置好的.bash_profile也发送过去,方式上面有介绍,发送完记得刷新一下,
//测试
	输入had使用tab键,能补齐就说明环境配置成功
接下来我们将三个节点上的journalnode开启,命令是:hadoop-daemon.sh start journalnode
然后我们配置zookeeper

zookeeper配置
	将zookeeper的tar包解压到/home/bigdata下,配置环境变量,同java和hadoop的配置一样,然后刷新环境变量,接下来在/home/bigdata/zookeeper-3.4.6目录下创建一个目录zkData,里面创建一个文件,名为myid,内容只写一个1,然后修改配置文件,在conf下,现将zoo.template.cfg文件改名为zoo.cfg,
然后再编辑文件内容
//修改配置文件
vim zoo.cfg
//将dataDir的路径改为:
dataDir=/home/bigdata/zookeeper-3.4.6/zkData
//在最后追加内容
//zookeeper集群节点列表
server.1=zoo1:2888:3888 
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
//保存退出
同样,将文件发送到其他节点,方法如上,这里要注意的是zkData下的myid文件中的内容要变化,如果在节点2上,就改为2,节点3上,就改为3
//开启3个节点上的zookeeper服务,命令是:
zkServer.sh start
//查看那个是leader
server.sh status
//格式化zk集群,在节点1上执行命令:
hdfs zkfc -formatZK
至此,zookeeper的集群搭建完成,接下来完成hadoop集群的搭建
//开启了三个节点上的journal服务后,在节点1上执行命令:
hdfs namenode -format
//注意查看日志,看是否有错误发生,如果没错误,在节点1上开启namenode
hadoop-daemon.sh start namenode
//在节点2,即第二个namenode节点上,执行命令:
hdfs namenode -bootstrapStandby
至此,集群格式化完成,可以通过webUI上来查看信息,地址是(如果在windows本地配置了映射的话)node01:50070或者node02:50070,这是因为不清楚谁是活跃状态的节点,你可以将活跃节点使用hadoop-daemon.sh stop namenode停止,看备份状态的naemnode会不会切换至active,如果可以,说明配置成功
  1. HA组件的搭建过程
    到这里,我们已经完成HDFS、MapReduce、yarn、journal、zookeeper的整合配置,HA框架搭建已经完成,接下来的是辅助hadoop开发的各种组件,这里我们先搭建hive、flume、sqoop、azkaban,其余的我们之后还会继续进行。
hive的搭建(我们这里只讲解hive 的本地模式搭建,远程模式之后讲解)
	mysql安装:yum install -y mysql-server
	//启动mysql
	service mysqld start
	//设置开机启动
		chkconfig mysqld on
	//进入mysql
		mysql
	//进入mysql数据库
	 	use mysql;
	 //把所用权限赋予root用户
	 	grant all privileges on *.* to 'root'@'%'identified by 'root' with grant option;
	 //把其他的root 用户删除,避免验证冲突
	 	delete from user where host !='%';
	 //刷新权限
	 	flush privileges;
	 //退出在输入mysql,无法进入,说明配置成功
	 	进入mysql:
	 		mysql  -uroot  -proot
	mysql配置完成	
	tar包解压到/home/bigdata下,配置环境变量,刷新环境变量,进入到配置文件目录
			//配置文件目录
			cd /home/bigdata/hive-1.2.2/conf
			//改名字,修改配置文件
			mv hive-default.xml.template hive-site.xml
			//hive-site.xml内容
			<configuration>   
				<property>     
				<!-- hive中的表在hdfs文件系统中的数据存储位置的目录-->
				<name>hive.metastore.warehouse.dir</name>   
				<value>/user/hive_remote/warehouse</value>  
				 </property>     
				 <!-- hive中的元数据存放位置-->  
				<property>     				
				<name>hive.metastore.local</name>     
				<value>true</value>   
				</property>     
				   <!-- mysql数据库在哪一台上,hive_remote是数据库名 ,要求数据库不存在或为空--> 
				<property>     
				<name>javax.jdo.option.ConnectionURL</name>   					
				<value>jdbc:mysql://node02/hive_remote?createDatabaseIfNotExist=true</value>
				</property>   
				<!-- 数据库驱动-->    
				<property>     
				<name>javax.jdo.option.ConnectionDriverName</name>     
				<value>com.mysql.jdbc.Driver</value>   
				</property> 
				 <!-- 连接数据库的用户名和密码--> 
				<property>     
				<name>javax.jdo.option.ConnectionUserName</name>     
				<value>root</value>   
				</property>      
				 <property>     
				<name>javax.jdo.option.ConnectionPassword</name>     
				<value>root</value>   
				</property>  
				 </configuration>
			//将mysql的驱动jar包导入到hive安装目录的lib下
			//然后在/home/hadoop-2.5.1/share/hadoop/yarn/lib的目录下进行jar包替换
			cp /home/hive-1.2.1/lib/jline-2.12.jar ./
			//启动
				hive
至此,hive配置完成
flume配置
	将tar包解压到/home/bigdata下,然后配置环境变量,刷新环境变量
	配置文件改名,同样是conf下的配置文件
	配置flume-env.sh
		//配置JAVA_HOME
		export JAVA_HOME=/home/bigdata/jdk1.8.0_151
	//测试
		flum,使用tab键,可以补齐,配置成功
sqoop配置
	将tar包解压到/home/bigdata下,然后配置环境变量,刷新环境变量
	//配置文件改名,同样是conf下的配置文件
	mv sqoop-env-template.sh sqoop-env.sh
	//修改配置文件sqoop-env.sh
		export HADOOP_COMMON_HOME=/home/bigdata/hadoop-2.8.3
		export HADOOP_MAPRED_HOME=/home/bigdata/hadoop-2.8.3
		export HIVE_HOME=/home/bigdata/hive-1.2.2
		export ZOOCFGDIR=/home/bigdata/zookeeper-3.4.6
	//将mysqljar包放到sqoop安装目录的lib下
	//测试
		sqoop help
azkaban配置
	先在/homg/bigdata/下创建一个目录azkaban,然后将azkaban 的mysqljar包、executor包、server包解压到下面
	将azkaban-web-server-2.5.0 命名为server
	将azkaban-executor-server-2.5.0命名为executor
	//进入mysql
	//创建数据库azkaban
	create database azkaban;
	//进入azkaban数据库
	use azkaban;
	//将脚本导入数据库
	source /home/bigdata/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql
	//创建ssl配置
		keytool -keystore keystore -alias jetty -genkey -keyalg RSA
		提示输入密码,输入123456
		提示再次输入密码,123456
		接下来5个全部直接回车
		国家代码输入:CN
		【no】后输入:y
		接下来直接回车到底
	//将生成的keystore复制到server下
	//配置时区
	cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

server配置
在/home/bigdata/azkaban/server/conf下,编辑azkaban.properties,只需修改部分内容
default.timezone.id=Asia/Shanghai 
database.type=mysql                                                              #数据库类型
mysql.port=3306                                                                       #端口号
mysql.host=node1                                                          #数据库连接IP
mysql.database=azkaban                                                       #数据库实例名
mysql.user=root                                                                 #数据库用户名
mysql.password=root                                                          #数据库密码
mysql.numconnections=100 
jetty.keystore=keystore                                                          #SSL文件名
jetty.password=123456                                                             #SSL文件密码
jetty.keypassword=123456                                                     #Jetty主密码 与 keystore文件相同
jetty.truststore=keystore                                                                #SSL文件名
jetty.trustpassword=123456
保存退出,编辑azkaban-users.xml文件
追加内容
<user username="admin" password="admin" roles="admin,metrics" />

executor配置
在/home/bigdata/azkaban/executor/conf下,编辑azkaban.properties,只需修改部分内容
default.timezone.id=Asia/Shanghai
database.type=mysql                                                                       #数据库类型(目前只支持mysql)
mysql.port=3306                                                                                #数据库端口号
mysql.host=node1                                                           #数据库IP地址
mysql.database=azkaban                                                                #数据库实例名
mysql.user=root                                                                        #数据库用户名
mysql.password=root                                                                   #数据库密码
mysql.numconnections=100                                                           #最大连接数
//azkaban服务启动
	server服务器服务启动:
		在server下执行:
			bin/azkaban-web-start.sh
	executor服务器执行	
		executor下执行:
			bin/azkaban-executor-start.sh
	//测试
		webUI上输入:https://node01:8443,证书验证添加例外通过,来到登录页面,输入账户名密码(都是admin),配置成功。

5.大致流程介绍
大家搭建到这里,已经差不多完成了hadoop的整个工作流程所涉及到的一些组件,下面大致讲解一下各组件的作用,各个组件的详细详解,接下来都会完成。
flume:数据的采集,将从数据源采集来的数据,写到hdfs上
hdfs:看过之前文章的,肯定已经知道,hdfs其实就是负责存储数据的,将海量的数据存放在hdfs上,让hdfs来进行存储。
yarn:资源的管理和任务的调度(mrApplicationMaster),给任务分配资源
mapreduce:数据的分析、计算、汇总、清洗。
zookeeper:负责监听namenode,active的节点一旦挂机,就启动另一个standby状态的namenode,让其继续对外提供服务。
journal:管理edits文件,保证两个namenode的数据一致
hive:将结构化的数据映射成一张表,通过hql语句进行操作,本质是转换成mr程序来跑
sqoop:将hive中表的数据或者hdfs上的数据导出到web项目的本地关系型数据库。
web项目将数据做成报表的形式来展示。
这大致就是整个组件在项目中发挥的作用及流程。
6.到这里,HA的组件已经已经搭建了不少,我们可以发现,辅助组件的搭建都是基于namenode的,很方便、很快捷。不再需要三个节点上都同步上,hive的远程模式会涉及到其他两个节点,之后会讲到。我们这篇文章主旨就是搭建集群及各个组件,至于具体的组件的使用及原理,之后都会给大家说明,举例。其实这里的配置只是最基本的,大家也可以根据自己的需要,在这之上添加配置信息,都是可以的,很灵活。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值