Hadoop2.X的认识

Hadoop 2x

一.Hadoop1.x的弊端

1.namenode只有一个-->容易发生单点故障:当前直接出现问题,整个集群没办法工作

2.namenode没办法扩充

NameNode会随着业务量的增大,内存中的数据会越来越大

会导致一直要增加内存来满足集群的需要

一旦业务量大大的超过内存那么业务就无法被处理

3.NameNode内存太大

如果内存大小达到上百G,开机时间过长

4.不能实现业务隔离

二.Hadoop2.x的解决方案

1.集群高可用

添加主备namenode节点

当主节点发生故障时,直接切换成备用namenode节点

2.集群可扩展性

联邦机制(hdfs federation) 进行分而治之

2.x的变化对用户来讲都是透明的,对用的操作影响很小

三.Hadoop2.x之HA

1.HA的节点

ActiveNameNode(ANN) 活跃的节点

作用:管理元数据信息(路径 文件 权限 等...);启动时接受DN汇报的BLK信息;维护文件与块的映射,维护块与DN的映射;与DN保持心跳,监控DN的存活(3秒, 10 分钟);当客户端写入读取文件的时候都与ANN通信.

主活动节点类似于以前的皇帝

StandbyNameNode(SNN) 备用的NamdeNode

删除了SecondaryNameNode,其功能完全有StandbyNameNode代替;如果主节点发生故障可以瞬间切换到备用节点;

必须主备NameNode节点的内存要完全一致

作用:管理元数据信息(路径 文件 权限 等...);启动时接受DN汇报的BLK信息;维护文件与块的映射,维护块与DN的映射;与DN保持心跳,监控DN的存活(3s,10m),但是它只是监控,命令全部由ANN完成;当ANN生成日志后,SNN会获取到日志文件在自己的内存中重做;达到阈值(检查点 64M 3600S) 合并edits日志和FSimage快照(

因为备用节点有fsimage和日志,整个合并都是在SNN节点上完成的;整个合并的过程并不是停止SNN进行拍摄快照,而是根据fsimage和edits生成快照);快照生成之后会保存在SNN,并拷贝一份到ANN中.

备用节点类似于以前的太子

JournalNode 帮助我们拉取或者存放日志文件

作用:当ANN生成edits的时候,拉取一份到JN集群上;SNN会从JN集群上获取到最新的日志文件,进行重做;

JournalNode类似于以前的执笔太监

2.zookeeper

作用:管理NameNode的主备切换;监控主节点和备用节点的存活

ZKFC:管理NameNode的主备切换;监控主节点和备用节点的存活

DataNode 存储数据

作用:启动时他会同时向主备节点汇报blk的信息;运行时他会同时和主备节点保持心跳

四.Hadoop2.x之联邦机制

在2.x新增了联邦机制,使用命名空间(namespace)划分namenode作用的范围

namespace相当于是一个目录

具体数据还是要存放在DataNode上

虽然划分了命名空间,但是每个命名空间中namenode还是对应全部的datanode

这样datanode的使用率才会更高

blockpool-->存放着当前命名空间中所有的块对应dn的数据

命名空间卷 = namespace元数据+blockpool

因为命名空间卷是相互独立的,所有当一个namenode挂掉之后,其他命名空间是不会进行任何管理的

联邦机制依然存在单点故障的问题,也就是联邦内的命名空间也要实现HA

五.搭建Hadoop2.x的HA集群

1.搭建ZooKeeper集群

首先集群整体恢复到相互免密钥

上传并解压zookeeper

tar -zxvf zookeeper-3.4.6.tar.gz

移动压缩包到指定目录

mv zookeeper-3.4.6 /opt/sxt/

进入zookeeper文件中的conf

cd /opt/sxt/zookeeper-3.4.6/conf

拷贝zoo_sample.cfg并改名为zoo.cfg

cp zoo_sample.cfg zoo.cfg

修改配置文件

vim zoo.cfg

修改dataDir为dataDir=/var/sxt/zookeeper

添加:

server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888

创建zookeeper数据目录

mkdir -p /var/sxt/zookeeper

设置当前zookeeper的权值

echo 1 > /var/sxt/zookeeper/myid

配置zookeeper环境变量

vim /etc/profile

export JAVA_HOME=/usr/java/jdk1.7.0_67
export ZOOKEEPER_HOME=/opt/sxt/zookeeper-3.4.6
export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH

重新加载配置文件

source /etc/profile

拷贝到其他主机

scp -r /opt/sxt/zookeeper-3.4.6/ root@node02:/opt/sxt/

scp -r /opt/sxt/zookeeper-3.4.6/ root@node03:/opt/sxt/

在另外两台主机上创建指定路径

mkdir -p /var/sxt/zookeeper

修改权值

[root@node02 ~]# echo 2 > /var/sxt/zookeeper/myid

[root@node03 ~]# echo 2 > /var/sxt/zookeeper/myid

拷贝环境变量到其他主机

scp -r /etc/profile root@node02:/etc/profile

scp -r /etc/profile root@node03:/etc/profile

重新加载配置文件

source /etc/profile

注意:每台主机上都必须执行该加载命令

启动zookeeper集群

zkServer.sh start

注意:每台主机上都必须执行该加载命令

查看状态

zkServer.sh status

关闭zookeeper

zkServer.sh stop

关闭并拍摄快照

2.搭建Hadoop-HA集群

