HiveServer2源码分析

HiveServer2源码分析

2023年6月25日发(作者:)

HiveServer2源码分析1.启动脚本 $HIVE_HOME/bin/hive --service hiveserver2 --> $HIVE_HOME/bin/ ext/ --> 可以看到⼊⼝类和 rver22.简要介绍HiveServer2 主要包括cliServer 和 thriftCLIService,通过zk注册,可以启动多个server。cliServer 主要负责逻辑, thriftCLIService提供thrift服务,thriftCLIService 会调⽤cliServer 封装的逻辑。

thriftCLIService 中通过HiveAuthFactory 来实现⽤户登录验证,ThriftBinaryCLIService 继承ThriftCLIService接⼝,在运⾏的时候,会初始化HiveAuthFactoryHiveAuthFactory ⽀持NOSASL, NONE ,LDAP,KERBEROS,CUSTOM,PAM 6中⽅式, CUSTOM 属于⾃定义,通过thrift中TSaslServerTransport 中实现。具体逻辑可以参考: PlainSaslHelper

CLIService 通过sessionManger 进⾏管理session, 实现了对外服务的接⼝, 主要接⼝ ExecuteStatement 执⾏语句。3.⼊⼝类(1) ServerOptionsProcessor 解析参数解析hiveconf 等参数(2)veLog4j() 加载log⽇志(3) 通过StartOptionExcutor 来startHiveServer2(4) 创建HiveServer2 初始化,启动运⾏rver2 初始化(1) 创建CLIService (继承ICLIService 接⼝, 并实现这些接⼝)(2) 将cliService 加⼊服务(3) 创建ThriftBinaryCLIService(集成 接⼝,并实现这些接⼝, 这些接⼝实现会调⽤CLIService 的接⼝实现)(4) 将thriftCLIService 加⼊服务(5) 调⽤⽗类初始化(此时会调⽤cliService 和 thriftCLIService的初始化(初始化ip和端⼝) )vice 初始化(1) 创建SessionManager, 此类主要⽤户session的管理(2) applyAuthorizationConfigPolicy (如果是开启授权,并且是V2版本授权,fs, add, delete, compile, and reset是禁⽌的, 此时通过 来进⾏定制)(3) 调⽤⽗类的初始化(此时会调⽤SessionManager 的初始化,SessionManager初始化⾥⾯会调⽤OperationManager的初始化rver2 运⾏(1) start 同init的,会遍历ServerList⾥⾯的Service 进⾏启动,⾸先CLIService的start --> -->(2) 调⽤ThriftBinaryCLI(3) run 函数中会替换 TTransportFactory 和 rver2 运⾏ExecuteStatement 分析 (1) eStatement --> eStatement -->eStatementInternal (2) 通过OperationManager 获取对应ExecuteStatementOperation 返回的可能是集成于它的⼦类SQLOperation 或者HiveCommandOperation 具体HiveCommandOperation 中的命令可以参考CommandProcessorFactory(SET RESET ADD and so on) (3) SQLOperation 运⾏:() 会调⽤⼦类中的runInternal() 调⽤prepare, 通过Driver 进⾏compileAndRespond 后⾯就是 eAndRespond(:1106) eInternal(:1112) e(:307) e(:467) orization(:565)(4) 后⾯主要讲下授权⽅⾯:(这⾥正对sql standard based auth)Driver(doAuthorization –>doAuthorizationV2) --> 通过session 获取 HiveAuthorizerImpl 的具体实现(rivileges) -->调⽤SQLStdHiveAuthorizationValidator 中的checkPrivileges, 会通过不同的HivePrivilegeObjectType 进⾏不同的授权GLOBAL, DATABASE, TABLE_OR_VIEW, PARTITION, COLUMN, LOCAL_URI, DFS_URI, COMMAND_PARAMS, FUNCTION 为类别权限验证:⾸先通过uiredPrivs 获取⼀个类型需要的权限(requiredPrivs)然后vilegesFromMetaStore 获取⽬前改⽤户的权限(availPrivs)看⽬前权限是否满⾜requiredPrivs具体哪些操作需要哪些权限可以在Operation2Privilege 中查看。

(5)HiveCommandOperation, ⽐如运⾏的是 add jar ""; ExecuteStatementOperation 中 newExecuteStatementOperation 通过processor =HiveCommand(tokens, eConf()); 获取 得到AddResourceProcessor(); 执⾏run 调⽤authorizeCommand 进⾏授权: -->authorizeCommandThrowEx – > horizerV2().checkPrivileges 调⽤hiveSession 中的 add_resources

发布者:admin,转转请注明出处:http://www.yc00.com/news/1687690917a32025.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信