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