上传Hadoop压缩包并解压

tar -zxvf hadoop-2.6.5.tar.gz

移动Hadoop解压包到指定路径下

mv hadoop-2.6.5 /opt/sxt/

进入该路径下

cd /opt/sxt/hadoop-2.6.5/etc/hadoop/

修改JAVA_HOME路径

hadoop-env.sh

marped-env.sh

yarn-env.sh

配置核心文件

coer-site.xml

<property>
<name>fs.defaultFS</name>
<value>hdfs://shsxt</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node01:2181,node02:2181,node03:2181</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/sxt/hadoop/ha</value>
</property>

hdfs-site.xml

<property>
<name>dfs.nameservices</name>
<value>shsxt</value>
</property>
<property>
<name>dfs.ha.namenodes.shsxt</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.shsxt.nn1</name>
<value>node01:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.shsxt.nn2</name>
<value>node02:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.shsxt.nn1</name>
<value>node01:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.shsxt.nn2</name>
<value>node02:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node01:8485;node02:8485;node03:8485/shsxt</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/sxt/hadoop/ha/jn</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.shsxt</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
<value>shell(true)</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_dsa</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>

修改salves文件

删除localhost

添加

node01
node02
node03

配置Hadoop环境变量

export JAVA_HOME=/usr/java/jdk1.7.0_67
export HADOOP_HOME=/opt/sxt/hadoop-2.6.5
export ZOOKEEPER_HOME=/opt/sxt/zookeeper-3.4.6
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$PATH

拷贝该文件到其他主机上

scp /etc/profile root@node02:/etc/profile

scp /etc/profile root@node03:/etc/profile

在三天虚拟机上同时加载加载配置文件

source /etc/profile

将Hadoop拷贝到其他主机上

scp -r /opt/sxt/hadoop-2.6.5/ root@node02:/opt/sxt/

scp -r /opt/sxt/hadoop-2.6.5/ root@node03:/opt/sxt/

创建hadoop数据目录

mkdir -p /var/sxt/hadoop/ha/jn

三台拟机同时启动zookeeper

zkServer.sh start

查看zookeeper状态

zkServer.sh status

在三台虚拟机上启动JouralNode

hadoop-daemon.sh start journalnode

在第一台虚拟机上格式化NameNode

hdfs namenode -format

hadoop-daemon.sh start namenode

在第二台虚拟机上格式化bootstrapStandby

hdfs namenode -bootstrapStandby

在第一台虚拟机上格式化ZKFC

hdfs zkfc -formatZK

在第一台虚拟机上启动集群

start-dfs.sh

注意:这里是以第一台虚拟机作为主虚拟机

执行命令

hdfs dfs -mkdir -p /shsxt/java

hdfs dfs -D dfs.blocksize=1048576 -put jdk-7u67-linux-x64.rpm /user/root

进网站查看相关信息

http://192.168.61.220:50070

关机拍摄快照

3.脑裂

ZKFC专门监控Namenode的状态

health monitor 健康监控器;ActiveStandbyElector 主备的选举

health monitor监控主备节点,如果发现主节点发生故障,通知ZKFC;当ZKFC确认需要发生重新选择的时候;ActiveStandbyElector和Zookeeper会对主备重新进行投票选举;肯定选择备用节点为主节点,zkfc通过rpc调用将节点的standby状态设置为active.

4.搭建集群出现的坑

(1)先启动Hadoop后启动zookeeper,zookeeper无法选举主节点,即就是没有主节点,全是从节点

解决方案:删除相关文件var/sxt/hadoop/ha/jn

rm -rf var/sxt/hadoop/ha/jn

重新创建该文件

mkdir -p /var/sxt/hadoop/ha/jn

先启动zookeeper再启动Hadoop即可

(2)jdk路径找不到

解决方案:由于执行配置环境变量这一步 vim /etc/profile 时 没有进行 souerce /etc/profile ;删除相关文件var/sxt/hadoop/ha/jn,再重新生成,再执行 souerce /etc/profile,最后启动即可.

(3)某个节点莫名其妙的死亡

解决方案:该主机的主机名与hdfs-site.xml中的名称不一致,进去修改 .删除相关文件,重新启动即可.

六.搭建eclipse环境

1.Windows配置Hadoop文件

解压hadoop-2.6.5.tar.gz

将其拷贝到 D:\hadoop-2.6.5\hadoop-2.6.5

解压bin.zip文件

将解压后的文件覆盖D:\hadoop-2.6.5\hadoop-2.6.5\bin

配置环境变量

配置HADOOP_HOME : D:\hadoop-2.6.5\hadoop-2.6.5

配置HADOOP_USER_NAME : root

配置PATH: 添加 %HADOOP_HOME%/bin

%HADOOP_HOME%/sbin

配置C:\Windows\System32\drivers\etc\hosts

添加虚拟机节点信息

192.168.61.220 node01
192.168.61.221 node02
192.168.61.222 node03
2.Windows配置eclipse文件

解压Eclipse

放到指定目录 D:\Program Files\eclipse-hadoop

打开eclipse

打开map-reduce视图

创建新的链接

连接名称 shsxt-ha (自定义名称就可以)

node01(查看节点,该节点为主节点)

8020(hdfs-site.xml中配置的访问端口)

user name :root

 

posted @ 2019-11-05 08:42  数据阮小白  阅读(177)  评论(0编辑  收藏  举报