大数据Hadoop之ZooKeeper认识

大数据Hadoop之ZooKeeper认识,第1张

Zookeeper字面上理解就是动物管理员,Hadoop生态圈中很多开源项目使用动物命名,那么需要一个管理员来管理这些“动物”。

集群的管理中Zookeeper起到非常重要的角色,他负责分布式应用程序协调的工作。

Zookeeper管理集群会选举一个Leader节点(可参考FastLeader选举算法,即快速选举Leader节点),Leader节点主要负责整个Zookeeper集群的运行管理,Follower负责管理具体的数据存储与读取。

Zookeeper主要提供以下四点功能:统一命名服务、配置管理、集群管理、共享锁和队列管理,用于高效的管理集群的运行。

1 统一命名服务

命名服务指通过指定的名字获取资源或者服务提供者的信息。分布式应用中,通常需要有一套完整的命名规则,既能够产生唯一的名称又便于识别和记忆。通常情况下使用树形的名称结构是一个理想的选择,树形的名称结构是一个有层次的目录结构,即对人友好又不会重复。

Zookeeper集群中统一由Leader节点(图中M节点)来管理所有Follower节点(图中的S1和S2节点)的命名空间。Zookeeper提供统一的命名服务,他不对外提供数据也不存储数据,他只提供一套统一的命名规则,运行在Zookeeper之上的服务需要遵循这一套命名规则。其中较为常见的就是一些分布式服务框架中的服务地址列表。通过调用ZK提供的创建节点的接口(API),能够很容易创建一个全局唯一的路径(path),这个path就可以作为一个名称。命名服务(NameService)已经是Zookeeper内置的功能,你只要调用Zookeeper的API就能实现。如调用create接口就可以很容易创建一个目录节点。

遵循Leader统一管理命名规则下,集群中数据读写的方式:

11写数据,一个客户端进行写数据请求时,会指定Zookeeper集群节点,如果是Follower接收到写请求,会把请求转发给Leader,Leader通过内部的Zab协议进行原子广播,直到所有Zookeeper节点都成功写了数据,然后Zookeeper会给Client发回写完响应。

12读数据,因为集群中Zookeeper按照统一的命名空间,所有Zookeeper节点呈现相同的命名空间视图(文件目录名称结构),所以读数据的时候请求任意一台Zookeeper节点都一样。

2 配置管理

配置的管理在分布式应用环境中很常见,例如同一个应用需要在多台服务器上运行,但是它们的应用系统的某些配置相同的,如果要修改这些相同的配置项,就必须同时修改每台运行这个应用系统的PC Server,这样非常麻烦而且容易出错。像这样的配置信息完全可以交给Zookeeper来管理,处理起来非常便捷。

配置的管理包含发布和订阅两个过程,顾名思义就是将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中管理和动态更新。

如图所示,将配置信息保存在Zookeeper(Leader节点)的某一个目录中,然后将所有需要修改的应用机器订阅该Zookeeper(Leader节点)节点,一旦Leader节点发布新配置信息,每台订阅的机器就会收到Zookeeper的通知,然后从Zookeeper获取新的配置信息应用到系统中,完成配置的集中统一管理。

3 集群管理

Zookeeper在集群管理中主要是集群监控和Leader选举。

31集群管理

这通常用于那种对集群中机器状态、 , 机器在线率有较高要求的场景,能够快速对集群中机器变化做出响应。这样的场景中,往往有一个监控系统,实时检测集群机器是否存活。过去的做法通常是:监控系统通过某种手段(比如ping)定时检测每个机器,或者每个机器自己定时向监控系统汇报"我还活着"。

这种做法可行,但是存在两个比较明显的问题:

1)集群中机器有变动的时候,牵连修改的东西比较多。

2)有一定的延时。

利用ZooKeeper中两个特性,就可以实施另一种集群机器存活性监控系统:

1)客户端在示例节点A上注册一个监控者(Watcher),那么如果A的子节点变化了,会通知该客户端。

2)创建EPHEMERAL类型的节点,一旦客户端和服务器的会话结束或过期,那么该节点就会消失。

