hadoop集群安装及测试
在低配置虚拟机环境下测试安装hadoop集群环境。
1、集群实现准备
1.1 集群实现思路
1.2 虚拟机配置
建议配置:1G内存,2个CPU
由于测试机器配置有限,实际设置4台虚拟机,每台分配512M内存,1个CPU
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文件
NETWORKING=yes
HOSTNAME=hadoop01
NETWORKING=yes
HOSTNAME=hadoop02
NETWORKING=yes
HOSTNAME=hadoop03
NETWORKING=yes
HOSTNAME=hadoop04
NETWORKING=yes
HOSTNAME=hadoop04
[[email protected] ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hadoop04
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.gz2、在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
<!--执行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
注:3.3--3.5步可以用一步来替代:进入hadoop安装目录的sbin目录,执行:start-dfs.sh
3.2 启动journalnode集群
1、在hadoop04上的hadoop安装目录的sbin目录下执行,
sh hadoop-daemons.sh start journalnode
3.3 启动namenode节点
1、格式化hadoop01节点的namenode
[[email protected] bin]# hadoop namenode -format
2、启动hadoop01节点的namenode
[[email protected] bin]# hadoop-daemon.sh start namenode
3、把hadoop02节点的 namenode节点变为standbynamenode节点
在hadoop02节点上执行:
[[email protected] bin]# hdfs namenode -bootstrapStandby
4、启动hadoop02节点的namenode
[[email protected] bin]# hadoop-daemon.sh start namenode
3.4 启动datanode节点
1、启动hadoop04、hadoop05节点的datanode节点
[[email protected] sbin]# hadoop-daemon.sh start datanode
[[email protected] sbin]# hadoop-daemon.sh start datanode
3.5 启动zkfc(启动FalioverControllerActive)
1、在hadoop01,hadoop02节点上执行:hadoop-daemon.sh start zkfc
3.6 启动ResourceManager
1、在hadoop01节点上启动主ResourceManager
[[email protected] bin]# start-yarn.sh
同时hadoop04、hadoop05节点上同时自动启动nodemanager
2、在hadoop03节点上启动副ResourceManager
[[email protected] bin]# yarn-daemon.sh start resourcemanager
4、测试
4.1 测试namenode节点
1、输入地址:http://192.168.226.151:50070/
standby状态?
2、输入地址:http://192.168.226.152:50070/
active状态?
3、停止hadoop02机器的namenode节点
[[email protected] bin]# hadoop-daemon.sh stop namenode
hadoop01的namenode节点状态,变为active
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/
此时,hadoop03机器的resourcemanager节点无法访问
2、停止hadoop01机器的resourcemanager节点
[[email protected] bin]# yarn-daemon.sh stop resourcemanager
此时,resourcemanager节点切换到hadoop03上,hadoop01节点无法访问
4.3 查看hadoop使用情况
使用hadoop dfsadmin -report查看使用情况
4.4 疑问
开始时将hadoop01节点设置为namenode主节点,但是测试时,却为standby状态?
5、排错
1、排查防火墙
2、排查ip,如果不是固定ip的话,要看下ip是否被更换
3、主机名
4、hosts ip和主机名是否对应上
5、排查zk的配置文件
6、排查hadoop的配置文件