Alluxio代码结构

Alluxio是一款基于云原生开源的数据编排技术,为数据计算与数据存储构建了桥梁,支持将数据从原始存储层移动到加速计算的虚拟分布式存储系统。Alluxio可为数据湖计算提供统一的数据湖存储访问入口,支持跨不同类型的底层存储并抽象出统一的数据访问命名空间,提供数据本地性、数据可访问性、数据伸缩性。

为什么做存算分离了,相互影响,独立扩缩容,数据本地性,带宽的高速增长,舍弃本地性,web架构,数据库+web部署在一个节点

Alluxio启动逻辑

Process 定义组件进程的生命周期管理操作

Server 定义服务线程的生命周期操作

Master Server:定义Master组件中封装的各个线程Server服务,包括Block元数据管理,文件系统管理等

五个核心组件

1、AlluxioMasterProcess AlluxioMaster:Main函数入口

Server:
    FileSystemMaster  DefaultFileSystemMaster  加锁,文件元数据POSIX操作,基于InodeTree维护文件系统结构,并将InodeTree持久化到日志文件(journal),一堆定时任务检查系统的 
        UfsManager
        MountTable(UfsManager,State)
            State(Map<String, MountInfo> mMountTable)
        InodeTree(BlockMaster,MountTable)  维护一颗内存目录树
        


    BlockMaster  DefaultBlockMaster       Block和Worker映射元数据的Server服务,block metadata(block块元数据),worker metadata(worker节点元数据):
    MetaMaster  DefaultMetaMaster
    MetricsMaster   DefaultMetricsMaster

JournalSystem  维护Master元数据持久化信息,便于服务宕机后,从最新的Journal File恢复,详见Journal Management;
PrimarySelector   选主 进行AlluxioMaster选举,Master选举支持两种方式:ZK、Raft(RaftJournalSystem)

2、AlluxioWorkerProcess AlluxioWorker:Main函数入口

    Server:
        BlockWorker DefaultBlockWorker
            周期性的BlockMasterSync,将当前Worker节点的Block信息周期定时上报同步给Master;
            维护当前Worker所有Block信息与底层存储操作的逻辑关系;

3、AlluxioProxyProcess AlluxioProxy:Main函数入口

    Server:
        ProxyWebServer  启动Proxy Web服务

4、AlluxioJobMasterProcess AlluxioJobMaster:Main函数入口

    Server:
        JournalSystem
        JobMaster           Alluxio内置轻量级的作业调度框架,JobMaster处理AlluxioJobMaster中所有job管理相关操作,用于检测心跳丢失的Worker节点,LostWorkerDetectionHeartbeatExecutor
        JobMasterWebServer
        GrpcServer 

5、AlluxioJobWorkerProcess AlluxioJobWorker:Main函数入口

    Server:
        JobWorkerWebServer
        JobWorker  负责管理Worker节点中执行任务相关的所有操作,Job Worker Command Handling
        GrpcServer

6、RPC框架(gRpc框架)

alluxio.master.hostname   alluxio.master.bind.host  配置master节点的RPC地址
proto文件
GrpcServer 提供Server服务, 需要接口类封装给*ServiceHandler(BindableService),通过将服务包装成GrpcService,注册到GrpcServer中
GrpcService  提供Service服务 

核心接口

Journaled 持久化维护的通用方法

UnderFileSystem Alluxio管理和适配数据在底层各个存储系统执行操作,实现UnderFileSystem接口的底层存储可以作为Alluxio的合法UFS,持有ufs的filesystem。
生成UnderFileSystem依赖的alluxio.underfs.UnderFileSystem.Factory UnderFileSystemFactory

UfsManager 维护挂载点信息,从而通过挂在点获取ufsClient, UfsClient持有UnderFileSystem,
AbstractUfsManager
MasterUfsManager
JobUfsManager
WorkerUfsManager

BlockWriter BlockReader

DefaultFileSystemMaster AlluxioMaster

BlockWorker DefaultBlockWorker AlluxioWorker

BlockStore TieredBlockStore
BlockMetadataManager 维护分层存储状态、block读写锁管理等元数据信息
BlockLockManager(ReentrantReadWriteLock ) 获取对应的读写锁
Allocator

读写流程

客户端:

alluxio.client.file.FileSystem
    BaseFileSystem
    DelegatingFileSystem

输入流:InputStream  AlluxioFileInStream(AlluxioBlockStore,BlockInStream) 
输出流:FileOutStream AlluxioFileOutStream(AlluxioBlockStore,BlockOutStream)  

读写

Worker端:
    BlockWorkerImpl 封装了AlluxioWorkerProcess,启动GrpcDataServer服务,里面封装各种Server服务
    RPC机制基于StreamObserver创建CallStreamObserver,封装为BlockReadHandler onReady()

Client端
    updateStream 时候创建 DataReader  alluxio.client.block.stream.DataReader.Factory生成不同的DataReader, 从而在BlockInStream调用不同的Reader
    getNextBlock 时候创建 DataWriter

Client

封装的RPC接口

FileSystemMasterClient
BlockMasterClient
TableMasterClient
MetaMasterClient
MetaMasterConfigClient
JobMasterClient

FileSystemContext

轻量级调度

Alluxio内部基于AlluxioJobMaster和AlluxioJobWoker实现轻量级内置的Alluxio操作调度,Master负责作业的调度管理,而Worker真正执行作业操作。

JobMaster

JobMaster#run()提交作业,调用planTracker#run(),创建PlanCoordinator,同时添加到CommandManager中,
JobMaster处理JobWorker的Rpc请求的心跳,将Command下发给Worker

PlanTracker
JobConfig={PlanConfig,WorkflowConfig}
CommandManager
PlanCoordinator
JobMasterWorkerServiceHandler
PlanDefinition  #selectExecutors

JobWorker

JObWorker#start()时候,启动JOB_WORKER_COMMAND_HANDLING的Heartbeat线程,调用CommandHandlingExecutor的heartbeat,
通过心跳下发的Command封装给CommandHandler,去处理各个任务

HeartbeatThread
CommandHandlingExecutor
JobCommand
CommandHandler
TaskExecutorManager
TaskExecutor
PlanDefinition  #runTask

AlluxioClient的代码结构

org.apache.hadoop.fs.AbstractFileSystem
alluxio.hadoop.viewfs.ViewFs

FakedFileSystem
org.apache.hadoop.fs.FileSystem
alluxio.hadoop.viewfs.ViewFileSystem
alluxio.hadoop.fakedufs.FakedUfsFileSystem

AlluxioClient
org.apache.hadoop.fs.FileSystem
alluxio.hadoop.AbstractFileSystem
alluxio.hadoop.FileSystem mFileSystem=alluxio.client.file.FileSystem.Factory

alluxio.client.file.FileSystem  
    MetadataCachingBaseFileSystem
    BaseFileSystem

参考连接:https://mp.weixin.qq.com/s?__biz=Mzg2NDY1MTYyNQ==&mid=2247486656&idx=1&sn=a946cdb903bf80b996b0e7aecac88ac6&chksm=ce675cc6f910d5d0ff578aecfeeb4c8e87e6629ef2b50a030de5907f54f10112ac1b7b6094cd&scene=178&cur_album_id=2110543257678954500#rd

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值