32Leader选举:

Leader选举即从大量集群节点中选举一个Leader节点,是zookeeper中最为经典的使用场景,在分布式环境中选举的Leader节点好快会直接影响集群的效率。Leader节点主要负责相同的业务应用分布在不同的机器上共用的逻辑模型和数据的调配,优秀的调配方案可以大大减少重复运算,提高性能降低集群的负载。

利用ZooKeeper中两个特性,就可以实施另一种集群中Leader选举:

1)利用ZooKeeper的强一致性,能够保证在分布式高并发情况下节点创建的全局唯一性,即:同时有多个客户端请求创建Leader节点,最终一定只有一个客户端请求能够创建成功。利用这个特性,就能很轻易的在分布式环境中进行集群的Leader选举了。

2)另外,这种场景演化一下,就是动态Leader选举。这就要用到EPHEMERAL_SEQUENTIAL类型节点的特性了,这样每个节点会自动被编号。允许所有请求都能够创建成功,但是创建节点会为每个节点安排顺序,每次选取序列号最小的那个机器作为Leader。

小结

Zookeeper作为Hadoop主要的组件,在集群管理方面为我们提供了解决方案。通过对统一命名服务、配置管理和集群管理的阅读,我们能够清晰的理解Zookeeper的核心内容。针对共享锁和队列服务偏技术实现,有兴趣的可以进一步研究。

Zookeeper在大数据集群中解决集群管理的问题,磨刀不误砍柴工,了解完工具我们下一次分享一些具体的实效应用。

大数据的由来

对于“大数据”(Big data)研究机构Gartner给出了这样的定义。“大数据”是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产。

1

麦肯锡全球研究所给出的定义是:一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低四大特征。

大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。换而言之,如果把大数据比作一种产业,那么这种产业实现盈利的关键,在于提高对数据的“加工能力”,通过“加工”实现数据的“增值”。

从技术上看,大数据与云计算的关系就像一枚硬币的正反面一样密不可分。大数据必然无法用单台的计算机进行处理,必须采用分布式架构。它的特色在于对海量数据进行分布式数据挖掘。但它必须依托云计算的分布式处理、分布式数据库和云存储、虚拟化技术。

大数据需要特殊的技术,以有效地处理大量的容忍经过时间内的数据。适用于大数据的技术,包括大规模并行处理(MPP)数据库、数据挖掘、分布式文件系统、分布式数据库、云计算平台、互联网和可扩展的存储系统。

最小的基本单位是bit,按顺序给出所有单位:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。

大数据的应用领域

大数据无处不在,大数据应用于各个行业,包括金融、 汽车 、餐饮、电信、能源、体能和 娱乐 等在内的 社会 各行各业都已经融入了大数据的印迹。

制造业,利用工业大数据提升制造业水平,包括产品故障诊断与预测、分析工艺流程、改进生产工艺,优化生产过程能耗、工业供应链分析与优化、生产计划与排程。

金融行业,大数据在高频交易、社交情绪分析和信贷风险分析三大金融创新领域发挥重大作用。

汽车 行业,利用大数据和物联网技术的无人驾驶 汽车 ,在不远的未来将走入我们的日常生活。

互联网行业,借助于大数据技术,可以分析客户行为,进行商品推荐和针对性广告投放。

电信行业,利用大数据技术实现客户离网分析,及时掌握客户离网倾向,出台客户挽留措施。

能源行业,随着智能电网的发展,电力公司可以掌握海量的用户用电信息,利用大数据技术分析用户用电模式,可以改进电网运行,合理设计电力需求响应系统,确保电网运行安全。

物流行业,利用大数据优化物流网络,提高物流效率,降低物流成本。

城市管理,可以利用大数据实现智能交通、环保监测、城市规划和智能安防。

体育 娱乐 ,大数据可以帮助我们训练球队,决定投拍哪种 题财的 影视作品,以及预测比赛结果。

安全领域,政府可以利用大数据技术构建起强大的国家安全保障体系,企业可以利用大数据抵御网络攻击,警察可以借助大数据来预防犯罪。

