hadoop集群安装及测试

在低配置虚拟机环境下测试安装hadoop集群环境。

1、集群实现准备

1.1 集群实现思路

hadoop集群安装及测试

1.2 虚拟机配置

建议配置:1G内存,2个CPU

由于测试机器配置有限,实际设置4台虚拟机,每台分配512M内存,1个CPU

hadoop集群安装及测试

1.3 集群节点分配

为避免单点故障,NameNode 、ResourceManager均配置热备节点

Park01 
Zookeeper  
NameNode (active)
ResourceManager (active)
 
Park02
Zookeeper 
NameNode (standby)
 
Park03
Zookeeper 
ResourceManager (standby)
  
Park04
DataNode 
NodeManager 

JournalNode

Park05
DataNode 
NodeManager 

JournalNode

2、具体安装步骤

2.1 克隆5台虚拟机,做好下列步骤

1、安装好jdk,版本:jdk1.8.0_65

2、lrzsz:方便从本机上传软件到虚拟机

3、配置固定ip:避免自动获取ip,在虚拟机重启后分配不同的ip地址

192.168.226.151

192.168.226.152

192.168.226.153

192.168.226.154

192.168.226.155

4、远程客户端配置对应的连接,可用scrt、xshell等

2.2 永久关闭每台机器的防火墙

 service iptables stop

chkconfig iptables off(重启后有效)

2.3 设置每台机器的主机名和host文件

修改文件/etc/sysconfig/network ,每台机器文件内容对应如下:
[[email protected] ~]# cat /etc/sysconfig/network 
NETWORKING=yes
HOSTNAME=hadoop01

[[email protected] ~]# cat /etc/sysconfig/network 
NETWORKING=yes
HOSTNAME=hadoop02

[[email protected] ~]# cat /etc/sysconfig/network 
NETWORKING=yes
HOSTNAME=hadoop03

