項目地址
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