Преглед изворни кода

[beeswax] HS2 principal should come from hive-site.xml

Abraham Elmahrek пре 12 година
родитељ
комит
00a2de3

+ 5 - 0
apps/beeswax/src/beeswax/hive_site.py

@@ -39,6 +39,7 @@ _CNF_METASTORE_LOCAL = 'hive.metastore.local'
 _CNF_METASTORE_SASL = 'hive.metastore.sasl.enabled'
 _CNF_METASTORE_URIS = 'hive.metastore.uris'
 _CNF_METASTORE_KERBEROS_PRINCIPAL = 'hive.metastore.kerberos.principal'
+_CNF_HIVESERVER2_KERBEROS_PRINCIPAL = 'hive.server2.authentication.kerberos.principal'
 
 # Host is whatever up to the colon. Allow and ignore a trailing slash.
 _THRIFT_URI_RE = re.compile("^thrift://([^:]+):(\d+)[/]?$")
@@ -95,6 +96,10 @@ def get_metastore():
   return _METASTORE_LOC_CACHE
 
 
+def get_hiveserver2_kerberos_principal():
+  return security_util.get_kerberos_principal(get_conf().get(_CNF_HIVESERVER2_KERBEROS_PRINCIPAL, None), socket.getfqdn())
+
+
 def _parse_hive_site():
   """
   Parse hive-site.xml and store in _HIVE_SITE_DICT

+ 9 - 1
apps/beeswax/src/beeswax/server/dbms.py

@@ -26,6 +26,7 @@ from beeswaxd.ttypes import BeeswaxException
 from desktop.conf import KERBEROS
 from filebrowser.views import location_to_url
 
+from beeswax import hive_site
 from beeswax.conf import BEESWAX_SERVER_HOST, BEESWAX_SERVER_PORT,\
   BROWSE_PARTITIONED_TABLE_LIMIT, SERVER_INTERFACE
 from beeswax.design import hql_query
@@ -67,13 +68,20 @@ def get_query_server_config(name='beeswax'):
         'principal': IMPALA_PRINCIPAL.get(),
     }
   else:
+    if SERVER_INTERFACE.get() == 'hiveserver2':
+      kerberos_principal = hive_site.get_hiveserver2_kerberos_principal()
+    else:
+      # Beeswaxd runs as 'hue'
+      kerberos_principal = KERBEROS.HUE_PRINCIPAL.get()
+
     query_server = {
         'server_name': 'beeswax',
         'server_host': BEESWAX_SERVER_HOST.get(),
         'server_port': BEESWAX_SERVER_PORT.get(),
         'server_interface': SERVER_INTERFACE.get(),
-        'principal': KERBEROS.HUE_PRINCIPAL.get()
+        'principal': kerberos_principal
     }
+    LOG.debug("Query Server:\n\tName: %(server_name)s\n\tHost: %(server_host)s\n\tPort: %(server_port)s\n\tInterface: %(server_interface)s\n\tKerberos Principal: %(principal)s" % query_server)
 
   return query_server
 

+ 6 - 0
apps/beeswax/src/beeswax/tests.py

@@ -1320,6 +1320,11 @@ def test_hive_site():
         <name>hive.metastore.kerberos.principal</name>
         <value>test/test.com@TEST.COM</value>
       </property>
+
+      <property>
+        <name>hive.server2.authentication.kerberos.principal</name>
+        <value>hs2test/test.com@TEST.COM</value>
+      </property>
     </configuration>
   """
 
@@ -1343,6 +1348,7 @@ def test_hive_site():
     assert_equal(port, 9999)
     assert_equal(beeswax.hive_site.get_conf()['hive.metastore.warehouse.dir'], u'/abc')
     assert_equal(kerberos_principal, 'test/test.com@TEST.COM')
+    assert_equal(beeswax.hive_site.get_hiveserver2_kerberos_principal(), 'hs2test/test.com@TEST.COM')
   finally:
     beeswax.hive_site.reset()
     if saved is not None: