四种Hadoop集群搭建(二)

三  搭建namenode具备HA的集群
*实验环境
Hadoop-2.4.1
jdk1.7.0_25
Cenos 32位
三台虚拟机,分别为senior.shizhan02(192.168.195.11)、senior.shizhan03(192.168.195.12)、senior.shizhan04(192.168.195.13)
其中senior.shizhan04是namenode,senior.shizhan03是namenode,senior.shizhan02是resourcemanager
*设置linux系统的启动页面.      
linux系统不启动图形界面,而是启动命令行截面
Sudo vi  /ect/inttab 
Id:3:initdefault:
*配置文件
*hdfs-site.xml
<!--  配置nameservice-->
<property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
</property>
<property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
</property>
<!--  配置namenode-->
<property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>senior.shizhan04:8020</value>
</property>
<property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>senior.shizhan03:8020</value>
</property>
<!--  配置namenode的web页面-->
<property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>senior.shizhan04:50070</value>
</property>
<property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>senior.shizhan03:50070</value>
</property>
<!--  配置namenode共享编辑日志信息-->
<property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://senior.shizhan04:8485;senior.shizhan03:8485;senior.shizhan02:8485/mycluster</value>
</property>
<property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/home/hadoop/software/hadoop-2.4.1/data/jn</value>
</property>


<!--  配置客户端代理-->
<property>
        <name>dfs.client.failover.proxy.provider.mycluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--  配置hamenode的通信方式-->
<property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
</property>
<property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!--  配置namenode HA-->
<property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
</property>
*core-site.xml
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
</property>
<property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/software/hadoop-2.4.1/data</value>
</property>
<property>
        <name>ha.zookeeper.quorum</name>
        <value>senior.shizhan04:2181,senior.shizhan03:2181,senior.shizhan02:2181</value>
</property>
*slaves
<!--  配置集群所有的机器 -->
senior.shizhan04
senior.shizhan03
senior.shizhan02

*复制配置文件
我的配置文件都是在senior.shizhan04上修改的,所以修改完成之后需要将配置文件拷贝到两台两台机器上
scp  -r   /home/hadoop/software/hadoop-2.4.1/etc/hadoop/ senior.shizhan03:/home/hadoop/software/hadoop-2.4.1/etc/hadoop/
scp  -r   /home/hadoop/software/hadoop-2.4.1/etc/hadoop/ senior.shizhan02:/home/hadoop/software/hadoop-2.4.1/etc/hadoop/ 

*集群测试
*服务启动
启动journalnode
sbin/hadoop-daemons.sh  start journalnode

*格式化
bin/hdfs namenode -format

*启动zookeeper
在三台机器上分别执行:bin/zkServer.sh start
之后查看状态:  bin/zkServer.sh status
可以看到一台zookeeper是leader,两外两外是follow
*格式化zookeeper
hdfs zkfc -formatZK
*同步namenode之间的fsimage
将data目录中的信息复制到另一台namenode即可

*服务启动与测试,自行进行

四 resourcemanager与namenode都具备HA的集群

一共三台虚拟机,各个虚拟机上分配的角色如下表:

weekend1 (192.168.195.5)  weekend2 ( 192.168.195.135) weekend3(192.168.195.136) 
namenode-1namenode-2 
zkfc-1zkfc-2zkfc-3
zookeeper-1zookeeper-2           zookeeper-3
Journalnode-1Journalnode-2Journalnode-3
 Yarn-1Yarn-2
*设置linux系统的启动页面.      
linux系统不启动图形界面,而是启动命令行截面
Sudo vi  /ect/inttab 
Id:3:initdefault:

* 设置虚拟机
*更改用户权限
更改用户的sodu权限,切换到root用户下,修改/etc/sudoers
添加: hadoop   ALL=(ALL)     ALL
*修改Linux主机名:
[hadoop@weekend1 ~]$ sudo vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=weekend1

*修改IP:

命令行界面修改ip地址,修改IPADDR即可

vi /etc/sysconfig/network-scripts/ifcfg-eth0

*修改主机名和IP的映射关系
   sudo vi /etc/hosts
192.168.195.5  weekend1
192.168.195.135  weekend2
192.168.195.136     weekend3
*关闭防火墙
[hadoop@weekend1 hadoop]$ sudo chkconfig iptables off

*安装JDK,配置环境变量等
创建文件:
[hadoop@weekend1123 ~]$ mkdir software
安装jdk:
[hadoop@weekend1123 ~]$ tar -zxvf jdk-7u65-linux-i586.tar.gz  -C  software/
配置jdk:
[hadoop@weekend1123 ~]$ sudo   vi /etc/profile
添加以下两行:
export  JAVA_HOME=/home/hadoop/software/jdk1.7.0_65
export PATH=$PATH:$JAVA_HOME/bin
让配置文件生效:
[hadoop@weekend1123 ~]$ source /etc/profile

* 安装步骤:
1 安装配置zooekeeper集群(安装在weekend1,weekend2,weekend3)
1.1解压
tar -zxvf zookeeper-3.4.5.tar.gz -C /home/hadoop/software/
1.2修改配置
cd /home/hadoop/software/zookeeper-3.4.5/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改:dataDir=/weekend/zookeeper-3.4.5/tmp
添加:
server.1=weekend05:2888:3888
server.2=weekend06:2888:3888
server.3=weekend07:2888:3888
创建一个tmp文件夹
mkdir /weekend/zookeeper-3.4.5/tmp
创建空文件
touch /weekend/zookeeper-3.4.5/tmp/myid
在该文件中写入ID,按照zoo.cfg中配置的在不同的机器上写入对应的1,2,3
echo 1 > /weekend/zookeeper-3.4.5/tmp/myid
1.3将配置好的zookeeper拷贝到其他节点(首先分别在weekend06、weekend07根目录下创建一个software)
scp -r /weekend/zookeeper-3.4.5/ weekend3:/software/
scp -r /weekend/zookeeper-3.4.5/ weekend2:/software/

