使用python和kerberos连接到配置单元

bn31dyow  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(637)

我正在尝试使用python连接到hive。我安装了所需的所有依赖项(sasl、thrift\u 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")

但我有个错误:
次要代码可能提供更多信息(找不到领域“realm\u domain”的kdc)
我错过了什么?有没有人举过 pyHive 连接使用 kerberos ?
谢谢你的帮助。

wsxa1bj1

wsxa1bj11#

我不知道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)
9w11ddsr

9w11ddsr2#

谢谢你@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

我想你可以使用pyspark来运行python,比如:

python MyProgram.py

但我没有试过,所以我不能保证它能起作用

相关问题