Spark-源码学习-SparkSQL-架构设计-Catalog 体系-架构设计(2.x)
一、概述在 Spark SQL 系统中,Catalog 主要用于各种函数资源信息和元数据信息(数据库、数据表、数据视图、数据分区与函数等)的统一管理。Spark SQL 的 Catalog 体系涉及多个方面。
二、架构设计Spark SQL 中的 Catalog 体系实现以 SessionCatalog 为主体,通过 SparkSession (Spark 程序入口)提供给外部调用。一般一个 SparkSession 对应一个 SessionCatalog。本质上,SessionCatalog 起到了一个代理的作用,对底层的元数据信息、临时表信息、视图信息和函数信息进行了封装。
2.1. 构造参数SessionCatalog 的构造参数包括 6 部分,除传入 Spark SQL 和 Hadoop 配置信息的 CatalystConf 与 Configuration 外,还涉及以下4个方面的内容。
2.1.1. GlobalTempViewManager对应 DataFrame 中常用的 $createGlobalTempView()$ 方法,进行跨 Session 的视图管理 ...
Hadoop-组件-HDFS-源码学习-集群启动-NameNode 启动-startCommonServices
终于到 NameNode启动的最后一步啦~, 开始看 startCommonService()~~~~
一、概述FSNamesystem 是 NameNode 核心成员变量用来管理元数据,FSNamesystem的 startCommonServices() 将启动一些磁盘检查、安全模式等一些后台服务及线程等一些公共服务,同时 NameNode 的 RPC 服务就是在这里启动,包括 clientRpcServer 和 serviceRpcServer,NameNode要跟其它服务进行 rpc 通信远程调用其它服务的方法
二、源码分析开始源码调试~~~
2.1. namesystem.startCommonServices(conf, haContext)FSNamesystem 是 NameNode 核心成员变量用来管理元数据(实现对DataNode、Block的管理以及读写日志),创建NameNodeResourceChecker、激活BlockManager等
1void startCommonServices(Configuration conf, HAContext ha ...
Hadoop-组件-HDFS-源码学习-集群启动-DataNode 启动-注册
一、概述HDFS是一个主从架构,NameNode是主节点,DataNode从节点,DataNode启动时需要和NameNode进行注册
1.1. 相关类1.1.1. DataStorageDatanode 最重要的功能就是管理磁盘上存储的 HDFS 数据块。Datanode 将这个管理功能切分为两个部分:
管理与组织磁盘存储目录(由 dfs.data.dir 指定),如 current、 previous、 tmp 等,这个功能由 DataStorage 类实现
如图:Data Storage 的父类为 Storage,Storagelnfo 为根接口,描述存储的基本信息。子类 Storage 是抽象类,它为 Datanode、 Namenode 提供抽象的存储服务。
一个 Storage 可以定义多个存储目录,存储目录由 Storage 的内部类 StorageDirectory 描述,StorageDirectory 类定义了存储目录上的通用操作。如下配置所示,Datanode 定义了六个数据存储目录,HDFS 会使用一个 DataStorage 对象管理整个Datanode ...
Hadoop-组件-HDFS-源码学习-集群启动-DataNode 启动-initDataXceiver
initDataXceiver() 方法是 DataNode 启动的核心代码之一啦!内容很多~,开始看源码😯~~~
一、概述在 Java 的 Socket 实现中,首先需要创建一个 java.net.ServerSocket 对象,绑定到某个指定的端口,然后通过 ServerSocket.accept() 方法监听是否有连接请求到达这个端口。当有 Socket 连接请求时,ServerSocket.accept() 方法会返回一个 Socket 对象,之后服务器就可以通过这个 Socket 对象与客户端通信了。
Datanode 的流式接口就参考了 Socket 的实现,设计了 DataXceiverServer 以及 DataXceiver 两个对象,其中 DataXceiverServer 对象用于在 Datanode 上监听流式接口的请求,每当有 Client 发起流式接口请求时,DataXceiverServer 就会监听并接收这个请求,然后创建一个 DataXceiver 对象用于响应这个请求并执行对应的操作。
在 DataNode 的初始化代码中,会创建一个 Da ...
Hadoop-组件-HDFS-源码学习-集群启动-DataNode 启动-心跳
一、概述二、源码offerService()方法是 BPServiceActor 的主循环方法,它用于向 Namenode 发送心跳、块汇报、缓存汇报以及增量汇报。offerService()方法会一直循环运行,直到 Datanode 关闭或者客户端调用 ClientDatanodeProtocol.refreshNodes()重新加载 Namenode 配置。
offerService() 包括以下几个部分:
2.1. 定期发送心跳offerService()是通过调用 DatanodeProtocol.sendHeartbeat()方法向 Namenode 发送心跳的。
2.1.1. 心跳时间间隔offerService() 方法会以 dnConf.heartBeatInterval(默认配置是3 秒)间隔向 Namenode 发送心跳。
123if (startTime - lastHeartbeat >= dnConf.heartBeatInterval){ //...}
2.1.2. 发送心跳offerService() 通过调用 Data ...
Hadoop-组件-HDFS-源码学习-集群启动-DataNode 启动-数据块管理
正在总结中,等我😭~~~
Hadoop-组件-HDFS-源码学习-集群启动-DataNode 启动-refreshNamenodes
refreshNamenodes() 方法是 DataNode 启动的核心代码之一啦!内容很多~,开始看源码~~~过程中我们还会针对 DataNode 锁进行优化哦😯~~~
一、概述在 DataNode 的构造方法里,初始化了 BlockPoolManager 对象,通过其 blockPoolManager.refreshNamenodes(conf);从配置文件中获取该DataNode 相关的 namenode信息,然后向其发生注册和心跳信息。
1.1. 相关类1.1.1. BPServiceActor在 BlockPoolManager 的实现中,使用 BPServiceActor 类负责与一个 Namenode 通信。每 BPServiceActor 的实例都是一个独立运行的线程,这个线程主要实现了以下功能。
与 Namenode 进行第一次握手,获取命名空间的信息。
向 Namenode 注册当前 Datanode。
定期向 Namenode 发送心跳、增量块汇报、全量块汇报以及缓存块汇报。
执行 Namenode 传回的名字节点指令。
1.1.2. BPOffe ...
Hadoop-组件-HDFS-源码学习-集群启动-DataNode 启动设计
DataNode 是 Hadoop HDFS 中的从角色,负责具体的数据块存储。DataNode 的数量决定了 HDFS 集群的整体数据存储能力。通过和 NameNode 配合维护着数据块。
让我们看看 HDFS DataNode 启动流程~~~
一、概述DataNode 类封装了整个数据节点逻辑的实现。它通过 DataStorage 以及 FsDatasetImpl 管理着数据节点存储上的所有数据块,DataNode 类还会通过流式接口对客户端和其他数据节点提供读数据块、写数据块、复制数据块等功能。DataNode 类还会通过 BlockPoolManager 对象周期性地向 Namenode 发送心跳、块汇报、增量块汇报以及缓存汇报,同时执行 Namenode 发回的名字节点指令。DataNode 持有 DataBlockScanner 对象周期性地检查存储上的所有数据块,以及 DirectoryScanner 对象验证存储上数据块和内存中数据块的一致性。
二、源码DataNode 同 NameNode都一样,是一个 java进程,从 DataNode#main() 方法开始~ ...
Hadoop-组件-HDFS-理论笔记-HDFS 架构设计-DataNode 架构-服务层设计-RPC 通信服务
HDFS NameNode 启动流程中启动 Namenode上的 http 服务~~~
启动 NameNode上的 Http服务
一、概述startHttpServer() 主要作用启动 NameNode上的 Http服务,其时序图如图所示:
二、核心源码通过代码定位和时序图得知 Namenode 上的 Http服务启动的核心代码为:
2.1. 获取文本传输协议1HttpConfig.Policy policy = DFSUtil.getHttpPolicy(conf);
hdfs-default.xml 得到文本传输协议:HTTP_ONLY
hdfs-default.xml 得到文本传输协议:HTTP_ONLY
1HttpConfig.Policy policy = DFSUtil.getHttpPolicy(conf);
2.2. 页面访问 IP 地址1final String infoHost = bindAddress.getHostName();
得到 NameNode 的页面访问IP地址,默认是:0.0.0.0
2.3. initWeb ...
Hadoop-组件-HDFS-源码学习-集群启动-NameNode 启动-createRpcServer
NameNodeRpcServer 里面有两个主要的 RPC 服务:
引用本站文章
Hadoop-组件-HDFS-源码学习-RPC 通信服务系列
Joker
clientRpcServer: 主要管理的协议是 Hdfs的客户端去操作HDFS的方法
服务之间互相进行的方法的调用(注册、心跳等)
1rpcServer = createRpcServer(conf);
根据代码的逻辑划分,主要有三部分:
实例化各种通信协议和服务对象
所有的服务都是 BlockingService 接口的实现,client和namenode之间进行通信需要调用的接口,包括:创建目录、管理block、设置权限等一些操作
客户端同 NameNode 通信的协议服务: ClientNameNodeProtocolServerSideTranslatorPB
...