Hadoop高可用

IP规划

HOST

NN

NN

JN

DN

ZKFC

ZK

node01

*

*

*

node02

*

*

*

*

*

node03

*

*

*

node04

*

*

hadoop:2.6.5

JDK8安装

上传并解压

 tar -zxvf xxx.tar.gz

配置环境变量

export JAVA_HOME=/usr/local/jdk8
export CLASSPATH=.:/usr/local/jdk8/lib
export PATH=$PATH:/usr/local/jdk8/bin
 

设置主机名

静态的(Static hostname)

“静态”主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名。

瞬态的(Tansient hostname)

“瞬态”主机名是在系统运行时临时分配的主机名,例如,通过DHCP或mDNS服务器分配。

灵活的(Pretty hostname)

“灵活”主机名也有人叫做“别名”主机名。

“灵活”主机名则允许使用*形式(包括特殊/空白字符)的主机名,以展示给终端用户(如xh01@f5)。

“静态”主机名和“瞬态”主机名都遵从作为互联网域名同样的字符限制规则。

Hadoop高可用

Hadoop高可用

Hadoop高可用 

 

 

免密

生成公司钥

ssh-keygen -t rsa

cat id_rsa.pub >> authorized_keys

Hadoop高可用

 

另外一种算法

ssh-keygen -t dsa -P '' -f ./id_dsa

cat id_dsa.pub >> authorized_keys

scp ./id_dsa.pub  node01:`pwd`/node02.pub

-P指定密码为空,使用dsa算法

配置authorized_keys文件

把所有的节点上的id_rsa.pub都汇聚到authorized_keys文件中,分别上传到4台机器的/root/.ssh目录下

Hadoop高可用

 

测试

Hadoop高可用

 

Zookeeper的集群搭建

Zk java语言开发

基于内存存储数据,也需要在磁盘上做持久化

/tmp目录很危险,存在操作系统自动删除数据的风险的

Linux的数据一般放在/var目录下,软件放/opt目录下

解压

tar -zxvf zookeeper-3.4.6.tar.gz

修改配置文件

创建存放数据的目录: mkdir -p /var/bigdata/hadoop/zk

Hadoop高可用

Hadoop高可用 

 

参数说明:

dataDir---指定zk数据文件的存放路径

Server.1中的1是权重的意思,配置server.1、server.2、server.3为了保证任意2台zookeeper启动,都过50%(含)即选举成功

2888,3888分别代码zk使用时的端口和选举的端口,2181集群连接通信的端口

配置权重文件myid

Myid文件存放/var/bigdata/hadoop/zk即zoo.cfg的dataDir配置项指定的目录下

其内容为其权重值,即zoo.cfg中server.后的值

Hadoop高可用

 

配置环境变量

Vim /etc/profile

export ZOOKEEPER_HOME=/opt/bigdata/zookeeper-3.4.6

export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/sbin

上传zk到node3,node4节点

在node3,node4执行创建目录命令:

mkdir -p /opt/bigdata、mkdir -p /var/bigdata/hadoop/zk

    把node2的zookeeper安装包上传到node3,node4

 Hadoop高可用

 

scp -r ./zookeeper-3.4.6  node3:`pwd`

scp -r ./zookeeper-3.4.6  node4:`pwd`

`pwd`意思是就是当前目录,这样就复制到远程集群相应的目录了

配置node3,node4的权重--myid文件(与node2一样)

配置zookeeper环境变量(与node2一样)

启动zk

启动第1台node2:

Hadoop高可用

报错的原因是配置文件配置了3台,目前只启动了1台(如果再启动一台还报错,可能是配置文件配置错误或防火墙没有关闭)

第1台是folower

Hadoop高可用

启动第2台node3:

Hadoop高可用

 

第2台是leader

Hadoop高可用

 

第3台是follower

Hadoop高可用

 

Zookeeper启动命令

         zkServer.sh start  启动

         zkServer.sh stop   关闭

         zkServer.sh status  查看状态

Hadoop的安装

Hadoop2.X的nn节点最多2个,3.X最多5个

修改配置文件

Core-site.xml

<configuration>

 <property>

   <name>fs.defaultFS</name>

   <value>hdfs://mycluster</value>

 </property>

 <property>

   <name>ha.zookeeper.quorum</name>

   <value>node2:2181,node3:2181,node4:2181</value>

 </property>

</configuration>

说明:

fs.defaultFS配置项表示默认的文件系统,可以为具体某个物理节点或指定一个集群名, hdfs://mycluster中的hdfs:是前缀,固定的。

Mycluster: 自定义的

ha.zookeeper.quorum:配置项,指定zookeeper的地址