注意:修改weekend2、weekend3对应/weekend/zookeeper-3.4.5/tmp/myid内容
weekend2:
echo 2 > /software/zookeeper-3.4.5/tmp/myid
weekend3:
echo 3 > /software/zookeeper-3.4.5/tmp/myid

2.安装配置hadoop集群(在weekend01上操作)
2.1解压
tar -zxvf hadoop-2.4.1.tar.gz -C /software
2.2配置HDFS(hadoop2.0所有的配置文件都在$HADOOP_HOME/etc/hadoop目录下)
#将hadoop添加到环境变量中
vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.7.0_55
export HADOOP_HOME=/weekend/hadoop-2.4.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
source /etc/profile //让配置文件生效
2.2.1修改hadoo-env.sh
export JAVA_HOME=/home/hadoop/app/jdk1.7.0_55

2.2.2修改core-site.xml
<configuration>
<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1/</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/software/hadoop-2.4.1/tmp</value>
</property>

<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>weekend1:2181,weekend2:2181,weekend3:2181</value>
</property>
</configuration>

2.2.3修改hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>weekend1:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>weekend1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>weekend2:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>weekend2:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://weekend1:8485;weekend2:8485;weekend3:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/software/hadoop-2.4.1/journaldata</value>
</property>

<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>


2.2.4修改mapred-site.xml
<configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

2.2.5修改yarn-site.xml
<configuration>
<!-- 开启RM高可用 -->
<property>
   <name>yarn.resourcemanager.ha.enabled</name>
   <value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
   <name>yarn.resourcemanager.cluster-id</name>
   <value>yrc</value>
</property>
<!-- 指定RM的名字 -->
<property>
   <name>yarn.resourcemanager.ha.rm-ids</name>
   <value>rm1,rm2</value>
</property>
<!-- 分别指定RM的地址 -->
<property>
   <name>yarn.resourcemanager.hostname.rm1</name>
   <value>weekend2</value>
</property>
<property>
   <name>yarn.resourcemanager.hostname.rm2</name>
   <value>weekend3</value>
</property>
<!-- 指定zk集群地址 -->
<property>
   <name>yarn.resourcemanager.zk-address</name>
   <value>weekend1:2181,weekend2:2181,weekend3:2181</value>
</property>
<property>
   <name>yarn.nodemanager.aux-services</name>
   <value>mapreduce_shuffle</value>
</property>
</configuration>


2.2.6修改slaves
weekend1
weekend2
weekend3

2.2.7配置免密码登陆
#在weekend1上生产一对钥匙
#生成公钥与私钥,rsa是生成算法,不加参数时默认是此算法
[hadoop@weekend1123 ~]$ ssh-keygen -t rsa     
#创建authorized_keys文件
[hadoop@weekend1123 .ssh]$ touch authorized_keys 
#更改authorized_keys的权限,此文件的权限必须是600
[hadoop@weekend1123 .ssh]$ chmod 600 authorized_keys 
#将id_rsa.pub追加到authorized_keys中
[hadoop@weekend1123 .ssh]$ cat id_rsa.pub >> authorized_keys  

#将weekned1上的authorized_keys复制到其他节点上,并将其他节点的id_rsa.pub追加到authorized_keys中,之后将所有节点的公钥都添加完成的authorized_keys复制到所有的节点上,实现各个节点的无密码登陆。


2.4将配置好的hadoop拷贝到其他节点
scp -r /software/hadoop-2.4.1/  weekend2:/home/hadoop/software/
scp -r /software/hadoop-2.4.1/  weekend3:/home/hadoop/software/


###注意:严格按照下面的步骤
2.5启动zookeeper集群
cd /weekend/zookeeper-3.4.5/bin/zkServer.sh start
#查看状态:./zkServer.sh status

2.6启动journalnode(分别在在weekend1、weekend2、tcast3上执行)
cd /software/hadoop-2.4.1/sbin/hadoop-daemon.sh start journalnode
2.7格式化HDFS
#在weekend1上执行命令:
hdfs namenode -format
#格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/weekend/hadoop-2.4.1/data,然后将/hadoop-2.4.1/data拷贝到weekend2的/hadoop-2.4.1/下。
scp -r data/ weekend2:/home/hadoop/software/hadoop-2.4.1/
##也可以这样,建议hdfs namenode -bootstrapStandby

2.8格式化ZKFC(在weekend1上执行即可)
hdfs zkfc -formatZK

2.9启动HDFS(在weekend1上执行)
sbin/start-dfs.sh

2.10启动YARN(在weekend3上执行start-yarn.sh)
sbin/start-yarn.sh

*测试

http://192.168.195.5:50070
NameNode 'weekend01:9000' (active)
http://192.168.195.135:50070
NameNode 'weekend02:9000' (standby)

验证HDFS HA
hadoop fs -put /etc/profile /profile
hadoop fs -ls /
然后再kill掉active的NameNode
kill -9 <pid of NN>
通过浏览器访问:http://192.168.195.5:50070与
http://192.168.195.135:50070可以发现,两个namenode的角色发生了变化。

手动启动挂掉的NameNode
sbin/hadoop-daemon.sh start namenode
通过浏览器访问:http://192.168.1.201:50070
NameNode 'weekend01:9000' (standby)

验证YARN:
运行一下hadoop提供的demo中的WordCount程序:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /profile /out




阅读更多
个人分类: 大数据
上一篇四种Hadoop集群搭建(一)
博主设置当前文章不允许评论。

没有更多推荐了,返回首页

关闭
关闭
关闭