一、ZooKeeper是什么及使用场景

 ZooKeeper定义:ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。它提供了数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。本质上,ZooKeeper是一个树形结构的键值存储系统,用于存储少量的配置信息、状态信息等,其设计目标是保证高可用和强一致性。

-使用场景:

1. Master选举:在分布式系统中,多个节点可能都有成为Master节点的需求,ZooKeeper可以通过创建临时顺序节点等机制,保证同一时刻只有一个节点成为Master,如HBase中Master节点的选举。

2. 分布式锁:多个进程或线程在分布式环境下需要对共享资源进行互斥访问时,可利用ZooKeeper实现分布式锁。例如,通过创建临时节点来获取锁,释放锁时删除节点。

3. 配置管理:在分布式系统中,各节点的配置信息需要统一管理和动态更新。ZooKeeper可以存储配置信息,当配置发生变化时,通知相关节点进行更新,如Hadoop集群的一些配置管理。

4. 集群管理:管理集群中节点的加入和退出。例如,当有新节点加入ZooKeeper集群时,其他节点能够感知到;当节点故障退出时,也能及时被发现,像HBase集群中RegionServer节点的管理。

二、启动Hadoop伪分布式集群服务及进程作用(应为jps命令)

 启动Hadoop伪分布式集群服务:在完成Hadoop相关配置(如上述Hadoop安装部署中的配置步骤)后,在单节点上执行 start - all.sh 脚本(或者分别启动NameNode、DataNode、ResourceManager、NodeManager等进程 )。

 jps命令输出进程及作用:

1. NameNode:HDFS的主节点,负责管理文件系统的命名空间,维护文件系统树以及树中所有的文件和目录的元数据,如文件的权限、副本数、数据块映射关系等。

2. DataNode:HDFS的从节点,负责存储实际的数据块,执行NameNode的读写命令,定期向NameNode汇报自己存储的数据块信息。

3. ResourceManager:YARN的主节点,负责整个集群的资源管理和任务调度,管理NodeManager和ApplicationMaster,分配集群资源给各个应用程序。

4. NodeManager:YARN的从节点,管理单个节点上的资源,处理ResourceManager的命令,管理容器(Container),监控容器的资源使用情况并汇报给ResourceManager 。

5. SecondaryNameNode:辅助NameNode工作,定期合并NameNode的编辑日志(edits)和镜像文件(fsimage),减轻NameNode的负担,但其不能替代NameNode。

三、Flume三个组件的组成及作用

 Source(源):

组成:Source是Flume中数据的接收端,它可以从各种数据源接收数据,如文件系统、网络端口、消息队列等。常见的Source类型有Avro Source(用于接收Avro格式数据)、Thrift Source(接收Thrift协议数据)、Exec Source(执行系统命令获取数据)、Spooling Directory Source(监控指定目录新文件并读取数据)等。

作用:负责将外部数据源的数据收集起来,并封装成Flume内部的Event(事件)格式,发送给Channel(通道)。

Channel(通道):

组成:Channel是一个缓冲区,用于临时存储从Source接收的Event。常见的Channel类型有Memory Channel(基于内存的通道,数据存储在内存中,读写速度快,但存在数据丢失风险)、File Channel(基于文件的通道,数据存储在磁盘文件中,可靠性高,但读写性能相对内存通道低)、Kafka Channel(与Kafka集成的通道,利用Kafka的消息队列特性存储数据)等。

 作用:在Source和Sink之间起到解耦的作用,保证数据在传输过程中的可靠性。即使Sink处理数据出现延迟或故障,Source依然可以将数据发送到Channel中暂存。

Sink(接收器):

 组成:Sink是Flume中数据的输出端,它将Channel中的数据发送到目标存储系统或下一个Flume节点。常见的Sink类型有HDFS Sink(将数据写入HDFS)、Hive Sink(将数据写入Hive表)、Logger Sink(将数据打印到日志)、Avro Sink(将数据以Avro格式发送到其他Flume节点或系统)等。

作用:从Channel中取出Event,并将其发送到指定的目标位置,完成数据的最终落地或进一步传输。

四、YARN提供的常用调度器及其特点

 FIFO Scheduler(先进先出调度器):

 特点:按照应用程序提交的顺序依次进行调度。先提交的应用程序优先获得集群资源,只有当排在前面的应用程序运行完成或释放足够资源后,后面的应用程序才能获得资源开始运行。这种调度方式简单易懂,但在多用户、多应用场景下,如果有大作业长时间占用资源,会导致小作业等待时间过长,造成资源利用率低和作业响应时间长的问题。

Capacity Scheduler(容量调度器):

特点:支持多队列,每个队列可以设置一定的资源容量(如内存、CPU等资源的占比)。不同队列可以为不同的用户、部门或应用类型服务。队列内部按照FIFO方式调度。它允许一个队列在有剩余资源时借用其他队列的空闲资源,提高资源利用率。同时,通过设置队列的资源上限等参数,保证每个队列的资源使用不会超出预期,实现资源的合理分配和隔离。

 Fair Scheduler(公平调度器):