个人生活, 大数据还可以应用于个人生活,利用与每个人相关联的“个人大数据”,分析个人生活行为习惯,为其提供更加周到的个性化服务。

大数据的价值,远远不止于此,大数据对各行各业的渗透,大大推动了 社会 生产和生活,未来必将产生重大而深远的影响。

大数据方面核心技术有哪些?

大数据技术的体系庞大且复杂,基础的技术包含数据的采集、数据预处理、分布式存储、NoSQL数据库、数据仓库、机器学习、并行计算、可视化等各种技术范畴和不同的技术层面。首先给出一个通用化的大数据处理框架,主要分为下面几个方面:数据采集与预处理、数据存储、数据清洗、数据查询分析和数据可视化。

数据采集与预处理

对于各种来源的数据,包括移动互联网数据、社交网络的数据等,这些结构化和非结构化的海量数据是零散的,也就是所谓的数据孤岛,此时的这些数据并没有什么意义,数据采集就是将这些数据写入数据仓库中,把零散的数据整合在一起,对这些数据综合起来进行分析。数据采集包括文件日志的采集、数据库日志的采集、关系型数据库的接入和应用程序的接入等。在数据量比较小的时候,可以写个定时的脚本将日志写入存储系统,但随着数据量的增长,这些方法无法提供数据安全保障,并且运维困难,需要更强壮的解决方案。

Flume NG

Flume NG作为实时日志收集系统,支持在日志系统中定制各类数据发送方,用于收集数据,同时,对数据进行简单处理,并写到各种数据接收方(比如文本,HDFS,Hbase等)。Flume NG采用的是三层架构:Agent层,Collector层和Store层,每一层均可水平拓展。其中Agent包含Source,Channel和 Sink,source用来消费(收集)数据源到channel组件中,channel作为中间临时存储,保存所有source的组件信息,sink从channel中读取数据,读取成功之后会删除channel中的信息。

NDC

Logstash

Logstash是开源的服务器端数据处理管道,能够同时从多个来源采集数据、转换数据,然后将数据发送到您最喜欢的 “存储库” 中。一般常用的存储库是Elasticsearch。Logstash 支持各种输入选择,可以在同一时间从众多常用的数据来源捕捉事件,能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。

Sqoop

Sqoop,用来将关系型数据库和Hadoop中的数据进行相互转移的工具,可以将一个关系型数据库(例如Mysql、Oracle)中的数据导入到Hadoop(例如HDFS、Hive、Hbase)中,也可以将Hadoop(例如HDFS、Hive、Hbase)中的数据导入到关系型数据库(例如Mysql、Oracle)中。Sqoop 启用了一个 MapReduce 作业(极其容错的分布式并行计算)来执行任务。Sqoop 的另一大优势是其传输大量结构化或半结构化数据的过程是完全自动化的。

流式计算

流式计算是行业研究的一个热点,流式计算对多个高吞吐量的数据源进行实时的清洗、聚合和分析,可以对存在于社交网站、新闻等的数据信息流进行快速的处理并反馈,目前大数据流分析工具有很多,比如开源的strom,spark streaming等。

Strom集群结构是有一个主节点(nimbus)和多个工作节点(supervisor)组成的主从结构,主节点通过配置静态指定或者在运行时动态选举,nimbus与supervisor都是Storm提供的后台守护进程,之间的通信是结合Zookeeper的状态变更通知和监控通知来处理。nimbus进程的主要职责是管理、协调和监控集群上运行的topology(包括topology的发布、任务指派、事件处理时重新指派任务等)。supervisor进程等待nimbus分配任务后生成并监控worker(jvm进程)执行任务。supervisor与worker运行在不同的jvm上,如果由supervisor启动的某个worker因为错误异常退出(或被kill掉),supervisor会尝试重新生成新的worker进程。

