因为业务中主要使用Spark Thriftserver作为adhoc查询服务,而Spark原生是不支持SQLStdBasedAuthorization,所以需要调研这方面源码,本文将这方面的理解分享给大家,如有错误欢迎指出。
Spark的beeline在很多地方直接沿袭hive的beeline,当然Spark也有很多适应性的本地化改造,下面从数据流的角度来讲解。
(注:Spark源码主要依据spark 2.0.X,Hive的主要依据Hive1.2)
下图为Spark和Hive从beeline为入口,SQL的数据流图。
由图可见,以Beeline -> ThriftCLIService ->CLIService -> HiveSessionImpl -> SQLOperation -> Driver 为中线,左边是hive相关的实现,右边是spark相关实现。可见Spark的执行流程实现与Hive有很多相似。
在权限方面,hive thriftserver的表权限检验相关内容在Driver的doAuthorization方法实现,Spark没有走这条路径,所以没有表权限验证功能。
我们对spark的表权限验证实现参考文章Spark立体全方位授权和Spark实现SQLStdBasedAuthorization
(完)
关注公众号我们可以更方便沟通交流:水木之椿