hdfs-site.xml

<property>

    <name>dfs.replication</name>

    <value>2</value>  表示副本的数量

</property>

<property>

   <name>dfs.namenode.name.dir</name>

   <value>/var/bigdata/hadoop/ha/dfs/name</value>

</property>

<property>

   <name>dfs.datanode.data.dir</name>

   <value>/var/bigdata/hadoop/ha/dfs/data</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:8020</value>

</property>

<property>

  <name>dfs.namenode.rpc-address.mycluster.nn2</name>

  <value>node2:8020</value>

</property>

<property>

  <name>dfs.namenode.http-address.mycluster.nn1</name>

  <value>node1:50070</value>

</property>

<property>

  <name>dfs.namenode.http-address.mycluster.nn2</name>

  <value>node2:50070</value>

</property>

#以下是JN在哪里启动,数据存那个磁盘

<property>

  <name>dfs.namenode.shared.edits.dir</name>

  <value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>

</property>

<property>

  <name>dfs.journalnode.edits.dir</name>

  <value>/var/bigdata/hadoop/ha/dfs/jn</value>

</property>

#HA角色切换的代理类和实现方法,我们用的ssh免密

<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_rsa</value>

</property>

#开启自动化: 启动zkfc

 <property>

   <name>dfs.ha.automatic-failover.enabled</name>

   <value>true</value>

 </property>

别忘了配置hadoop-env.sh中的JAVA_HOME

指定从节点

Hadoop高可用

3.X不叫slaves改为workers

 

上传其他节点

scp -r ./hadoop-2.6.5 node2:`pwd`

scp -r ./hadoop-2.6.5 node3:`pwd`

scp -r ./hadoop-2.6.5 node4:`pwd`

配置hadoop的环境变量

Hadoop高可用

 

在profile添加如下内容:

export HADOOP_HOME=/opt/bigdata/hadoop-2.6.5

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

初始化

JN

先启动JN   hadoop-daemon.sh start journalnode

在node1节点上执行

hadoop-daemon.sh start journalnode

Hadoop高可用

Hadoop高可用 

Hadoop高可用 

 

在node2节点上执行

hadoop-daemon.sh start journalnode

Hadoop高可用

 

在node2节点上执行

hadoop-daemon.sh start journalnode

查看 hadoop-root-journalnode-node3.log

Hadoop高可用

 

Nn

1格式化

选择一个NN 做格式化:hdfs namenode -format   <只有第一次搭建做,以后不用做>

2台nn随便挑一台格式化,在node1进行格式化: hdfs namenode -format

Hadoop高可用

 

本机JN目录多出:

Hadoop高可用

Hadoop高可用 

 

再看看node3 的日志

Hadoop高可用

 

再看看node的jn目录(也会增加这些东西)

Hadoop高可用

 

在节点node1(nn节点)上启动nn

启动这个格式化的NN ,以备另外一台同步  hadoop-daemon.sh start namenode

  hadoop-daemon.sh start namenode

Hadoop高可用

 

在节点node2上:

即在另外一台nn机器: hdfs namenode -bootstrapStandby

Hadoop高可用

Hadoop高可用 

Hadoop高可用 

Hadoop高可用 

 

执行 hdfs namenode -bootstrapStandby 启动namenode的从节点

格式化zk

   hdfs zkfc  -formatZK     <只有第一次搭建做,以后不用做>

在node4上操作

Hadoop高可用

 

在node1节点对zk进行格式化

  hdfs zkfc -formatZK

Hadoop高可用

 Hadoop高可用

 

Node4的zk客户端查看,发现确实创建了hadoop-ha这个节点

Hadoop高可用

格式化,就是创建zk目录

start-dfs.sh

格式化以后,在node1节点上执行start-dfs.sh

Hadoop高可用

Hadoop高可用 

 

在node3节点发现edits,

Hadoop高可用

 Hadoop高可用

 

 

Zk的节点变化

Hadoop高可用

Hadoop高可用 

 

浏览器:http://192.168.10.60:50070/

Hadoop高可用

 

谁抢到锁,谁active

报错

是因为hadoop-env.sh的JAVA_HOME没有配置(因为ssh远程登录其他节点无法读取profile的变量)

Hadoop高可用

 Hadoop高可用

 

Hadoop重启

stop-dfs.sh

start-dfs.sh

Hadoop高可用

 Hadoop高可用

 

你会发现namenode会自动切换到node2上

Hadoop高可用

 

没有datanode

如果jsp没有datanode节点,就把dfs目录下内容都删了,所有机器的

Hadoop高可用

 

上一篇:Hadoop系列


下一篇:js兼容性问题