hadoop HA环境安装配置

本文详细介绍了一个包含Hadoop、Zookeeper的三节点集群搭建过程,包括软件下载、环境配置、各服务角色分配及启动步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hadoop所有软件包下载地址
http://archive.cloudera.com/cdh5/cdh/5/

所有的软件都下载cloudera公司的chh5.3.6这个版本,cloudera的CDH不需要考虑软件之间的使用的jar包版本不一致问题解决

三台服务器(Linux系统64位)
创建新用户用户
useradd css
passwd css
123456
所有软件包存放位置为 /home/css/opt/softwares
所有软件的解压目录为 /home/css/opt/modules


1》配置JAVA环境
java -version 查看Java安装的jdk的版本
rpm -qa | grep jdk (查看安装的jdk)
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64 (删除Linux自带的jdk)
安装jdk

下载jdk jdk-7u79-linux-x64.tar.gz
解压
tar -zxf jdk-7u79-linux-x64.tar.gz -C /home/css/opt/modules
增加环境变量
vim /etc/profile
##JAVA_HOME
export JAVA_HOME=/home/css/opt/modules/jdk1.7.0_79
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar1>

注:从机设备都利用scp 复制一份jdk到相应的目录,手动修改/etc/profile


2》各个服务器配置

#关闭所以服务器的防火墙
service iptables stop

修改主机IP地址,使集群在同一网段相连
#ifconfig 查看服务器用的网卡(有bond0 eth0 eth2等等),假如选择的网卡为eth0
如果显示网卡没有启动,那么我们敲入代码:ifup eth0启动网卡。
#vim /etc/sysconfig/network-scripts/ifcfg-eth0 对IPADDR进行修改
修改主机名
#vim /proc/sys/kernel/hostname
配置远程访问域名
#vim /etc/hosts
添加
10.0.21.1     hadoop-senior01.ibeifeng.com      hadoop-senior01
10.0.21.2     hadoop-senior02.ibeifeng.com      hadoop-senior02
10.0.21.3     hadoop-senior03.ibeifeng.com      hadoop-senior03

主节点分布:
hadoop-senior01          hadoop-senior02               hadoop-senior03
namenode                     namenode
                                         resourcemanager                  resourcemanager

hdfs和mapreduce 都是HA
hadoop-senior01
节点:NameNode、datanode,NodeManager,JournalNode,QuorumPeerMain(ZooKeeper),DFSZKFailoverController(ZKFC),JobHistoryServer
hadoop-senior02
节点:NameNode、datanode,ResourceManager,NodeManager,JournalNode,QuorumPeerMain(ZooKeeper),DFSZKFailoverController(ZKFC)
hadoop-senior03
节点:datanode,ResourceManager,NodeManager,JournalNode,QuorumPeerMain(ZooKeeper)

3》SSH
配置ssh免密码登录(三个节点hadoop-senior01、hadoop-senior02、hadoop-senior03)
主节点配置:
首先到用户主目录(cd ~),ls -a查看文件,其中一个为“.ssh”,该文件价是存放密钥的。待会我们生成的密钥都会放到这个文件夹中。
现在执行命令生成密钥: ssh-keygen -t rsa -P "" (使用rsa加密方式生成密钥)回车后,会提示三次输入信息,我们直接回车即可。
进入文件夹cd .ssh (进入文件夹后可以执行ls -a 查看文件)
将生成的公钥id_rsa.pub 内容追加到authorized_keys(执行命令:cat id_rsa.pub >> authorized_keys)

从节点配置:
以同样的方式生成秘钥(ssh-keygen -t rsa -P "" ),然后s1和s2将生成的id_rsa.pub公钥追加到m1的authorized_keys中)
在s1中执行命令:scp id_rsa.pub m1:/root/.ssh/id_rsa.pub.s1 ,在s2中执行命令:scp id_rsa.pub m1:/root/.ssh/id_rsa.pub.s2
进入m1执行命令:cat id_rsa.pub.s1 >> authorized_keys ,cat id_rsa.pub.s1 >> authorized_keys
最后将生成的包含三个节点的秘钥的authorized_keys 复制到s1和s2的.ssh目录下( scp authorized_keys s1:/root/.ssh/, scp authorized_keys s2:/root/.ssh/)
然后可以删除复制的临时文件 id_rsa.pub.s1和 id_rsa.pub.s2