特点:也支持多队列,目标是在集群中所有运行的应用程序之间公平地共享集群资源。它会动态地调整资源分配,使得每个应用程序随着时间的推移都能获得大致相等的资源量。当有新的应用程序提交时,会为其分配资源以保证公平性。与Capacity Scheduler不同的是,它更注重应用程序之间的公平性,而不是预先设定的队列容量。

五、ZooKeeper支持的节点类型及其特点

持久节点(Persistent)

特点:一旦创建,就会一直存在于ZooKeeper的命名空间中,直到显式地调用删除操作将其删除。即使ZooKeeper客户端与服务器断开连接,持久节点也不会消失。常用于存储一些固定的配置信息等,如集群的节点列表等。

 持久顺序节点(Persistent - Sequential)

特点:也是持久存在的节点,与持久节点的区别在于,在创建节点时,ZooKeeper会自动为其分配一个单调递增的顺序号作为节点名的一部分。这种节点常用于分布式锁、分布式ID生成等场景,利用顺序号来确定节点的顺序和操作的先后顺序。

临时节点(Ephemeral)

特点:临时节点的生命周期与创建它的客户端会话绑定。当客户端会话结束(如客户端主动关闭连接或由于网络故障等原因会话超时)时,该临时节点会被ZooKeeper自动删除。常用于实现分布式服务发现、Master选举等场景,如在Master选举中,多个候选者创建临时节点,第一个创建成功的成为Master,当Master所在客户端会话结束,节点删除,其他候选者可以重新进行选举。

临时顺序节点(Ephemeral - Sequential)

特点:结合了临时节点和顺序节点的特性。节点的生命周期与客户端会话绑定,同时在创建时会被分配一个顺序号。常用于一些需要按顺序处理且对节点生命周期有要求的场景,如分布式队列,新加入的任务创建临时顺序节点,按照节点顺序进行处理,任务完成后节点随会话结束自动删除。

六、Hadoop集群、HBase集群的高可用性实现

Hadoop集群高可用性实现

 NameNode高可用(HA):Hadoop通过配置两个NameNode(一个Active NameNode和一个Standby NameNode)来实现高可用。Active NameNode负责处理客户端的读写请求,Standby NameNode作为热备份,实时同步Active NameNode的元数据(通过JournalNodes同步编辑日志)。当Active NameNode出现故障时,ZooKeeper Quorum(ZooKeeper仲裁集群)会感知到,并通过自动或手动的方式将Standby NameNode切换为Active NameNode,保证HDFS服务的连续性。

 DataNode高可用性:DataNode通过定期向NameNode汇报自己的状态和存储的数据块信息来维持与集群的联系。多个DataNode存储数据块的多个副本,当某个DataNode故障时,其他DataNode上的副本依然可以提供数据读写服务,同时NameNode会根据数据块的副本情况,在合适的DataNode上重新复制数据块,以保证数据的可靠性和副本数满足配置要求。

HBase集群高可用性实现

Master高可用性:HBase通过ZooKeeper实现Master节点的高可用。多个HBase Master节点启动时,会在ZooKeeper上竞争创建一个临时节点(如/hbase/master节点),第一个创建成功的成为Active Master,其他为Standby Master。当Active Master故障时,ZooKeeper上的临时节点消失,其他Standby Master通过竞争创建临时节点来重新选举出Active Master。Active Master负责管理RegionServer、分配Region等工作,Standby Master则处于待命状态,同步Active Master的一些状态信息。

RegionServer高可用性:RegionServer负责存储和处理数据。每个RegionServer会定期向Master汇报自己的状态。当RegionServer故障时,Master会感知到,并将其上的Region重新分配到其他正常的RegionServer上,保证数据的可访问性。同时,HBase的数据存储在HDFS上,利用HDFS的高可靠性保证数据不会丢失。

七、SecondaryNameNode的作用

合并编辑日志和镜像文件:NameNode在运行过程中,会将对文件系统的修改操作记录在编辑日志(edits文件)中,同时维护一个反映文件系统元数据的镜像文件(fsimage)。随着时间推移和操作增多,edits文件会不断增大。SecondaryNameNode定期(默认每小时,可配置)从NameNode获取edits和fsimage文件,将edits中的修改合并到fsimage中,生成一个新的、更新后的fsimage文件。然后将新的fsimage文件发回给NameNode,NameNode用其替换旧的fsimage文件,并清空编辑日志,从而减小编辑日志的大小,提高NameNode后续处理操作的效率,减轻NameNode的负担。

辅助NameNode恢复:虽然SecondaryNameNode不能完全替代NameNode,但在NameNode出现故障且没有合适的备份时,SecondaryNameNode生成的较新的fsimage文件可以作为恢复数据的一个参考,帮助一定程度上恢复文件系统的元数据,但不能保证数据的完全一致性和最新状态。

 

 

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