Pycurl, чтобы представить результат работы Ливи в 403 ошибка - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь настроить запланированное задание в Anaconda Python 3.7 для отправки задания pyspark через livy api в кластер Kerberoized на HDP. Я использую pycurl (PycURL / 7.43.0.3 libcurl / 7.65.2 Schannel zlib / 1.2.11 libssh2 / 1.8.2) в Windows.

Шаги, которые я сделал до сих пор:

  1. Установка MIT Kerberos, настройка C: \ ProgramData \ MIT \ Kerberos5 \ krb5.ini
[libdefaults]
  renew_lifetime = 7d
  forwardable = true
  default_realm = DATALAKE
  ticket_lifetime = 24h
  dns_lookup_realm = false
  dns_lookup_kdc = false
  default_ccache_name = FILE:C:/ProgramData/MIT/Kerberos5/krb5cc_%{uid}

[logging]
  default = FILE:/var/log/krb5kdc.log
  admin_server = FILE:/var/log/kadmind.log
  kdc = FILE:/var/log/krb5kdc.log

[realms]
  DATALAKE = {
    admin_server = host.datalake
    kdc = host.datalake
  }

Системная переменная среды, KRB5CCNAME = C: \ temp \ krb5cache

TGT можно увидеть из MIT kerberos UI. Однако из консоли есть два klist.exe. Из C: \ Windows \ System32 \ klist.exe я не вижу TGT. В C: \ Program Files \ MIT \ Kerberos \ bin \ klist.exe я вижу TGT, соответствующий пользовательскому интерфейсу.
import pycurl
from io import BytesIO

url = "http://ip:port/batches"
buffer = BytesIO()

curl = pycurl.Curl()
curl.setopt(pycurl.URL, url)
curl.setopt(pycurl.HTTPHEADER, ['Content-Type: application/json'])
curl.setopt(pycurl.WRITEDATA, buffer)
curl.setopt(pycurl.USERPWD, ':')
curl.setopt(pycurl.HTTPAUTH, pycurl.HTTPAUTH_GSSNEGOTIATE)
curl.setopt(pycurl.VERBOSE, True)

curl.perform()
print(curl.getinfo(pycurl.RESPONSE_CODE))
print(buffer.getvalue())

Ошибка, которую я получил 403

HTTP ERROR: 403
Problem accessing /batches. 
Reason:org.apache.hadoop.security.authentication.client.AuthenticationException:GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)
Powered by Jetty://

Однако, если я выполнил вышеуказанные шаги в Mac, это будет успех. Какие параметры мне не хватает в Windows? Pycurl не использует учетные данные, хранящиеся в KRB5CCNAME = C: \ temp \ krb5cache?

...