Подключение к Hive с использованием Python и Kerberos - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь подключиться к улью, используя Python. Я установил все необходимые зависимости (sasl, thrift_sasl и т. Д.)

Вот как я пытаюсь подключиться:

configuration = {"hive.server2.authentication.kerberos.principal" : "hive/_HOST@REALM_HOST", "hive.server2.authentication.kerberos.keytab" : "/etc/security/keytabs/hive.service.keytab"}

connection = hive.Connection(configuration = configuration, host="host", port=port, auth="KERBEROS", kerberos_service_name = "hiveserver2")

Но я получаю эту ошибку:

Младший код может предоставить дополнительную информацию (Не удается найти KDC для области "REALM_DOMAIN")

Чего мне не хватает? У кого-нибудь есть пример соединения pyHive с использованием kerberos?

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Спасибо @Kishore. На самом деле в PySpark код выглядит так:

import pyspark
from pyspark import SparkContext
from pyspark.sql import Row
from pyspark import SparkConf
from pyspark.sql import HiveContext
from pyspark.sql import functions as F
import pyspark.sql.types as T

def connection(self):
    conf = pyspark.SparkConf()
    conf.setMaster('yarn-client')
    sc = pyspark.SparkContext(conf=conf)

    self.cursor = HiveContext(sc)

    self.cursor.setConf("hive.exec.dynamic.partition", "true")
    self.cursor.setConf("hive.exec.dynamic.partition.mode", "nonstrict")
    self.cursor.setConf("hive.warehouse.subdir.inherit.perms", "true")
    self.cursor.setConf('spark.scheduler.mode', 'FAIR')

и вы можете запросить, используя:

rows = self.cursor.sql("SELECT someone FROM something")
for row in rows.collect():
    print row

Я на самом деле запускаю код с помощью команды:

spark-submit --master yarn MyProgram.py

Полагаю, вы могли бы в основном запустить python с установленным pyspark, как:

python MyProgram.py 

но я не пробовал, поэтому не буду уверять, что он работает

0 голосов
/ 04 июля 2018

Я не знаю, в pyspark, но я использую ниже Scala-код, и он работает с прошлого года. Если вы можете изменить этот код в Python. Замените значение свойств на основе вашего kerberos.

System.setProperty("hive.metastore.uris", "add hive.metastore.uris url");
System.setProperty("hive.metastore.sasl.enabled", "true")
System.setProperty("hive.metastore.kerberos.keytab.file", "add keytab")
System.setProperty("hive.security.authorization.enabled", "false")
System.setProperty("hive.metastore.kerberos.principal", "replace hive.metastore.kerberos.principal value")
System.setProperty("hive.metastore.execute.setugi", "true")
val hiveContext = new HiveContext(sparkContext)
...