[[email protected] ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hadoop04


[[email protected] ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hadoop04


[[email protected] ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hadoop04

修改文件/etc/hosts,每台机器文件内容一样(可在hadoop01上完成配置,再scp到其他机器):
127.0.0.1   localhost
::1         localhost
192.168.226.151 hadoop01
192.168.226.152 hadoop02
192.168.226.153 hadoop03
192.168.226.154 hadoop04
192.168.226.155 hadoop05

2.4 每台机器配置ssh免秘钥登录

例如:hadoop01上执行(其他机器相同操作)

ssh-******      

ssh-copy-id -i [email protected] (分别发送到4台节点上)

2.5 在hadoop01、hadoop02、hadoop03上安装zookeeper及配置

1、上传并解压zookeeper,zookeeper-3.4.7.tar.gz

2、在conf目录下拷贝配置文件

[[email protected] conf]# cp zoo_sample.cfg zoo.cfg

3、修改配置文件zoo.cfg,设置以下内容:

dataDir=/usr/soft/zookeeper-3.4.7/tmp
server.1=192.168.226.151:2888:3888
server.2=192.168.226.152:2888:3888

server.3=192.168.226.153:2888:3888

4、创建tmp目录,并在其下设置myid文件

创建tmp目录

/usr/soft/zookeeper-3.4.7/tmp

设置myid文件内容如下:

1

5、将zookeeper程序文件打包,并scp到另外两台机器(hadoop02、hadoop03)的/usr/soft目录下

[[email protected] soft]# tar -zcvf zookeeper-3.4.7.tar.gz zookeeper-3.4.7

[[email protected] soft]# scp zookeeper-3.4.7.tar.gz [email protected]:/usr/soft

6、在hadoop02、hadoop03下的/usr/soft目录下解压,并修改myid文件内容,分别为2、3

2.6 在hadoop01上安装及配置hadoop程序

1、上传hadoop文件及解压,hadoop-2.7.1.tar.gz。配置文件路径,hadoop目录下的etc/hadoop目录

2、配置hadoop-env.sh,设置jdk及hadoop配置文件目录

export JAVA_HOME=/usr/soft/jdk1.8.0_65

export HADOOP_CONF_DIR=/usr/soft/hadoop-2.7.1/etc/hadoop

3、配置core-site.xml

<configuration>
<!--用来指定hdfs的老大,ns为固定属性名,表示两个namenode-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns</value>
</property>
<!--用来指定hadoop运行时产生文件的存放目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/soft/hadoop-2.7.1/tmp</value>
</property>
<!--执行zookeeper地址-->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
</configuration>

4、配置hadoop01节点的hdfs-site.xml

<configuration>
<!--执行hdfs的nameservice为ns,和core-site.xml保持一致-->
<property>
<name>dfs.nameservices</name>
<value>ns</value>
</property>
<!--ns下有两个namenode,分别是nn1,nn2-->
<property>
<name>dfs.ha.namenodes.ns</name>
<value>nn1,nn2</value>
</property>
<!--nn1的RPC通信地址-->
<property>
<name>dfs.namenode.rpc-address.ns.nn1</name>
<value>hadoop01:9000</value>
</property>
<!--nn1的http通信地址-->
<property>
<name>dfs.namenode.http-address.ns.nn1</name>
<value>hadoop01:50070</value>
</property>
<!--nn2的RPC通信地址-->
<property>
<name>dfs.namenode.rpc-address.ns.nn2</name>
<value>hadoop02:9000</value>
</property>
<!--nn2的http通信地址-->
<property>
<name>dfs.namenode.http-address.ns.nn2</name>
<value>hadoop02:50070</value>
</property>
<!--指定namenode的元数据在JournalNode上的存放位置,这样,namenode2可以从jn集群里获取最新的namenode的信息,达到热备的效果-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop04:8485;hadoop05:8485/ns</value>
</property>
<!--指定JournalNode存放数据的位置-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/soft/hadoop-2.7.1/journal</value>
</property>
<!--开启namenode故障时自动切换-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--配置切换的实现方式-->
<property>
<name>dfs.client.failover.proxy.provider.ns</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--配置隔离机制-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!--配置隔离机制的ssh登录秘钥所在的位置-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
 
<!--配置namenode数据存放的位置,可以不配置,如果不配置,默认用的是core-site.xml里配置的hadoop.tmp.dir的路径-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/soft/hadoop-2.7.1/tmp/namenode</value>
</property>
<!--配置datanode数据存放的位置,可以不配置,如果不配置,默认用的是core-site.xml里配置的hadoop.tmp.dir的路径-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///usr/soft/hadoop-2.7.1/tmp/datanode</value>
</property>
 
<!--配置block副本数量-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--设置hdfs的操作权限,false表示任何用户都可以在hdfs上操作文件-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
 

</configuration>

5、配置mapred-site.xml

<configuration>
<property>
<!--指定mapreduce运行在yarn上-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

</configuration>

6、配置yarn-site.xml

<configuration>
<!-- 开启YARNHA -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>

<!-- 指定两个resourcemanager的名称-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>

<!-- 配置rm1,rm2的主机 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop01</value>
</property> 

<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop03</value>
</property>

<!--开启yarn恢复机制-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>

<!--执行rm恢复机制实现类-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>

<!-- 配置zookeeper的地址 --> 
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
<description>For multiple zk services, separate them withcomma</description>
</property>

<!-- 指定YARN HA的名称 -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarn-ha</value>
</property>

<property>
<!--指定yarn的老大 resoucemanager的地址-->
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>

<property>
<!--NodeManager获取数据的方式-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

7、配置slaves文件

hadoop04

hadoop05

8、配置hadoop的环境变量/etc/profile

export JAVA_HOME=/usr/soft/jdk1.8.0_65
export HADOOP_HOME=/usr/soft/hadoop-2.7.1
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

9、根据配置文件创建相关文件夹

创建journal目录

[[email protected]]# mkdir journal

创建tmp目录,并在其下创建namenode、datanode目录

[[email protected] hadoop-2.7.1]# mkdir -p tmp/namenode tmp/datanode

10、打包、压缩hadoop程序文件,并通过scp发送到其他3台机器/usr/soft目录

[[email protected] soft]# tar -zcvf hadoop-2.7.1.tar.gz hadoop-2.7.1

[[email protected] soft]# scp hadoop-2.7.1.tar.gz [email protected]:/usr/soft

11、在另外3台机器解压hadoop程序文件

[[email protected] soft]# tar -zxvf hadoop-2.7.1.tar.gz

[[email protected] soft]# tar -zxvf hadoop-2.7.1.tar.gz

[[email protected] soft]# tar -zxvf hadoop-2.7.1.tar.gz

[[email protected] soft]# tar -zxvf hadoop-2.7.1.tar.gz

12、将hadoop01下的环境变量配置文件/etc/profile发送给其他3台机器,并通过source使其生效

[[email protected] soft]# scp /etc/profile [email protected]:/etc

[[email protected] soft]# scp /etc/profile [email protected]:/etc

[[email protected] soft]# scp /etc/profile [email protected]:/etc

[[email protected] soft]# scp /etc/profile [email protected]:/etc

3、启动hadoop集群

3.1 启动zookeeper

1、在hadoop01、hadoop02、hadoop03节点的zookeeper安装目录的bin目录下,启动

[[email protected] bin]# ./zkServer.sh start

检查启动状态

[[email protected] bin]# ./zkServer.sh status

2、在zookeeper集群上生成ha节点(ns节点)

zookeeper集群的leader节点,执行

[[email protected] bin]# hdfs zkfc -formatZK

hadoop集群安装及测试

hadoop集群安装及测试

注:3.3--3.5步可以用一步来替代:进入hadoop安装目录的sbin目录,执行:start-dfs.sh

3.2 启动journalnode集群

1、在hadoop04上的hadoop安装目录的sbin目录下执行,

sh hadoop-daemons.sh start journalnode

hadoop集群安装及测试

3.3 启动namenode节点

1、格式化hadoop01节点的namenode

[[email protected] bin]# hadoop namenode -format

hadoop集群安装及测试

2、启动hadoop01节点的namenode

[[email protected] bin]# hadoop-daemon.sh start namenode

hadoop集群安装及测试

3、把hadoop02节点的 namenode节点变为standbynamenode节点

hadoop02节点上执行:

[[email protected] bin]# hdfs namenode -bootstrapStandby

hadoop集群安装及测试

4、启动hadoop02节点的namenode

[[email protected] bin]# hadoop-daemon.sh start namenode

hadoop集群安装及测试

3.4 启动datanode节点

1、启动hadoop04、hadoop05节点的datanode节点

[[email protected] sbin]# hadoop-daemon.sh start datanode

hadoop集群安装及测试

[[email protected] sbin]# hadoop-daemon.sh start datanode

hadoop集群安装及测试

3.5 启动zkfc(启动FalioverControllerActive)

1、在hadoop01,hadoop02节点上执行:hadoop-daemon.sh start zkfc

hadoop集群安装及测试

hadoop集群安装及测试

3.6 启动ResourceManager

1、在hadoop01节点上启动ResourceManager

[[email protected] bin]# start-yarn.sh

hadoop集群安装及测试

同时hadoop04、hadoop05节点上同时自动启动nodemanager

hadoop集群安装及测试

2、在hadoop03节点上启动ResourceManager

[[email protected] bin]# yarn-daemon.sh start resourcemanager

hadoop集群安装及测试

4、测试

4.1 测试namenode节点

1、输入地址:http://192.168.226.151:50070/

standby状态?

hadoop集群安装及测试

2、输入地址:http://192.168.226.152:50070/

active状态?

hadoop集群安装及测试

3、停止hadoop02机器的namenode节点

[[email protected] bin]# hadoop-daemon.sh stop namenode 

hadoop01的namenode节点状态,变为active

hadoop集群安装及测试

4、再次启动hadoop02机器的namenode节点

[[email protected] bin]# hadoop-daemon.sh start namenode

hadoop02的namenode节点状态,变为standby

4.2 测试resourcemanager节点

1、查看hadoop01机器的,resourcemanager节点

http://192.168.226.151:8088/

hadoop集群安装及测试

此时,hadoop03机器的resourcemanager节点无法访问

2、停止hadoop01机器的resourcemanager节点

[[email protected] bin]# yarn-daemon.sh stop resourcemanager

此时,resourcemanager节点切换到hadoop03上,hadoop01节点无法访问

4.3 查看hadoop使用情况

使用hadoop dfsadmin -report查看使用情况

hadoop集群安装及测试

hadoop集群安装及测试

hadoop集群安装及测试

4.4 疑问

开始时将hadoop01节点设置为namenode主节点,但是测试时,却为standby状态?


5、排错

1、排查防火墙

2、排查ip,如果不是固定ip的话,要看下ip是否被更换

3、主机名

4、hosts  ip和主机名是否对应上

5、排查zk的配置文件

6、排查hadoop的配置文件