项目地址
A Fully HiveServer2-like Multi-tenancy Spark Thrift Server Supporting Impersonation and Multi-SparkContext
https://github.com/yaooqinn/multi-tenancy-spark
项目特性
- 支持静态和动态两种多租户模式(Test only On YARN)
- 支持SparkContext多实例,以用户区分,单用户只能实例化一个sc
- 支持hive.server2.doAs.enabled
- 支持hive.server2.proxy.user做代理执行,动态和静态方式不同
- 支持Apache Ranger粒度到Column的控制
- 支持Operation级别的Log(动态Only)
- 支持High Availability; 动态模式可无缝加入hiveserver2的zk namespace
静态模式
启动
./sbin/start-thriftserver.sh
停止
./sbin/stop-thriftserver.sh
配置
## 静态方式下用户的sc直接在thrift server启动时拉起,也不回收;可通过该配置项指定具体拉起的用户及其sc
spark.sql.proxy.users user1,user2,...
## 指定属于该用户的队列名
spark.sql.queue.da_edu queue1
spark.sql.queue.beauty queue2
其中,这些用户需要能被spark.yarn.principal里的用户代理
在hdfs上有对应权限的staging目录,一般是/user/username
其他配置按照spark常规的配置即可
连接
bin/beeline -u "jdbc:hive2://kent.spark.org:10000/default;principal=hive/app-20.photo.163.org@HADOOP.HZ.NETEASE.COM;hive.server2.proxy.user=user1"
如果配置正确,该session会在user1启动的sc下执行相关的sql
动态模式
启动
./sbin/start-multitenancy-server.sh
停止
./sbin/stop-multitenancy-server.sh
配置
动态的配置只需要按spark常规的配置即可,启动参数除了默认的spark-defaults.conf里面配置以外,可以通过Thrift连接串指定,默认sc是20min空闲自动关闭,所以一旦sc启动了,默写静态的参数就无法再修改了,得等他超时被stop掉
连接
bin/beeline -u "jdbc:hive2://kent.spark.org::10001/default;principal=hive/_HOST@TEST.AMBARI.NETEASE.COM;hive.server2.proxy.user=spark_test#hive.metastore.warehouse.dir=/user/spark_test/warehouse;spark.executor.memory=10g"
上例中,可指定该spark_test用户执行,设置默认的warehouse路径为/user/spark_test/warehouse;executor内存为10g