Zookeeper

Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,提供数据同步服务。它的作用主要有配置管理、名字服务、分布式锁和集群管理。配置管理指的是在一个地方修改了配置,那么对这个地方的配置感兴趣的所有的都可以获得变更,省去了手动拷贝配置的繁琐,还很好的保证了数据的可靠和一致性,同时它可以通过名字来获取资源或者服务的地址等信息,可以监控集群中机器的变化,实现了类似于心跳机制的功能。

数据存储

Hadoop作为一个开源的框架,专为离线和大规模数据分析而设计,HDFS作为其核心的存储引擎,已被广泛用于数据存储。

HBase

HBase,是一个分布式的、面向列的开源数据库,可以认为是hdfs的封装,本质是数据存储、NoSQL数据库。HBase是一种Key/Value系统,部署在hdfs上,克服了hdfs在随机读写这个方面的缺点,与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

Phoenix

Phoenix,相当于一个Java中间件,帮助开发工程师能够像使用JDBC访问关系型数据库一样访问NoSQL数据库HBase。

Yarn

Yarn是一种Hadoop资源管理器,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。Yarn由下面的几大组件构成:一个全局的资源管理器ResourceManager、ResourceManager的每个节点代理NodeManager、表示每个应用的Application以及每一个ApplicationMaster拥有多个Container在NodeManager上运行。

Mesos

Mesos是一款开源的集群管理软件,支持Hadoop、ElasticSearch、Spark、Storm 和Kafka等应用架构。

Redis

Redis是一种速度非常快的非关系数据库,可以存储键与5种不同类型的值之间的映射,可以将存储在内存的键值对数据持久化到硬盘中,使用复制特性来扩展性能,还可以使用客户端分片来扩展写性能。

Atlas

Atlas是一个位于应用程序与MySQL之间的中间件。在后端DB看来,Atlas相当于连接它的客户端,在前端应用看来,Atlas相当于一个DB。Atlas作为服务端与应用程序通讯,它实现了MySQL的客户端和服务端协议,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担,它还维护了连接池。Atlas启动后会创建多个线程,其中一个为主线程,其余为工作线程。主线程负责监听所有的客户端连接请求,工作线程只监听主线程的命令请求。

Kudu

Kudu是围绕Hadoop生态圈建立的存储引擎,Kudu拥有和Hadoop生态圈共同的设计理念,它运行在普通的服务器上、可分布式规模化部署、并且满足工业界的高可用要求。其设计理念为fast analytics on fast data。作为一个开源的存储引擎,可以同时提供低延迟的随机读写和高效的数据分析能力。Kudu不但提供了行级的插入、更新、删除API,同时也提供了接近Parquet性能的批量扫描 *** 作。使用同一份存储,既可以进行随机读写,也可以满足数据分析的要求。Kudu的应用场景很广泛,比如可以进行实时的数据分析,用于数据可能会存在变化的时序数据应用等。

在数据存储过程中,涉及到的数据表都是成千上百列,包含各种复杂的Query,推荐使用列式存储方法,比如parquent,ORC等对数据进行压缩。Parquet 可以支持灵活的压缩选项,显著减少磁盘上的存储。

数据清洗

MapReduce作为Hadoop的查询引擎,用于大规模数据集的并行计算,”Map(映射)”和”Reduce(归约)”,是它的主要思想。它极大的方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统中。

随着业务数据量的增多,需要进行训练和清洗的数据会变得越来越复杂,这个时候就需要任务调度系统,比如oozie或者azkaban,对关键任务进行调度和监控。

Oozie

Oozie是用于Hadoop平台的一种工作流调度引擎,提供了RESTful API接口来接受用户的提交请求(提交工作流作业),当提交了workflow后,由工作流引擎负责workflow的执行以及状态的转换。用户在HDFS上部署好作业(MR作业),然后向Oozie提交Workflow,Oozie以异步方式将作业(MR作业)提交给Hadoop。这也是为什么当调用Oozie 的RESTful接口提交作业之后能立即返回一个JobId的原因,用户程序不必等待作业执行完成(因为有些大作业可能会执行很久(几个小时甚至几天))。Oozie在后台以异步方式,再将workflow对应的Action提交给hadoop执行。

Azkaban