4》安装zookeeper
cd /home/css/opt/modules/zookeeper-3.4.5-cdh5.3.6/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg

#-----
修改以下内容
dataDir=/home/css/opt/modules/zookeeper-3.4.5-cdh5.3.6/tmp
在最后添加:
server.1=hadoop-senior01:2888:3888
server.2=hadoop-senior02:2888:3888
server.3=hadoop-senior03:2888:3888
保存退出
#-----

#然后创建一个tmp文件夹
mkdir -p /hadoop/zookeeper-3.4.5-cdh5.3.6/tmp
#再创建一个空文件
touch /hadoop/zookeeper-3.4.5-cdh5.3.6/tmp/myid
#最后向该文件写入ID,填入myid文件里
hadoop-senior01机器:
echo 1 > /hadoop/zookeeper-3.4.6/tmp/myid    

注:利用scp复制zookeeper到其他服务器,并添加相同的目录和修改myid内容
hadoop-senior02机器:
echo 2 > /hadoop/zookeeper-3.4.6/tmp/myid
hadoop-senior03机器:
echo 3 > /hadoop/zookeeper-3.4.6/tmp/myid

5》安装hadoop
修改hadoop配置文件/home/css/opt/modules/hadoop-2.5.0-cdh5.3.6/etc/hadoop

hdfs-site.xml
         <property>
        	<name>dfs.replication</name>
        	<value>3</value>
    	</property>
	<property>
        	<name>dfs.nameservices</name>
        	<value>cluster1</value>
   	 </property>
	<property>
        	<name>dfs.ha.namenodes.cluster1</name>
        	<value>nn1,nn2</value>
    	</property>
	<property>
        	<name>dfs.namenode.rpc-address.cluster1.nn1</name>
       		<value>hadoop-senior01:9000</value>
    	</property>
	<property>
       		<name>dfs.namenode.http-address.cluster1.nn1</name>
        	<value>hadoop-senior01:50070</value>
   	</property>
	<property>
        	<name>dfs.namenode.rpc-address.cluster1.nn2</name>
       		<value>hadoop-senior02:9000</value>
    	</property>
	<property>
       		<name>dfs.namenode.http-address.cluster1.nn2</name>
        	<value>hadoop-senior02:50070</value>
   	 </property>

	<property>
     		<name>dfs.namenode.shared.edits.dir</name>
        	<value>qjournal://hadoop-senior01:8485;hadoop-senior02:8485;hadoop-senior03:8485/cluster1</value>
    	</property>

	<property>
        	<name>dfs.ha.automatic-failover.enabled.cluster1</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>
	<property>
       		 <name>dfs.ha.fencing.ssh.private-key-files</name>
       		 <value>/root/.ssh/id_rsa</value>
    	</property>
	<property>
        	<name>dfs.ha.fencing.ssh.connect-timeout</name>
        	<value>30000</value>
   	 </property>

core-site.xml:
	<property>
    	    	<name>fs.defaultFS</name>
        	<value>hdfs://cluster1</value>
    	</property>
	<property>
		<name>hadoop.tmp.dir</name>
        	<value>/home/css/opt/modules/hadoop-2.5.0-cdh5.3.6/data/tmp</value>
    	</property>
    <property>  
        <name>ha.zookeeper.quorum</name>  
        <value> hadoop-senior01:2181, hadoop-senior02:8020, hadoop-senior03:8020 </value>  
    </property>  
	***手动创建hadoop.tmp.dir目录
yarn.xite.xml
         <property>
        	<name>yarn.resourcemanager.ha.enabled</name>
        	<value>true</value>
 	 </property>
	<property>
        	<name>yarn.resourcemanager.cluster-id</name>
        	<value>yrc</value>
    	</property>
	
	<property>
        	<name>yarn.resourcemanager.ha.rm-ids</name>
        	<value>rm1,rm2</value>
    	</property>
	<property>
       		<name>yarn.resourcemanager.hostname.rm1</name>
        	<value>hadoop-senior02</value>
    	</property>
	<property>
        	<name>yarn.resourcemanager.hostname.rm2</name>
        	<value>hadoop-senior03</value>
   	 </property>
	
	<property>
       		<name>yarn.resourcemanager.zk-address</name>
        	<value>hadoop-senior01:2181,hadoop-senior02:2181,hadoop-senior03:2181</value>
    	</property>
    	<property>
        	<name>yarn.nodemanager.aux-services</name>
        	<value>mapreduce_shuffle</value>
   	 </property>
	
	<property>    
   		 <name>yarn.log-aggregation-enable</name>    
    		<value>true</value>    
	</property>   

