概述
记录一下快速搭建一个高可用的hadoop集群,机器5台(cdh01~cdh05)
分配 cdh01、cdh02为名称节点,cdh01~cdh05为数据节点
部署规划
主机名 | 系统 | ip | 进程 |
cdh01 | Linux | 192.168.8.21 | NameNode、ZKFC、Resourcemanager、DataNode、NodeManager、Journalnode |
cdh02 | Linux | 192.168.8.22 | NameNode、ZKFC、Resourcemanager、DataNode、NodeManager、Journalnode |
cdh03 | Linux | 192.168.8.23 | DataNode、NodeManager、JournalNode |
cdh04 | Linux | 192.168.8.24 | DataNode、NodeManager、JournalNode |
cdh05 | Linux | 192.168.8.25 | DataNode、NodeManager、JournalNode |
前提条件
五台机器已做免密登录、jdk环境已安装。
安装
1、下载hadoop
版本:hadoop-2.7.5.tar.gz
2、解压
tar -xzvf hadoop-2.7.5.tar.gz
3、移动位置或者创建软连接
ln -s /bigdata/source/hadoop-2.7.5 /bigdata/hadoop
4、配置环境变量
vim ~/.bash_profile
#hadoop
export HADOOP_HOME=/bigdata/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
5、使配置文件生效
source ~/.bash_profile
6、配置HA高可用
编辑hadoop安装目录下的etc/hadoop
[core-site.xml]
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--配置hadoop集群服务器名称 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/bigdata/hadoop</value>
</property>
<!--配置zookeeper集群,容灾 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>cdh01:2181,cdh02:2181,cdh03:2181,cdh04:2181,cdh05:2181</value>
</property>
</configuration>
[hdfs-site.xml]
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--集群服务名称-->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!--名称节点配置-->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!--指定nn1机器的RPC服务完整监听地址-->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>cdh01:8020</value>
</property>
<!--指定nn2机器的RPC服务完整监听地址-->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>cdh02:8020</value>
</property>
<!--指定两个NameNode的http服务地址-->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>cdh01:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>cdh02:50070</value>
</property>
<!--指定journalnode-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://cdh01:8485;cdh02:8485;cdh03:8485;cdh04:8485;cdh05:8485/mycluster</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--在故障切换期间将用于隔离Active NameNode的脚本-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/.ssh/id_rsa</value>
</property>
<!--Journal Node文件存储地址-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/bigdata/hadoop/journal</value>
</property>
<!--是否开启自动failover机制-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--HDFS文件系统每个block冗余备份数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
[mapred-site.xml]
<?xml version="1.0"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
[yarn-site.xml]
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>cdh01</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>cdh02</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>cdh01:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>cdh02:8088</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>cdh01:2181,cdh02:2181,cdh03:2181,cdh04:2181,cdh05:2181</value>
</property>
</configuration>
[slaves]
配置从节点
cdh01
cdh02
cdh03
cdh04
cdh05
[hadoop-env.sh]
配置你的java路径
...
export JAVA_HOME=/es5.2.0/bigdata/jdk1.8.0_131/
...
7、分发hadoop到其他4台服务器
xsync hadoop
8、启动集群
a、先启动zookeeper集群
zkServer.sh start
b、启动JournalNode
当所有配置都完成以后,我们需要先启动JournalNode服务。在配置了JournalNode服务的每台服务器上执行
hadoop-daemon.sh start journalnode
c、格式化NameNode
启动了JournalNode后(可以通过jps命令查看),我们需要格式化NameNode。在nn1(cdh01)上执行:
hdfs namenode -format
在另一台NN服务器nn2(cdh02)上执行
hdfs namenode -bootstrapStandby
hdfs namenode -initializeSharedEdits
d、在其中任意一台上面执行namenode上初始化zkfc
hdfs zkfc -formatZK
e、在其中任意一台nn1机器启动hdfs集群
start-dfs.sh
f、在cdh01\cdh02启动yarn进程
yarn-daemon.sh start resourcemanager
9、查看ui
10、测试
两台NN的状态应该为一台Active,另一台一台Standby。kill掉Active服务器上的NN进程,查看Standby服务器上的NN进程的状态是否变为Active,如果是,则部署成功。如果没有成功,请检查配置是否正确。