天天看點

HiveServer2 Impersonation

CDH4.2.0開始支援hiveserver2的impersonation,隻需要設定參數hive.server2.enable.impersonation(該參數在Hive裡是HIVE_SERVER2_KERBEROS_IMPERSONATION,容易被誤會和kerberos一起使用)為true即可,這樣可以使得送出的HQL以送出使用者來運作MAPREDUCE而不是運作Hiveserver的User,那麼具體是如何實作的呢:

當通過ThriftCliService開啟一個Session時,如果開啟了上面的參數,則會調用CliService的openSessionWithImpersonation方法進而SessionManager就會生成一個HiveSession的動态代理HiveSessionImplwithUGI,并把使用者的UGI傳入進去:

session = (HiveSession)HiveSessionProxy.getProxy(hiveSessionUgi,hiveSessionUgi.getSessionUgi());

hiveSessionUgi.setProxySession(session);

每次執行方法的時候都是通過ShimLoader.getHadoopShims().doAs執行,如果沒有指定該參數則是以運作Hiveserver的使用者執行.

本文轉自MIKE老畢 51CTO部落格,原文連結:http://blog.51cto.com/boylook/1311584,如需轉載請自行聯系原作者

下一篇: OCS 2010 ROLES