salve
(三台服务器做主节点也做从节点 DataNode nodemanager)
hadoop-senior01
hadoop-senior02
hadoop-senior03

先复制mapred-site.xml.template为mapred-site.xml然后修改mapred-site.xml
mapred-site.xml
	<property>
       		<name>mapreduce.framework.name</name>
        	<value>yarn</value>
    	</property>
   	 <property>
       		<name>mapreduce.jobhistory.address</name>
        	<value>hadoop-senior01:10020</value>
    	</property>
    	<property>
        	<name>mapreduce.jobhistory.webapp.address</name>
        	<value>hadoop-senior01:19888</value>
    	</property>

hadoop-env.sh,yarn-env.sh,mapred-env.sh
修改JAVA_HOME
	export JAVA_HOME=/home/css/opt/modules/jdk1.7.0_79

配置hadoop的环境变量
    /etc/profile
    export HADOOP_HOME=/home/css/opt/modules/hadoop-2.5.0-cdh5.3.6
    export PATH=$PATH:$HADOOP_HOME/bin

    注:利用scp复制hadoop到其他服务器,手动增加/etc/profile的hadoop环境变量

6》启动zookeeper集群(分别在hadoop-senior01,hadoop-senior02、hadoop-senior03上启动zookeeper)
    bin/zkServer.sh start  
    bin/zkServer.sh status 有一个是leader 剩下的是follow

7》启动journalnode(分别在hadoop-senior01、hadoop-senior02、hadoop-senior03上启动journalnode)注意只有第一次需要这么启动,之后启动hdfs会包含journalnode。
    bin/hadoop-daemon.sh start journalnode  

8》选择一台NameNode机器格式化HDFS
    bin/hdfs namenode -format
    启动:hadoop-2.5.0-cdh5.3.6]# sbin/hadoop-daemons.sh start namenode
   另一台NameNode服务器
    bin/hdfs namenode -bootstrapStandby
   启动:hadoop-2.5.0-cdh5.3.6]# sbin/hadoop-daemons.sh start namenode

9》选择一台NameNode服务器格式化ZKFC(在drguo1上执行)
    bin/hdfs zkfc -formatZK
    启动
    sbin/hadoop-daemons.sh start zkfc


10》启动HDFS其他节点(在hadoop-senior01上执行)
    sbin/hadoop-daemons.sh start datanode
11》启动YARN(在hadoop-senior02上执行)
    sbin/yarn-daemons.sh start resourcemanager
    sbin/yarn-daemons.sh start nodemanager

12》启动historyServer(log)服务器
    sbin/hadoop-daemons.sh  start historyserver

13》查看NameNode状态
bin/hdfs haadmin -getServiceState nn1
bin/hdfs haadmin -getServiceState nn2
hdfs haadmin -transitionToActive nn1 --forcemanual
可以看到有一个NameNode是active一个是standby。强制转换一个active为standby。zkfc的错误转移极致就会将另一台standy机器转为active

14》集群时间同步

如果集群节点时间不同步,可能会出现节点宕机或引发其它异常问题,所以在生产环境中一般通过配置NTP服务器实现集群时间同步。本集群在hadoop-master1节点设置ntp服务器,具体方法如下:

// 查看是否安装ntp
# rpm -qa | grep ntp
// 安装ntp
# yum install -y ntp

// 配置时间服务器
# vim /etc/ntp.conf
# 禁止所有机器连接ntp服务器
restrict default ignore
# 允许局域网内的所有机器连接ntp服务器
restrict 172.16.20.0 mask 255.255.255.0 nomodify notrap
# 使用本机作为时间服务器
server 127.127.1.0
// 启动ntp服务器
# service ntpd start
// 设置ntp服务器开机自动启动
# chkconfig ntpd on
集群其它节点通过执行crontab定时任务,每天在指定时间向ntp服务器进行时间同步,方法如下:

// 切换root用户
// 执行定时任务,每天00:00向服务器同步时间,并写入日志

# crontab -e

0      0      *      *      *      /usr/sbin/ntpdate hadoop-senior01>> /home/hadoop/ntpd.log

// 查看任务
# crontab -l



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值