重温大数据

编程入门 行业动态 更新时间:2024-10-15 18:27:30

重温大<a href=https://www.elefans.com/category/jswz/34/1771445.html style=数据"/>

重温大数据

说完这一讲,Hadoop四个核心模块的内容基本上就结束了。前面讲过了基础的部署,包括单机、伪分布式,虽然完全分布式其实也挺简单的,但是既然是知识的梳理,在本节我也做个讲解吧。本节最重要的内容是对HDFS的HA架构的搭建。一年前看得我头大,其实嘛没有那么难,只是被高端大气的名字给吓着了。?

先谈完全分布式架构


完全分布式的概念很好理解,就是把Namenode,ResourceManager,Datanode等,分开放置到不同的机器运行,分担主节点的压力,以达到提升集群的处理能力。百度的一张架构图,基本上就这意思。


重点我们看看如何着手搭建一个分布式集群。在Hadoop初窥里面我提过一嘴(多搞几台机器 修改DataNode个数 配置slave(指定DataNode)文件 配置hosts文件 ssh OK OK不? 反正我不想打字写分布式配置了。)别看我说的倒是轻松,理清了思路,按着路子搭其实的确也轻松。后面我会用Cloudera Manager在我屋三台服务器上搭建一个企业级?的集群。那个可比手动搭建舒服太多了。具体细节我后面也会做个介绍。

硬件配置

192.168.1.205192.168.1.206192.168.1.207
masterslave1slave2
1.5G1G1G
1 CPU1 CPU1 CPU

集群规划
HDFS:

192.168.1.205192.168.1.206192.168.1.207
masterslave1slave2
NameNodeDataNodeDataNode
DataNodeSecondaryNameNode

Yarn:

192.168.1.205192.168.1.206192.168.1.207
masterslave1slave2
NodeManagerNodeManagerNodeManager
ResourceManager

搭建思路:

  • 第一步:机器准备

    • 克隆机器
    • 修改ip
    • 修改主机名
    • 设置好映射
  • 第二步:文件配置

    • HDFS
      • hadoop-env.sh 配置:java_home 就干这事

      • core-site.xml 伪分布式基础上不做什么改变

      • hdfs-site.xml
        (默认就是三个可以删掉)

      • slaves

    • YARN
      • yarn-env.sh 配置:java_home 就干这事
      • yarn-site.xml
    • MapReduce
      • mapred-env.sh 配置:java_home 就干这事
      • mapred-site.xml 伪分布式基础上不做什么改变
  • 第三步:SSH无密码登录

    • ssh-keygen -t rsa
    • ssh-copy-id 节点
    • 测试
    • ssh 节点
    • exit
  • 第四步:文件同步

  • scp -r xxx slave1:xxx/xxx

  • 第五步:配置时间同步

    • ntp的配置我没配,我学习环境就没弄这个,如果真实的开发一定要配置。

集群测试

  • 基本测试

      1. 服务启动,是否可用,简单的应用2. HDFS创建和删除是否能够成功3. yarn run jar4. mapreduce
    
  • 基准测试

      	1. 测试集群的性能2. hdfs:写数据、读数据
    
  • 监控集群

      	1.Cloudera Manager部署安装集群监控集群配置同步集群预警
    

再谈实现HA


先引出一个分布式服务框架Zookeeper。

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 -----百度百科

Zookeeper架构图

为什么使用ZK实现HA呢?因为官方就是这样建议的。?实际上也很好理解。ZooKeeper提供了一个Leader Election机制,利用这个机制能够保证尽管集群存在多个Master可是唯独一个是Active的,其它的都是Standby,当Active的Master出现问题时。另外的一个Standby Master会被选举出来。因为集群的信息,包含Worker, Driver和Application的信息都已经持久化到文件系统,因此在切换的过程中只会影响新Job的提交。对于正在进行的Job没有什么影响。懂了吧!高可用就这样来的。

Zookeeper 安装配置

  1. 复制配置文件:

在Zookeeper的主目录的conf文件夹下,有一个实例的配置文件zoo_sample.cfg,我们复制一份出来:

  • $ cd /opt/modules/zookeeper-3.4.5/conf

  • $ cp -a zoo_sample.cfg zoo.cfg

  • $ vi zoo.cfg

  • $ mkdir data

  1. 配置数据存储目录:

按照开发规范,我们通常在zookeeper的安装目录下,新建一个目录data,将这个目录作为zookeeper的数据存储目录。

  • dataDir=/opt/modules/zookeeper-3.4.5/data

  • zoo.cfg重要参数介绍:

  • tickTime:zookeeper服务器与服务器之间,或者服务器与客户端之间维持心跳的时间间隔。单位:毫秒。

  • clientPort:客户端连接zookeeper服务器的端口。默认2181

  • dataDir:Zookeeper保存数据的目录。

  1. 在zoo.cfg中添加服务器信息:
  • 格式: server.A=B:C:D 。 在zoo.cfg中添加如下内容:

  • server.1=192.168.1.205:2888:3888

  • server.2=192.168.1.206:2888:3888

  • server.3=192.168.1.207:2888:3888

  1. 在每台服务器的$ZOOKEEPER_HOME/data/目录创建myid文件。
  • 在master服务器(192.168.1.205)上,cd 到$ZOOKEEPER_HOME/data/目录,创建myid文件,myid文件的内容是1

  • 在slave1服务器(192.168.1.206)上,cd 到$ZOOKEEPER_HOME/data/目录,创建myid文件,myid文件的内容是2

  • 在slave2服务器(192.168.1.207)上,cd 到$ZOOKEEPER_HOME/data/目录,创建myid文件,myid文件的内容是3

  • 在一台机器上配置好,拷贝到其他服务器:

  • $ scp -r zookeeper-3.4.5/ slave1:/opt/modules/

  1. 启动Zookeeper:
  • $ bin/zkServer.sh start
  • 查看状态
  • bin/zkServer.sh status

注意:启动操作需要在三台服务器上都执行。

HDFS HA的背景

  • HDFS集群中NameNode 存在单点故障(SPOF)。对于只有一个NameNode的集群,如果NameNode机器出现意外情况,将导致整个集群无法使用,直到NameNode 重新启动。

  • 影响HDFS集群不可用主要包括以下两种情况:一是NameNode机器宕机,将导致集群不可用,重启NameNode之后才可使用;二是计划内的NameNode节点软件或硬件升级,导致集群在短时间内不可用。

  • 为了解决上述问题,Hadoop给出了HDFS的高可用HA方案:HDFS通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,比如处理来自客户端的RPC请求,而Standby NameNode则不对外提供服务,仅同步Active NameNode的状态,以便能够在它失败时快速进行切换。

HDFS HA的架构


对这张图做个说明:

  1. ZKFC控制着两个Namenode,当其中一个挂掉后Zk通过选举,迅速的开启另一个Namenode进入active状态。
  2. 两个NN时刻保持文件系统元数据的同步和一致。
  3. Datanode时刻向两个NN发送report。

HDFS HA设计


HDFS HA配置

配置HA要点

  • share edits
    JournalNode (日志节点)至少三个

  • NameNode
    Active,Standby

  • Client
    Proxy

  • fence

      同一时刻仅仅有一个NameNode对外提供服务使用的方式sshfence两个NameNode之间能够ssh无密码登录205(NameNode) ssh -> 206206(NameNode) ssh -> 205
    

规划集群

192.168.1.205192.168.1.206192.168.1.207
masterslave1slave2
NameNodeNameNode
JournalNodeJournalNodeJournalNode
DataNodeDataNodeDataNode

配置HA后不需要secondarynamenode了,为什么呢?配置HA后备份的Namenode基本上替代了它。

配置细节 都是官网上的东西

   hdfs-site.xml 
	<property><name>dfs.nameservices</name><value>mycluster</value></property>// 命名空间<property><name>dfs.ha.namenodes.mycluster</name><value>nn1,nn2</value></property>// 管理哪两个nn<property><name>dfs.namenode.rpc-address.mycluster.nn1</name><value>machine1.example:8020</value></property><property><name>dfs.namenode.rpc-address.mycluster.nn2</name><value>machine2.example:8020</value></property>// nn在哪台机器// 配置两个nn访问端口Web<property><name>dfs.namenode.http-address.mycluster.nn1</name><value>machine1.example:50070</value></property><property><name>dfs.namenode.http-address.mycluster.nn2</name><value>machine2.example:50070</value></property>// 共享日志的目录<property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://node1.example:8485;node2.example:8485;node3.example:8485/mycluster</value></property> // 配置客户端访问<property><name>dfs.client.failover.proxy.provider.mycluster</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property>//配置隔离方式 ssh隔离<property><name>dfs.ha.fencing.methods</name><value>sshfence</value></property><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/home/exampleuser/.ssh/id_rsa</value></property> 使用的方式sshfence两个NameNode之间能够ssh无密码登录131(NameNode) ssh -> 132132(NameNode) ssh -> 131 // 配置日志文件写在本地那个目录<property><name>dfs.journalnode.edits.dir</name><value>/opt/app/hadoop-2.7.3/data/dfs/jn</value></property>//配置 core-site.xml<property><name>fs.defaultFS</name><value>hdfs://mycluster</value></property>