Azkaban也是一种工作流的控制引擎,可以用来解决有多个hadoop或者spark等离线计算任务之间的依赖关系问题。azkaban主要是由三部分构成:Relational Database,Azkaban Web Server和Azkaban Executor Server。azkaban将大多数的状态信息都保存在MySQL中,Azkaban Web Server提供了Web UI,是azkaban主要的管理者,包括project的管理、认证、调度以及对工作流执行过程中的监控等;Azkaban Executor Server用来调度工作流和任务,记录工作流或者任务的日志。

流计算任务的处理平台Sloth,是网易首个自研流计算平台,旨在解决公司内各产品日益增长的流计算需求。作为一个计算服务平台,其特点是易用、实时、可靠,为用户节省技术方面(开发、运维)的投入,帮助用户专注于解决产品本身的流计算需求

数据查询分析

Hive

Hive的核心工作就是把SQL语句翻译成MR程序,可以将结构化的数据映射为一张数据库表,并提供 HQL(Hive SQL)查询功能。Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce。可以将Hive理解为一个客户端工具,将SQL *** 作转换为相应的MapReduce jobs,然后在hadoop上面运行。Hive支持标准的SQL语法,免去了用户编写MapReduce程序的过程,它的出现可以让那些精通SQL技能、但是不熟悉MapReduce 、编程能力较弱与不擅长Java语言的用户能够在HDFS大规模数据集上很方便地利用SQL 语言查询、汇总、分析数据。

Hive是为大数据批量处理而生的,Hive的出现解决了传统的关系型数据库(MySql、Oracle)在大数据处理上的瓶颈 。Hive 将执行计划分成map->shuffle->reduce->map->shuffle->reduce…的模型。如果一个Query会被编译成多轮MapReduce,则会有更多的写中间结果。由于MapReduce执行框架本身的特点,过多的中间过程会增加整个Query的执行时间。在Hive的运行过程中,用户只需要创建表,导入数据,编写SQL分析语句即可。剩下的过程由Hive框架自动的完成。

Impala

Impala是对Hive的一个补充,可以实现高效的SQL查询。使用Impala来实现SQL on Hadoop,用来进行大数据实时查询分析。通过熟悉的传统关系型数据库的SQL风格来 *** 作大数据,同时数据也是可以存储到HDFS和HBase中的。Impala没有再使用缓慢的Hive+MapReduce批处理,而是通过使用与商用并行关系数据库中类似的分布式查询引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分组成),可以直接从HDFS或HBase中用SELECT、JOIN和统计函数查询数据,从而大大降低了延迟。Impala将整个查询分成一执行计划树,而不是一连串的MapReduce任务,相比Hive没了MapReduce启动时间。

Hive 适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询,Impala给数据人员提供了快速实验,验证想法的大数据分析工具,可以先使用Hive进行数据转换处理,之后使用Impala在Hive处理好后的数据集上进行快速的数据分析。总的来说:Impala把执行计划表现为一棵完整的执行计划树,可以更自然地分发执行计划到各个Impalad执行查询,而不用像Hive那样把它组合成管道型的map->reduce模式,以此保证Impala有更好的并发性和避免不必要的中间sort与shuffle。但是Impala不支持UDF,能处理的问题有一定的限制。

Spark

Spark拥有Hadoop MapReduce所具有的特点,它将Job中间输出结果保存在内存中,从而不需要读取HDFS。Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像 *** 作本地集合对象一样轻松地 *** 作分布式数据集。

Nutch

Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具,包括全文搜索和Web爬虫。

Solr

Solr用Java编写、运行在Servlet容器(如Apache Tomcat或Jetty)的一个独立的企业级搜索应用的全文搜索服务器。它对外提供类似于Web-service的API接口,用户可以通过>

1) 优化map,reduce任务运行的数量

症状:

每个 map 或 reduce 任务都在30-40秒内结束。一个大job没有使用上所有集群中的可用槽位。在大部分mapper和reducer都订好运行计划后,1到2个仍在pending状态直到最后才单独运行。 诊断:优化map和reduce的任务是非常重要但是经常被忽视,这里介绍几个我常用的相关设置方法:

如果每个任务只执行30-40秒就结束,请减少总的task数量。Task的基本设置和计划本身会消耗几秒钟的时间。所以如果Task执行非常快的话,时间就都浪费在准备Task上了。也可以开启JVM的reuse功能来减少建立task的基本开销。如果job要处理超过1TB的数据,可以考虑增加输入数据的块Block的大小从256MB到512MB。这样也会减小需要运行的Task数。可以通过如下命令改变数据块大小:hadoop distcp -Ddfsblocksize=$[25610241024] /path/to/inputdata /path/to/inputdata-with-largeblocks执行完该命令就可以清除原来的文件了。在保证每个任务执行都超过30-40秒后,可以增加mapper task为mapper slot(可以执行mapper 机器)的整数倍,如果你有100个可以运行Map任务的节点,尽量不要运行101个Map Task,第101个Map task 会在第一批100个Map任务执行完之后才执行,这点主要针对的是小型集群和小型任务。

不要计划执行太多的Reduce任务,对于大多数任务,我们建议Reduce任务数要等于或小于集群中可运行Reduce任务的节点数。

性能测试:

我使用一个参数-Dmapredmaxsplitsize=$[1610241024] 来展示设置了过多任务的wordcount程序。这样会产生2640个而不是默认的360个任务来执行该程序。当以这种配置运行时单个的任务平均只用9秒,在JobTracker的监控页面上可以看到正在map任务数在0到24之间波动,整个Job花了17分52秒,是原来配置的2倍。

2) 在集群上使用 LZO 压缩插件

症状:

应用于中间数据LZO压缩始终是个好方法。

MapReduce 任务输出文件尺寸很大。

在任务运行时Slave节点上top和iostat中显示高iowait。

诊断:

几乎任何产生大量map输出的MapReduce任务都能从LZO压缩算法受益。虽然LZO增加了一些CPU的负载,但是shuffle阶段减少的大量磁盘IO *** 作会把时间完全节省回来。

当job要处理大量数据时,LZO压缩也可以增加输出方面的的性能。在默认的3份复制配置下,每1GB压缩省下的空间都相当于节省了3GB的IO写 *** 作。

要开启LZO压缩,请见另一篇文章,

记得要把mapredcompressmapoutput设为true。

性能对比:

禁用LZO只在测试中轻微延长了运行时间。但是文件写出量计数FILE_BYTES>

  Yarn 是 Hadoop 的资源管理系统,用于取代 MapReduce1 的资源调度,改善 MapReduce 的实现,并且有足够的通用性,可以支持其他的分布式计算模式

  一般情况下,应用不直接使用 Yarn 的API,而是通过一些分布式计算框架(MapReduce、Spark等)来间接实现资源调度管理,使用这些框架的 Yarn 应用运行在集群计算层(Yarn)和集群存储层(HDFS、HBase)上。

  Yarn 主要由两部分组成:resource manager、node manager。

  资源管理器(resource manager)管理集群上资源的使用,节点管理器(node manager)运行在集群中所有节点上且能够启动和监控容器(container)。容器用于执行特定应用程序的进程,每个容器都有资源限制(内存、CPU)。

  在 Yarn 上运行一个应用的步骤如图所示:

  在 MapReduce1中,有两类守护进程控制作业执行过程: jobtracker、tasktracker

  jobtracker 通过调度 tasktracker 上运行的任务来协调所有运行在系统上的作业,记录每项作业任务的整体进度情况,若有任务失败,则在另一个 tasktracker 节点上重新调度该任务。

  tasktracker 在运行任务的同时将运行进度报告发送给 job tracker。

  MapReduce1 的 jobtracker 既要负责资源管理(作业的调度分配),将任务分配给不同的 tasktracker;又要负责任务进度的监控。如果集群非常繁忙,每时每刻都有大量的作业,每个作业下又有很多任务,jobtracker 需要面面俱到了解每个任务的执行情况,负担很重。

  在 MapReduce2 对 Yarn 的应用中,一般是会先让 RM 启动容器运行一个 Application Master 的进程,然后该进程负责创建和监控所有的 map task 和 reduce task,了解每个 task 的执行进度,每个 task 都会运行在一个单独的 container 中,这些 container 都是 Application Master 统一调度负责向 RM 申请的,这样就把资源分配和作业运行调度监控解耦,让 Yarn 专注于资源调度。

  FIFO 调度器将应用放置在一个队列中,然后按照提交的顺序(先入先出)运行应用。

