hadoop系统原理,第1张

1Hadoop介绍

Hadoop是Apache旗下的一个用java语言实现开源软件框架,是一个开发和运行处理大规模数据的软件平台。允许使用简单的编程模型在大量计算机集群上对大型数据集进行分布式处理。

狭义上说,Hadoop指Apache这款开源框架,它的核心组件有:

HDFS(分布式文件系统):解决海量数据存储

YARN(作业调度和集群资源管理的框架):解决资源任务调度

MAPREDUCE(分布式运算编程框架):解决海量数据计算

广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈。

当下的Hadoop已经成长为一个庞大的体系,随着生态系统的成长,新出现的项目越来越多,其中不乏一些非Apache主管的项目,这些项目对HADOOP是很好的补充或者更高层的抽象。

2Hadoop的特点

扩容能力(Scalable):Hadoop是在可用的计算机集群间分配数据并完成计算任务的,这些集群可用方便的扩展到数以千计的节点中。

成本低(Economical):Hadoop通过普通廉价的机器组成服务器集群来分发以及处理数据,以至于成本很低。

高效率(Efficient):通过并发数据,Hadoop可以在节点之间动态并行的移动数据,使得速度非常快。

可靠性(Rellable):能自动维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。所以Hadoop的按位存储和处理数据的能力值得人们信赖。

3Hadoop的历史版本

1x版本系列:hadoop版本当中的第二代开源版本,主要修复0x版本的一些bug等,该版本已被淘汰

2x版本系列:架构产生重大变化,引入了yarn平台等许多新特性,是现在使用的主流版本。

3x版本系列:对HDFS、MapReduce、YARN都有较大升级,还新增了Ozone key-value存储。

4Hadoop的架构和模型介绍

由于Hadoop 20是基于JDK 17开发的,而JDK 17在2015年4月已停止更新,这直接迫使Hadoop社区基于JDK 18重新发布一个新的Hadoop版本,即hadoop 30。Hadoop 30中引入了一些重要的功能和优化,包括HDFS 可擦除编码、多Namenode支持、MR Native Task优化、YARN基于cgroup的内存和磁盘IO隔离、YARN container resizing等。

Apache hadoop 项目组最新消息,hadoop3x以后将会调整方案架构,将Mapreduce 基于内存+io+磁盘,共同处理数据。改变最大的是hdfs,hdfs 通过最近block块计算,根据最近计算原则,本地block块,加入到内存,先计算,通过IO,共享内存计算区域,最后快速形成计算结果,比Spark快10倍。

Sentinel(哨兵)进程的作用:

1监控(Monitoring): sentinel会不断地检查你的Master和Slave是否运作正常

2提醒(Notification):当被监控的某个Redis节点出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知

3自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master;当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用现在的Master替换失效Master。Master和Slave服务器切换后,Master的redisconf、Slave的redisconf和sentinelconf的配置文件的内容都会发生相应的改变,即,Master主服务器的redisconf配置文件中会多一行slaveof的配置,sentinelconf的监控目标会随之调换。

主观下线(Subjectively Down, 简称 SDOWN)指的是单个 Sentinel 实例对服务器做出的下线判断

客观下线 (Objectively Down, 简称 ODOWN)指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的服务器下线判断。(一个 Sentinel 可以通过向另一个 Sentinel 发送 SENTINEL is-master-down-by-addr 命令来询问对方是否认为给定的服务器已下线。)

https://wwwcnblogscom/JJY-/articles/12066861html

关于集群限流的功能,官方文档写的非常详细: 集群流控官方文档

官方文档中有demo,但是隐藏了太多细节,且依赖了nacos,我这里自己写了一个demo。

demo地址: https://githubcom/shxz130/sentinel-demo

首先启动一个Server端:

在初始化规则的时候,指定集群 or 单机模式,指定限流规则,指定限流类型qps or threads ,最后,加载单机规则,集群NameSpace以及nameSpace对应的集群规则。

在初始化Server的时候,指定TokenServer的Ip和端口,并加载nameSpace信息到Cluster。

初始化客户端的时候,实质是指定客户端规则,配置服务端地址和IP。

最后,启动服务,则是将上面配置的Server信息对外暴漏服务。

这里的端口号是设置服务端的端口号,单独启动Server,这里配置1s中10个QPS,模拟1s中10个请求,能看到运行结果如下:

结果都是通过的,但并不代表限流生效。将1s中请求10个改为20,也就是超时时间由100改为50,运行结果一半通过,一半阻塞

可以看到,单机限流是生效了。

为了模拟集群环境,启动一个客户端,客户端的配置和服务端区别在于最后启动的不是Server,而是Client。

设置客户端方式和服务端一致。

先启动服务端。后启动客户端,可以看到服务端日志:

可以看到,当服务端启动的时候,只有服务端一个节点,所以请求全部通过,当客户端联通服务端之后,因为有了客户端连接,所以服务端有block的请求了。

再看一下客户端的日志:

可以看到,在同1s的时间里,客户端和服务端的请求通过数加起来就是集群QPS数。

集群限流生效。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » hadoop系统原理

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情