最后向其他两个节点同步文件

启动顺序

  • ./hadoop-daemon.sh start journalnode(每个)
  • bin/hdfs namenode -format(nn1)
  • sbin/hadoop-daemon.sh start namenode
  • ./hdfs namenode -bootstrapStandby(nn2)
  • ./hadoop-daemon.sh start datanode
  • ./hdfs haadmin -transitionToActive nn1

千万不要手贱乱格式化,贼烦!

ZK实现自动故障转换

HA 自动故障转移 Zookeeper

192.168.1.205192.168.1.206192.168.1.207
masterslave1slave2
NameNodeNameNode
ZKFCZKFC
JournalNodeJournalNodeJournalNode
DataNodeDataNodeDataNode

启动后都是Standby,需要选举一个为Active。ZKFC实现对两个Namenode的实时监控。

配置细节:

  • hdfs-site.xml
          // 启动故障自动转移<property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property>
    // 依赖ZK  需要知道ZK在哪
  • core-site.xml
		<property><name>ha.zookeeper.quorum</name><value>master:2181,slave1:2181,slave2:2181</value></property>

启动:

  • 关闭所有的HDFS服务:stop-dfs.sh
  • 启动zookeeper集群:zkServer.sh start
  • 初始化ZK中的状态:hdfs zkfc -formatZK
  • 启动HDFS服务:start-dfs.sh

这里的start-dfs.sh 启动一切 包括zkFc。

值得一提的是zk挂掉不会影响集群,只是不能故障转移了,失去了对集群的选举。最后小声说一说HA太简单了! ???

Federation联盟


NameNode

能不能有多个NameNode
NameNode 			NameNode 				NameNode
元数据				元数据					元数据
log				machine					电商数据/话单数据

三个模块把数据存在所有的DataNodes节点上,于是出现了下面的架构,提供解决方案。

集中式缓存管理


HDFS允许用户将一部分文件或目录缓存在HDFS中,Namenode会通知拥有对应快的DataNodes将其缓存在datanode的内存中。

分布式拷贝


数据迁移,如将测试集群的数据拷贝到生产集群 详见官网 点我

拷贝命令:

hadoop distcp -i hftp://sourceFS:50070/src hdfs://destFS:8020/dest

Yarn的HA


在熟练配置了HDFS的HA后,Yarn的HA配置也是十分简单的,它的架构基本上和HDFS的是一样的。也是通过zk选举RM来实现高可用。

详细配置 都是官网上的东西

		<property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><property><name>yarn.resourcemanager.cluster-id</name><value>cluster1</value></property><property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value></property><property><name>yarn.resourcemanager.hostname.rm1</name><value>master1</value></property><property><name>yarn.resourcemanager.hostname.rm2</name><value>master2</value></property><property><name>yarn.resourcemanager.webapp.address.rm1</name><value>master1:8088</value></property><property><name>yarn.resourcemanager.webapp.address.rm2</name><value>master2:8088</value></property><property><name>yarn.resourcemanager.zk-address</name><value>zk1:2181,zk2:2181,zk3:2181</value></property>

命令详见官网 点我

	 $ yarn rmadmin -getServiceState rm1active$ yarn rmadmin -getServiceState rm2standby$ yarn rmadmin -transitionToStandby rm1Automatic failover is enabled for org.apache.hadoop.yarn.client.RMHAServiceTarget@1d8299fdRefusing to manually manage HA state, since it may causea split-brain scenario or other incorrect state.If you are very sure you know what you are doing, pleasespecify the forcemanual flag.

总结


HA这一块,你要是照着官方文档配置其实还是挺简单的,一年前的我直接跳过了HA,只知道是高可用。想想还是太年轻了。在应用这一块,配置好能放到生产环境基本上就可以了吧!到此呢Hadoop的四个核心模块的内容就告一段落了,花了四天时间边学边练。从早做到晚的学习我尽然不困?。可能这就是知识的力量吧!又看书又看视频还看官方文档,尽然不脱发?少年你渴望力量吗??下面的就是Hive的温习了,Hive不论对谁来说应该都比MR简单吧,我应该能很快的过过去,加紧时间学习!后面还有一大片呢!

更多推荐

重温大数据

本文发布于:2024-02-07 00:00:47,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1751846.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!