优点简单易懂,不需要任何配置。

缺点不适合共享集群。大的应用会占用集群的所有资源,每个应用必须等待直到轮到自己运行,作业平均等待时间较长。

  为了避免小作业被大作业阻塞,容量调度器会创建几个队列,其中会有专门队列给小作业执行,保证一提交就可以启动。

  每个队列都被分配了一定比例容量的资源,保证大作业不会占用整个集群的所有资源。一般每个队列对应一个组织,这样就允许了多个组织共享一个 Hadoop 集群,每个组织可以分配到集群资源的一部分。队列可以进一步按层次划分,这样每个组织内的不同用户能够共享该组织队列所分配的资源。

  在一个队列内,使用 FIFO 调度策略对应用进行调度,但是一个job可能使用不了整个队列的资源。然而如果这个队列中运行多个job,如果这个队列的资源够用,那么就分配给这些job。

  官方文档: >

一、YARN:Hadoop集群中的同一资源调度系统。Hadoop20后引入,主要功能有:负责集群中资源的统一调度,响应客户端的请求。

优缺点

二、YARN核心组件及架构

1 ResourceManger(RM):全局资源管理器,集群中只有一个活跃的RM,具体功能包括:处理客户端的请求;启动监控ApplicationMaster;监控NodeManger;资源的分配和调度。

2ApplicationMaster(AM):每个应用程序(job任务)对应一个AM,负责计算job的资源情况,并向RM申请和任务的调度。具体功能包括:(1)计算job资源使用情况,与RM协商申请job的资源情况;(2)与NodeManger通信启动/停止Container,来执行/终止任务的具体执行;(3)监控任务的运行状态及失败处理。

3NodeManager(NM):节点的资源管理器,每个节点启动一个,一般与DataNode一 一对应。具体功能包括:(1)监控和管理当前节点的资源使用情况;(2)通过心跳向RM汇报自身的资源使用情况;(3)处理RM的请求,分配执行AM的Container;(4):处理AM的请求,启动和停止执行任务的Container。

4Container:资源的抽象,包括一系列描述信息,任务的运行资源(节点、CPU、内存等),任务运行环境,启动命令等。

架构图见 yarn-arch

三、YARN运行流程

2 RM根据内部调度器,选取一个资源空闲的NM,启动一个Container来运行AM。

3AM计算应用程序所需资源,向RM进行资源申请,申请字段包括:

message ResourceRequestProto {  

optional PriorityProtopriority = 1; // 资源优先级  

optional stringresource_name = 2; // 期望资源所在的host  

optional ResourceProtocapability = 3; // 资源量(mem、cpu)  

optional int32num_containers = 4; // 满足条件container个数  

optional boolrelax_locality = 5 ; //default = true;   

}  

AM会根据文件的存储地址,分析运行需要的资源等,向RM申请一个期望的资源列表,RM同时考虑各个节点资源使用情况,最终分配一个资源列表。

4 RM返回资源列表,以cotainer结构

