您的位置:首页 > 运维架构

(11)Hadoop 2.6.1 集群部署---手工切换HA

2017-12-15 20:37 441 查看
引言

搭建Hadoop261 集群
1 修改hostname

2 建立hostname和ip的映射关系

3 关闭防火墙

4 SSH免密码登陆

5 安装JDK

6 hadoop261的集群部署

7 验证hadoop是否安装成功

1. 引言

在生产环境中
NameNode
的高可用是非常重要的,一旦
NameNode
宕机,那么整合集群就不能用了,在本篇博客中就主要介绍一下
Hadoop2.6.1
HA
部署(手动切换),在本篇博客中博主使用五台干净的机器从零开始搭建
Hadoop
集群环境,下面就是我使用的环境:

操作系统为:
Centos6.7


jdk
的版本为:
1.7


jdk
的安装路径为:
/usr/local/jdk


hadoop
的版本为:
2.6.1


hadoop
的安装路径为:
/usr/local/hadoop


使用
root
用户进行集群搭建

接下来我将按照下表进行搭建
Hadoop
集群:

HOST
名称
ip
地址
运行的进程
hadoop1192.168.159.130NameNode,ResourceManger,JournalNode
hadoop2192.168.159.131NameNode,JournalNode
hadoop3192.168.159.132DataNode,NodeManger,JournalNode
hadoop4192.168.159.133DataNode,NodeManger
hadoop5192.168.159.134DataNode,NodeManger
注:
JournalNode
进程主要用于
NameNode
的数据同步。


2. 搭建Hadoop2.6.1 集群

2.1 修改hostname

hadoop1
机器上修改
hostname


//编辑文件
vim /etc/sysconfig/network
//修改主机名是hadoop1,(注意hostname的大小写)
hostname hadoop1
//命令行下修改hostname
hostname hadoop1




同理在
hadoop2,hadoop3,hadoop4,hadoop5
执行相同的命令,如下图所示









2.2 建立hostname和ip的映射关系

为了部署集群方便,因此我们建立了
ip
和主机名称的映射,过程如下:

修改
/etc/hosts
文件

//编辑hosts文件
vim /etc/hosts
//建立ip和host的映射关系
192.168.159.130 hadoop1
192.168.159.131 hadoop2
192.168.159.132 hadoop3
192.168.159.133 hadoop4
192.168.159.134 hadoop5




同理在
hadoop2,hadoop3,hadoop4,hadoop5
也要建立ip和host的映射关系,过程和
hadoop1
完全相同。

2.3 关闭防火墙

hadoop
集群中会经常发生 机器和机器之间的交互,为了避免因为防火墙产生的意外故障,因此我们需要将防火墙关闭,过程如下:

//关闭防火墙
service iptables stop
//查看防火墙状态
service iptables status
//关闭防火墙的自动运行
chkconfig iptables off


2.4
SSH
免密码登陆

ssh
免密码登陆,由于要配置
HA
,在
SSH
免密码登录的时候需要注意两点,第一:
NameNode
之间要相互可以免密码登录,第二
NameNode
DataNode
的免密码登录


Hadoop1
机器设置免密码登录

//创建密钥,一直点确定到结束
ssh-keygen -t rsa
//设置NameNode的相互免密码登录
ssh-copy-id -i hadoop2
//设置NameNode到DataNode的免密码登录
ssh-copy-id -i hadoop3
ssh-copy-id -i hadoop4
ssh-copy-id -i hadoop5


Hadoop2
机器设置免密码登录

//创建密钥,一直点确定到结束
ssh-keygen -t rsa
//设置NameNode的相互免密码登录
ssh-copy-id -i hadoop1
//设置NameNode到DataNode的免密码登录
ssh-copy-id -i hadoop3
ssh-copy-id -i hadoop4
ssh-copy-id -i hadoop5


2.5 安装
JDK

解压
jdk
,并修改名称

//将jdk解压到/usr/local
tar -zxvf jdk-7u45-linux-x64.tar.gz -C /usr/local/
//进入到/usr/local
cd /usr/local
//修改文件夹的名称
mv jdk1.7.0_45 jdk


修改环境变量

//修改配置文件
vim /etc/profile
//需要添加的内容
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar




hadoop1
jdk
复制到其他节点

//将jdk复制到hadoop2,hadoop3,hadoop4,hadoop5
scp -r /usr/local/jdk hadoop2:/usr/local/
scp -r /usr/local/jdk hadoop3:/usr/local/
scp -r /usr/local/jdk hadoop4:/usr/local/
scp -r /usr/local/jdk hadoop5:/usr/local/
//将环境变量复制到hadoop2,hadoop3,hadoop4,hadoop5
scp /etc/profile hadoop2:/etc/profile
scp /etc/profile hadoop3:/etc/profile
scp /etc/profile hadoop4:/etc/profile
scp /etc/profile hadoop5:/etc/profile


重新加载各个节点的环境变量

//分别在hadoop1,hadoop2,hadoop3,hadoop4,hadoop5执行下面命令(在五台机器上都执行)
source /etc/profile


分别在五台机器上验证Java是否安装成功

//判断Java版本
java -version




2.6
hadoop2.6.1
的集群部署

将hadoop解压并且改名

//解压hadoop
tar -zxvf hadoop-2.6.1.tar.gz -C /usr/local/
//进入/usr/local目录
cd /usr/local
//将hadoop-2.6.1改名为hadoop
mv hadoop-2.6.1 hadoop


修改配置文件
hadoop-env.sh


//修改hadoop-env.sh配置文件
vim etc/hadoop/hadoop-env.sh
//修改jdk的环境变量
export JAVA_HOME=/usr/local/jdk




修改配置文件
core-site.xml


<!--
fs.defaultFS
因为要配置NameNode的HA,所以使用别名配置HDFS
value:设置集群的别名,在这里我设置为hdfs://cluster1
hadoop.tmp.dir
代表hadoop的数据目录
value:这个值最好和自己hadoop的安装目录对应,此处为/usr/local/hadoop/tmp
-->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster1</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>




修改配置文件
hdfs-site.xml


<!--
dfs.replication
代表数据副本的个数
value:副本的个数不要多余datanode的个数,此处我设为3
dfs.nameservices
设置集群的命名空间,此处应和core-site的fs.defaultFS对应
value:因为和fs.defaultFS对应,所以设置为cluster1
dfs.ha.namenodes.cluster1:
设置集群中有多少个NameNode,是设置NameNode的逻辑名,可以随便取,注意cluster1和nameservices的value对应
value:在这里我设置为hadoopOne,hadoopTwo
dfs.namenode.rpc-address.cluster1.hadoopOne
设置逻辑名hadoopOne的NameNode的实际rpc部署位置
value:hadoop1:9000
dfs.namenode.http-address.cluster1.hadoopOne
设置逻辑名hadoopOne的实例http端口位置
value:hadoop1:50070
dfs.namenode.rpc-address.cluster1.hadoopTwo
设置逻辑名hadoopTwo的实例rpc端口位置
value:hadoop2:9000
dfs.namenode.http-address.cluster1.hadoopTwo
设置逻辑名hadoopTwo的实例http端口位置
value:hadoop2:50070
dfs.ha.automatic-failover.enabled.cluster1
设置Hadoop的切换是否为自动的?
value:因为我们是手工切换,所以设置为false
dfs.namenode.shared.edits.dir
指定cluster1的两个NameNode共享edits文件目录时,使用的JournalNode集群信息,配置JournalNode信息
value:我将JournalNode配置在hadoop1,hadoop2,hadoop3上面
dfs.journalnode.edits.dir:
指定JournalNode集群在对NameNode的目录进行共享时,自己存储数据的磁盘路径
value:最好和自己hadoop的目录对应,此处我设置为/usr/local/hadoop/journal
dfs.ha.fencing.methods
NameNode切换的方式
value:使用ssh进行切换,所以设置为sshfence
dfs.ha.fencing.ssh.private-key-files
使用ssh通信时用的密钥存储的位置
value:这里需要设置自己当前用户的ssh密钥地址,因为我时root用户,所以使用/root/.ssh/id_rsa
dfs.client.failover.proxy.provider.cluster1
cluster1出故障时,哪个实现类负责执行故障切换
value:默认使用org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

-->
<configuration>
<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>hadoopOne,hadoopTwo</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster1.hadoopOne</name>
<value>hadoop1:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster1.hadoopOne</name>
<value>hadoop1:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster1.hadoopTwo</name>
<value>hadoop2:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster1.hadoopTwo</name>
<value>hadoop2:50070</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled.cluster1</name>
<value>false</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/cluster1</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop/journal</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.client.failover.proxy.provider.cluster1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
</configuration>




修改配置文件
yarn-site.xml


<!--
yarn.resourcemanager.hostname
代表ResourceManger的安装地址
value:我们将ResourceManger部署到hadoop1上面
yarn.nodemanager.aux-services
reducer取数据的方式
value:方式是mapreduce_shuffle
-->
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>




修改配置文件
mapred-site.xml


//首先修改模板文件为配置文件
mv mapred-site.xml.template mapred-site.xml


<!-- 通知框架MR使用YARN -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>




设置从节点的位置

//编辑slaves文件
vim slaves
//slaves的内容为:
hadoop3
hadoop4
hadoop5




将hadoop分发到hadoop2,hadoop3,hadoop4,hadoop5

scp -r /usr/local/hadoop hadoop2:/usr/local
scp -r /usr/local/hadoop hadoop3:/usr/local
scp -r /usr/local/hadoop hadoop4:/usr/local
scp -r /usr/local/hadoop hadoop5:/usr/local


启动
journalnode
集群

//分别在hadoop1,hadoop2,hadoop3上启动journalnode
hadoop/sbin/hadoop-daemon.sh start journalnode




格式化
NameNode
并启动集群

//在Hadoop1上格式化集群
hadoop/bin/hdfs namenode -format
//在Hadoop1上启动NameNode,此时NameNode默认是standby状态
hadoop/sbin/hadoop-daemon.sh start namenode
//在hadoop2上格式化集群
hadoop/bin/hdfs namenode -bootstrapStandby
//在hadoop2上启动NameNode,此时NameNode默认是standby状态
hadoop/sbin/hadoop-daemon.sh start namenode
//手动切换NameNode的状态(注意是使用的逻辑名切换)
hadoop/bin/hdfs haadmin -failover --forceactive hadoopOne hadoopTwo
//在NameNode(hadoop1或者hadoop2)上执行,启动datanode
hadoop/sbin/hadoop-daemons.sh start datanode
//在NameNode(hadoop1或者hadoop2)上执行,启动resourcemanager和nodemanager
hadoop/sbin/start-yarn.sh start resourcemanager






2.7 验证hadoop是否安装成功

使用命令验证

//查看java进程
jps


从web界面查看(http://hadoop1:50070

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: