使用 python 和 Kerberos 连接到 Hive
Connection to Hive using python and Kerberos
我正在尝试使用 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")
但是我得到这个错误:
Minor code may provide more information (Cannot find KDC for realm "REALM_DOMAIN")
为什么我不见了?有人有使用 kerberos
的 pyHive
连接的示例吗?
感谢您的帮助。
我不知道在 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)
谢谢@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
但我没有尝试过,所以我不能保证它是否有效
我正在尝试使用 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")
但是我得到这个错误:
Minor code may provide more information (Cannot find KDC for realm "REALM_DOMAIN")
为什么我不见了?有人有使用 kerberos
的 pyHive
连接的示例吗?
感谢您的帮助。
我不知道在 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)
谢谢@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
但我没有尝试过,所以我不能保证它是否有效