message ContainerProto {  

optional ContainerIdProtoid = 1; //container id  

optional NodeIdProtonodeId = 2; //container(资源)所在节点  

optional stringnode_>

Hive是建立在Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive定义了简单的类SQL查询语言,称为HQL,它允许熟悉SQL的用户查询数据。同时,这个语言也允许熟悉MapReduce开发者的开发自定义的mapper和reducer来处理内建的mapper和reducer无法完成的复杂的分析工作。Hive采用类SQL的查询方式,将SQL查询转换为MapReduce的job在Hadoop集群上执行

Hadoop到底是个啥?

答:Hadoop是基于廉价设备利用集群的威力对海量数据进行安全存储和高效计算的分布式存储和分析框架,Hadoop本身是一个庞大的项目家族,其核心 家族或者底层是HDFS和MapReduce,HDFS和MapReduce分别用来实现对海量数据的存储和分析,其它的项目,例如Hive、HBase 等都是基于HDFS和MapReduce,是为了解决特定类型的大数据处理问题而提出的子项目,使用Hive、HBase等子项目可以在更高的抽象的基础上更简单的编写分布式大数据处理程序。Hadoop的其它子项目还包括Common, Avro, Pig, ZooKeeper, Sqoop, Oozie 等,随着时间的推移一些新的子项目会被加入进来,一些关注度不高的项目会被移除Hadoop家族,所以Hadoop是一个充满活力的系统。

Apache Hadoop: 是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架构。

Apache Hive: 是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

ApachePig: 是一个基于Hadoop的大规模数据分析工具,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。

ApacheHBase: 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

Apache Sqoop: 是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

Apache Zookeeper: 是一个为分布式应用所设计的分布的、开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布式服务 ApacheMahout:是基于Hadoop的机器学习和数据挖掘的一个分布式框架。Mahout用MapReduce实现了部分数据挖掘算法,解决了并行挖掘的问题。

ApacheCassandra:是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存简单格式数据,集Google BigTable的数据模型与AmazonDynamo的完全分布式的架构于一身 Apache Avro: 是一个数据序列化系统,设计用于支持数据密集型,大批量数据交换的应用。Avro是新的数据序列化格式与传输工具,将逐步取代Hadoop原有的IPC机制 ApacheAmbari: 是一种基于Web的工具,支持Hadoop集群的供应、管理和监控。

ApacheChukwa: 是一个开源的用于监控大型分布式系统的数据收集系统,它可以将各种各样类型的数据收集成适合 Hadoop 处理的文件保存在 HDFS 中供Hadoop 进行各种 MapReduce *** 作。

ApacheHama: 是一个基于HDFS的BSP(Bulk Synchronous Parallel)并行计算框架, Hama可用于包括图、矩阵和网络算法在内的大规模、大数据计算。

ApacheFlume: 是一个分布的、可靠的、高可用的海量日志聚合的系统,可用于日志数据收集,日志数据处理,日志数据传输。

ApacheGiraph: 是一个可伸缩的分布式迭代图处理系统, 基于Hadoop平台,灵感来自 BSP (bulk synchronous parallel) 和Google 的 Pregel。

ApacheOozie: 是一个工作流引擎服务器, 用于管理和协调运行在Hadoop平台上(HDFS、Pig和MapReduce)的任务。

ApacheCrunch: 是基于Google的FlumeJava库编写的Java库,用于创建MapReduce程序。与Hive,Pig类似,Crunch提供了用于实现如连接数据、执行聚合和排序记录等常见任务的模式库 ApacheWhirr: 是一套运行于云服务的类库(包括Hadoop),可提供高度的互补性。Whirr学支持Amazon EC2和Rackspace的服务。

ApacheBigtop: 是一个对Hadoop及其周边生态进行打包,分发和测试的工具。

ApacheHCatalog: 是基于Hadoop的数据表和存储管理,实现中央的元数据和模式管理,跨越Hadoop和RDBMS,利用Pig和Hive提供关系视图。

ClouderaHue: 是一个基于WEB的监控和管理系统,实现对HDFS,MapReduce/YARN, HBase, Hive, Pig的web化 *** 作和管理。

日志聚合的界面jobhistory,可以看到每个job的分配情况,maptask的分配到哪个节点,及完成情况需要在hadoop的sbin下执行如下命令

mr-jobhistory-daemonsh start historyserver

Hadoop的web页面

yarn

spark的web页面

端口4040

spark-job监控端口

以上就是关于大数据Hadoop之ZooKeeper认识全部的内容,包括:大数据Hadoop之ZooKeeper认识、大数据三大核心技术:拿数据、算数据、卖数据!、如何查看hadoop mapreduce 性能等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9296103.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存