攻城狮在路上(陆)-- hadoop分布式环境搭建(HA模式)

时间:2023-01-07 16:11:53

一、环境说明:

操作系统:Centos6.5 Linux node1 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
    jdk版本:java version "1.7.0_79"
    hadoop版本:Apache hadoop-2.5.2

zookeeper:3.4.6

本文实现hadoop分布式环境搭建,启用YARN,利用zookeeper实现HA。

二、节点说明:

zookeeper:node2\node3\node4

namenode:node1\node5

journalnode:node2\node3\node4

datanode:node2\node3\node4

ResourceManager:node1\node5

三、安装前准备:

1、实现各个节点之间的免密码登录设置。

2、在/etc/hosts文件中对各个节点进行配置。我的配置如下:

192.168.103.101 node1
192.168.103.102 node2
192.168.103.103 node3
192.168.103.104 node4
192.168.103.105 node5

四、步骤说明:

1、安装zookeeper。

2、配置hadoop相关文件。

3、启动hadoop系统,浏览器界面验证。

五、安装zookeeper:

首先在node2节点上进行以下操作。

1、首先从官网下载,本文使用的版本为3.4.6。

2、解压安装包,并复制到指定目录下。

tar zxvf zookeeper-3.4..tar.gz
mv zookeeper-3.4./ /home/install/

3、进入到zookeeper安装目录,修改配置文件zoo.cfg,若该文件不存在,将zoo_sample.cfg重命名为zoo.cfg:

cd /home/install/zookeeper-3.4./
vim conf/zoo.cfg

添加或修改以下代码:

dataDir=/opt/tem/zookeeper  #修改此处为/tmp目录以外的其他目录

server.=node2::
server.=node3::
server.=node4::

上面的代码定义了3台zookeeper服务器。数量必须为奇数。

3、切换到上面定义的/opt/tem/zookeeper/目录下,提供一个叫myid的文件。

cd /opt/tem/zookeeper/
vim myid

在myid文件中输入一个2,保存退出即可。

4、上面相同的操作在node3和node4上重复进行(或者也可以将node2上的安装目录以及/opt/tem/zookeeper/拷贝到node3和node4上)

注意将node3上的myid文件的内容修改为3,将node4上的myid文件的内容修改为4。

5、将zookeeper安装目录/bin添加到~/.bash_profile中(可选操作,仅是为了命令行操作方便)

export PATH=$PATH:/home/install/zookeeper-3.4./bin

6、在node2\node3\node4上分别启动zookeeper:

zkServer.sh start

7、用以下命令测试一下是否正确启动:

zkCli.sh

效果如下图即可:

攻城狮在路上(陆)-- hadoop分布式环境搭建(HA模式)

至此,zookeeper安装完毕。

六、配置hadoop相关脚本:

以下操作在node1上进行。

配置内容皆参考hadoop官方网站。本文中hadoop安装目录为/home/install/hadoop-2.5.

1、修改hadoop-env.sh文件,添加以下内容:

export JAVA_HOME=/usr/java/jdk1..0_79
export HADOOP_PREFIX=/home/install/hadoop-2.5.

2、修改core-site.xml文件:

<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/tep/hadoop-2.5.</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node2:,node3:,node4:</value>
</property>
</configuration>

说明:

  • ha.zookeeper.quorum:指定zookeeper的3个节点访问方式。
  • fs.defaultFS:hadoop2.x中的固定写法,其中mycluster是hdfs-site.xml中配置的nameservice-id。
  • hadoop.tmp.dir:这里指定hadoop的临时文件夹,不能放在/tmp目录下。

3、修改hdfs-site.xml文件:

<configuration>
<property>
<name>dfs.replication</name>
<value></value>
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>node1:</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node5:</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>node1:</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node5:</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node2:8485;node3:8485;node4:8485/mycluster</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</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_dsa</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/tem/journalnode</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>

4、修改yarn-site.xml中的内容:

<configuration>

<!-- Site specific YARN configuration properties -->
<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>node1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node5</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node2:,node3:,node4:</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

5、修改mapred-site.xml文件:

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

6、保证conf目录下不要有masters文件。

7、修改slaves文件:

node2
node3
node4

8、将$HADOOP_HOME/etc/hadoop/下的配置文件分别拷贝到node2\node3\node4\node5节点上。

scp etc/hadoop/* root@node2:/home/install/hadoop-2.5.1/etc/hadoop/
scp etc/hadoop/* root@node3:/home/install/hadoop-2.5.1/etc/hadoop/
scp etc/hadoop/* root@node4:/home/install/hadoop-2.5.1/etc/hadoop/
scp etc/hadoop/* root@node5:/home/install/hadoop-2.5.1/etc/hadoop/

9、执行下述命令:

hdfs zkfc -formatZK

其作用是在zookeeper中创建一个属于当前集群的目录:

攻城狮在路上(陆)-- hadoop分布式环境搭建(HA模式)

10、启动zk:

hadoop-daemon.sh start zkfc

11、启动hdfs:

start-dfs.sh

9、在node1上启动yarn:

start-yarn.sh

10、在node5上执行下述命令:

yarn-daemon.sh start resourcemanager

11、浏览器中查看界面:http://node1:8088

攻城狮在路上(陆)-- hadoop分布式环境搭建(HA模式)