PolyBase Kerberos-kapcsolat hibaelhárítása

A következőkre vonatkozik: SQL Server 2016 (13.x) és újabb verziók Windows rendszeren

A PolyBase Kerberos által védett Hadoop-fürttel való használatakor felmerülő hitelesítési problémák elhárításához használja a PolyBase-be beépített interaktív diagnosztikát.

Ez a cikk útmutatóként szolgál az ilyen problémák hibakeresési folyamatának végigjárásához ezen beépített diagnosztikák használatával.

Jótanács

Ha HDFS Kerberos-hibát tapasztal, amikor külső táblát hoz létre egy Kerberos által védett HDFS-fürtben, futtassa a HDFS Kerberos-tesztelőt a PolyBase HDFS Kerberos-kapcsolatainak hibaelhárításához.

Ez az eszköz segít kizárni a nem SQL Serverrel kapcsolatos problémákat, így a HDFS Kerberos telepítési problémáinak megoldására összpontosíthat. Segít azonosítani a felhasználónév és jelszó hibás konfigurációiból adódó problémákat, valamint a fürt Kerberos-beállításainak hibás konfigurációit.

Ez az eszköz független az SQL Servertől. Jupyter Notebookként érhető el.

Előfeltételek

  1. SQL Server 2016 (13.x) RTM CU6, SQL Server 2016 (13.x) SP1 CU3 vagy SQL Server 2017 (14.x) és újabb verziók a PolyBase telepítve

  2. Kerberossal (Active Directory vagy MIT) védett Hadoop-fürt (Cloudera vagy Hortonworks)

Bevezetés

Segít a Kerberos protokoll magas szintű megértésében. Három szereplő vesz részt:

  1. Kerberos-ügyfél (SQL Server)
  2. Biztonságos erőforrás (HDFS, MR2, YARN, Feladatelőzmények és egyebek)
  3. Kulcsterjesztési központ (más néven tartományvezérlő az Active Directoryban)

Ha a Kerberost a Hadoop-fürtön konfigurálja, minden Hadoop által védett erőforrást regisztrál a Kulcsterjesztési központban (KDC) egy egyedi egyszerű szolgáltatásnévvel (SPN). Az ügyfélnek egy ideiglenes felhasználói jegyet kell beszereznie, amelyet jegymegadó jegynek (TGT) hívunk, hogy egy másik, szolgáltatásjegynek (ST) nevezett ideiglenes jegyet igényelhessen a KDC-ből az adott spn-hez, amelyhez hozzá szeretne férni.

A PolyBase-ben, amikor bármilyen Kerberos által védett erőforráson kér hitelesítést, a következő négyirányú kézfogás történik:

  1. Az SQL Server csatlakozik a KDC-hez, és TGT-t kap a felhasználó számára. A KDC titkos kulcsa titkosítja a TGT-t.

  2. Az SQL Server meghívja a Hadoop által védett erőforrást, a HDFS-t, és meghatározza, hogy melyik SPN-hez van szüksége szolgáltatási jegyre.

  3. Az SQL Server visszatér a KDC-hez, visszaküldi a TGT-t, és egy ST-t kér az adott védett erőforrás eléréséhez. A biztonságos szolgáltatás titkos kulcsa titkosítja az ST-t.

  4. Az SQL Server továbbítja az ST-t a Hadoopnak, és hitelesítést kap, hogy munkamenetet hozzon létre az adott szolgáltatáson.

Az SQL Server PolyBase-diagramja.

A hitelesítéssel kapcsolatos problémák az előző lépések közül egy vagy többre esnek. A gyorsabb hibakeresés érdekében a PolyBase egy integrált diagnosztikai eszközt biztosít a hibapont azonosításához.

Hibaelhárítás

A PolyBase a következő konfigurációs XML-fájlokat használja a Hadoop-fürt tulajdonságainak tárolására:

  • core-site.xml
  • hdfs-site.xml
  • hive-site.xml
  • jaas.conf
  • mapred-site.xml
  • yarn-site.xml

Ezeket a fájlokat a következő elérési úton találja:

[System Drive]:{install path}{MSSQL##.INSTANCENAME}\MSSQL\Binn\PolyBase\Hadoop\conf

Az SQL Server 2016 (13.x) alapértelmezett elérési útja például a következő C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf.

Szerkessze core-site.xml, és adja hozzá a következő tulajdonságokat. Állítsa be az értékeket a környezetének megfelelően:

<property>
    <name>polybase.kerberos.realm</name>
    <value>CONTOSO.COM</value>
</property>
<property>
    <name>polybase.kerberos.kdchost</name>
    <value>kerberos.contoso.com</value>
</property>
<property>
    <name>hadoop.security.authentication</name>
    <value>KERBEROS</value>
</property>

Megjegyzés:

A tulajdonság értékének polybase.kerberos.realm nagybetűsnek kell lennie.

Ha engedélyezni szeretné a leküldéses műveleteket, frissítenie kell a többi XML-fájlt. A HDFS fájlrendszer csak ezzel a fájllal érhető el.

Az eszköz az SQL Servertől függetlenül fut, ezért nem kell futnia. A konfigurációs XML-fájlok frissítésekor nem kell újraindítania. Az eszköz futtatásához hajtsa végre a következő parancsokat azon a gazdagépen, amelyen az SQL Server telepítve van:

cd C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\PolyBase
java -classpath ".\Hadoop\conf;.\Hadoop\*;.\Hadoop\HDP2_2\*" com.microsoft.polybase.client.HdfsBridge {Name Node Address} {Name Node Port} {Service Principal} {Filepath containing Service Principal's Password} {Remote HDFS file path (optional)}

Az SQL Server 2019 (15.x) és újabb verzióiban a PolyBase szolgáltatás telepítésekor hivatkozhat egy meglévő Java Futtatókörnyezetre, vagy telepítheti az AZUL-OpenJDK-JRE-t. Ha az AZUL-OpenJDK-JRE lehetőséget választja, java.exe nem része a $PATH környezeti változónak, és előfordulhat, hogy hiba lép fel

'java' isn't recognized as an internal or external command, operable program or batch file.

Ha ez a hiba jelentkezik, adja hozzá a java.exe elérési útját a $PATH munkamenet környezeti változóhoz. A Java-végrehajtható fájl alapértelmezett telepítési útvonala a következő C:\Program Files\Microsoft SQL Server\MSSQL15.<instance name>\AZUL-OpenJDK-JRE\bin: . Ha ez az elérési út, akkor a kerberosi kapcsolat hibaelhárítási eszköz futtatásához a parancs végrehajtása előtt végre kell hajtania a java következő parancsot.

set PATH=%PATH%;C:\Program Files\Microsoft SQL Server\MSSQL15.{instance name}\AZUL-OpenJDK-JRE\bin

Arguments

Argument Description
Névcsomópont címe A névcsomópont IP-címe vagy teljes tartományneve. LOCATION a Transact-SQL CREATE EXTERNAL DATA SOURCE argumentumára hivatkozik. Megjegyzés: Az eszköz SQL Server 2019-es verziójának meg kell hdfs:// előznie az IP-címet vagy az FQDN-t.
Namenode port A névcsomópont portja. A LOCATION saját T-SQL CREATE EXTERNAL DATA SOURCE argumentumára hivatkozik. Például: 8020.
Szolgáltatásfelelős A rendszergazda szolgáltatási főazonosító a KDC-hez. Megfelel a CREATE DATABASE SCOPED CREDENTIAL T-SQL IDENTITY argumentumának.
Szolgáltatás jelszava Ahelyett, hogy beírja a jelszót a konzolon, tárolja egy fájlban, és adja meg a fájl elérési útját. A fájl tartalmának meg kell egyeznie azzal, amit argumentumként SECRET használ a CREATE DATABASE SCOPED CREDENTIAL T-SQL-ben.
Távoli HDFS fájl elérési útja (nem kötelező) Egy meglévő fájl elérési útja. Ha nincs megadva, a rendszer a gyökérmappát (/) használja.

Példák

java -classpath ".\Hadoop\conf;.\Hadoop\*;.\Hadoop\HDP2_2\*" com.microsoft.polybase.client.HdfsBridge 10.193.27.232 8020 admin_user C:\temp\kerberos_pass.txt

A kimenet részletes a továbbfejlesztett hibakereséshez, de csak négy fő ellenőrzőpontot kell keresni, függetlenül attól, hogy MIT-t vagy AD-t használ. Ezek a korábban ismertetett négy lépésnek felelnek meg.

Az alábbi részletek egy MIT KDC-ből származnak. Tekintse meg az MIT és az AD teljes mintakimeneteit a cikk végén, a Kapcsolódó tartalomban.

Ellenőrzőpont 1

A jegyről kellene egy hexadecimális memória kiíratás Server Principal = krbtgt/MYREALM.COM@MYREALM.COM. Azt jelzi, hogy az SQL Server sikeresen hitelesített a KDC-vel, és TGT-t kapott. Ha nem, a probléma szigorúan az SQL Server és a KDC között van, és nem a Hadoop között.

A PolyBase nem támogatja az AD és az MIT közötti megbízhatósági kapcsolatokat, és a Hadoop-fürtben konfigurált KDC-hez kell konfigurálni. Ilyen környezetekben manuálisan hozzon létre egy szolgáltatásfiókot az adott KDC-n, és használja a hitelesítés végrehajtásához.

>>> KrbAsReq creating message
>>> KrbKdcReq send: kdc=kerberos.contoso.com UDP:88, timeout=30000, number of retries =3, #bytes=143
>>> KDCCommunication: kdc=kerberos.contoso.com UDP:88, timeout=30000,Attempt =1, #bytes=143
>>> KrbKdcReq send: #bytes read=646
>>> KdcAccessibility: remove kerberos.contoso.com
>>> EType: sun.security.krb5.internal.crypto.Des3CbcHmacSha1KdEType
>>> KrbAsRep cons in KrbAsReq.getReply myuser
[2017-04-25 21:34:33,548] INFO 687[main] - com.microsoft.polybase.client.KerberosSecureLogin.secureLogin(KerberosSecureLogin.java:97) - Subject:
Principal: admin_user@CONTOSO.COM
Private Credential: Ticket (hex) =
0000: 61 82 01 48 30 82 01 44 A0 03 02 01 05 A1 0E 1B a..H0..D........
0010: 0C 41 50 53 48 44 50 4D 53 2E 43 4F 4D A2 21 30 .CONTOSO.COM.!0
0020: 1F A0 03 02 01 02 A1 18 30 16 1B 06 6B 72 62 74 ........0...krbt
0030: 67 74 1B 0C 41 50 53 48 44 50 4D 53 2E 43 4F 4D gt..CONTOSO.COM
0040: A3 82 01 08 30 82 01 04 A0 03 02 01 10 A1 03 02 ....0...........
*[...Condensed...]*
0140: 67 6D F6 41 6C EB E0 C3 3A B2 BD B1 gm.Al...:...
Client Principal = admin_user@CONTOSO.COM
Server Principal = krbtgt/CONTOSO.COM@CONTOSO.COM
*[...Condensed...]*
[2017-04-25 21:34:34,500] INFO 1639[main] - com.microsoft.polybase.client.HdfsBridge.main(HdfsBridge.java:1579) - Successfully authenticated against KDC server.

Ellenőrzőpont 2

A PolyBase megkísérli elérni a HDFS-t, és meghiúsul, mert a kérés nem tartalmazza a szükséges szolgáltatásjegyet.

[2017-04-25 21:34:34,501] INFO 1640[main] - com.microsoft.polybase.client.HdfsBridge.main(HdfsBridge.java:1584) - Attempting to access external filesystem at URI: hdfs://10.193.27.232:8020
Found ticket for admin_user@CONTOSO.COM to go to krbtgt/CONTOSO.COM@CONTOSO.COM expiring on Wed Apr 26 21:34:33 UTC 2017
Entered Krb5Context.initSecContext with state=STATE_NEW
Found ticket for admin_user@CONTOSO.COM to go to krbtgt/CONTOSO.COM@CONTOSO.COM expiring on Wed Apr 26 21:34:33 UTC 2017
Service ticket not found in the subject

Ellenőrzőpont 3

Egy második hexadecimális memóriakép azt mutatja, hogy az SQL Server sikeresen használja a TGT-t, és a névcsomópont SPN-jének szolgáltatásjegyét a KDC-ből szerzi be.

>>> KrbKdcReq send: kdc=kerberos.contoso.com UDP:88, timeout=30000, number of retries =3, #bytes=664
>>> KDCCommunication: kdc=kerberos.contoso.com UDP:88, timeout=30000,Attempt =1, #bytes=664
>>> KrbKdcReq send: #bytes read=669
>>> KdcAccessibility: remove kerberos.contoso.com
>>> EType: sun.security.krb5.internal.crypto.Des3CbcHmacSha1KdEType
>>> KrbApReq: APOptions are 00100000 00000000 00000000 00000000
>>> EType: sun.security.krb5.internal.crypto.Des3CbcHmacSha1KdEType
Krb5Context setting mySeqNumber to: 1033039363
Created InitSecContextToken:
0000: 01 00 6E 82 02 4B 30 82 02 47 A0 03 02 01 05 A1 ..n..K0..G......
0010: 03 02 01 0E A2 07 03 05 00 20 00 00 00 A3 82 01 ......... ......
0020: 63 61 82 01 5F 30 82 01 5B A0 03 02 01 05 A1 0E ca.._0..[.......
0030: 1B 0C 41 50 53 48 44 50 4D 53 2E 43 4F 4D A2 26 ..CONTOSO.COM.&
0040: 30 24 A0 03 02 01 00 A1 1D 30 1B 1B 02 6E 6E 1B 0$.......0...nn.
0050: 15 73 68 61 73 74 61 2D 68 64 70 32 35 2D 30 30 .hadoop-hdp25-00
0060: 2E 6C 6F 63 61 6C A3 82 01 1A 30 82 01 16 A0 03 .local....0.....
0070: 02 01 10 A1 03 02 01 01 A2 82 01 08 04 82 01 04 ................
*[...Condensed...]*
0240: 03 E3 68 72 C4 D2 8D C2 8A 63 52 1F AE 26 B6 88 ..hr.....cR..&..
0250: C4 .

Ellenőrzőpont 4

Végül a célútvonal fájltulajdonságait egy megerősítő üzenettel együtt nyomtatja ki. A fájltulajdonságok megerősítik, hogy az SQL Server hitelesíti a Hadoopot az ST használatával, és munkamenetet biztosít a biztonságos erőforrás eléréséhez.

Ennek az elérése megerősíti, hogy: (i) a három szereplő helyesen kommunikál, (ii) a core-site.xml és jaas.conf helyes, és (iii) a KDC felismeri hitelesítő adatait.

[2017-04-25 21:34:35,096] INFO 2235[main] - com.microsoft.polybase.client.HdfsBridge.main(HdfsBridge.java:1586) - File properties for "/": FileStatus{path=hdfs://10.193.27.232:8020/; isDirectory=true; modification_time=1492028259862; access_time=0; owner=hdfs; group=hdfs; permission=rwxr-xr-x; isSymlink=false}
[2017-04-25 21:34:35,098] INFO 2237[main] - com.microsoft.polybase.client.HdfsBridge.main(HdfsBridge.java:1587) - Successfully accessed the external file system.

Gyakori hibák

Ha futtatja az eszközt, és a célútvonal fájltulajdonságai nem jelennek meg (4. ellenőrzőpont), kivételt eredményez végrehajtás közben. Tekintse át a kivételt, és gondolja át, hogy a négylépéses folyamatban hol történt. Vegye figyelembe a következő gyakori problémákat, amelyek a következő sorrendben fordulhatnak elő:

Kivétel és üzenetek Oka
org.apache.hadoop.security.AccessControlException
SIMPLE authentication is not enabled. Available:[TOKEN, KERBEROS]
A core-site.xml fájl nem állítja be a hadoop.security.authentication tulajdonságot KERBEROS.
javax.security.auth.login.LoginException
Client not found in Kerberos database (6) - CLIENT_NOT_FOUND
A szolgáltatásfelelős nem létezik a megadott tartományon belül core-site.xml.
javax.security.auth.login.LoginException
Checksum failed
A rendszergazda szolgáltatási főfelhasználó megvan, de a jelszó rossz.
Native config name: C:\Windows\krb5.ini
Loaded from native config
Ez az üzenet azt jelzi, hogy a Java krb5LoginModule egyéni ügyfélkonfigurációkat észlelt a számítógépen. Ellenőrizze az egyéni ügyfélbeállításokat, mert ezek okozhatják a problémát.
javax.security.auth.login.LoginException
java.lang.IllegalArgumentException
Illegal principal name <admin_user@CONTOSO.COM>: org.apache.hadoop.security.authentication.util.KerberosName$NoMatchingRule: No rules applied to <admin_user@CONTOSO.COM>
Adja hozzá a hadoop.security.auth_to_local tulajdonságot a core-site.xml-hez a Hadoop-fürt megfelelő szabályaival.
java.net.ConnectException
Attempting to access external filesystem at URI: hdfs://10.193.27.230:8020
Call From IAAS16981207/10.107.0.245 to 10.193.27.230:8020 failed on connection exception
A KDC-vel való hitelesítés sikeres, de nem fér hozzá a Hadoop névcsomóponthoz. Ellenőrizze a névcsomópont IP-címét és portát. Ellenőrizze, hogy a tűzfal le van-e tiltva a Hadoopon.
java.io.FileNotFoundException
File does not exist: /test/data.csv
A hitelesítés sikeres, de a megadott hely nem létezik. Először ellenőrizze az elérési utat, vagy végezzen tesztet a gyökérrel /.

Hibakeresési tippek

MIT KDC

A KDC-ben regisztrált összes SPN, a rendszergazdákat is beleértve, a kadmin.local> (rendszergazdai fiók) >listprincs futtatásával tekinthető meg a KDC gazdagépen vagy bármely konfigurált KDC ügyfélen. Ha megfelelően konfigurálja a Kerberost a Hadoop-fürtön, akkor a fürtben elérhető minden szolgáltatáshoz van egy SPN (például: nn, dn, rm, yarn, spnego, stb.). Alapértelmezés szerint a megfelelő keytab-fájlok (jelszóhelyettesítők) láthatók a területen /etc/security/keytabs. A KDC titkos kulcsa titkosítja ezeket a fájlokat.

A KDC rendszergazdai hitelesítő adatainak helyi ellenőrzéséhez használja a következőt kinit: . Például futtathat kinit identity@MYREALM.COM. Ha az identitás létezik, a rendszer jelszót kér.

A KDC-naplók alapértelmezés szerint /var/log/krb5kdc.log elérhetők. A naplók tartalmazzák az összes jegykérést, beleértve a kérést küldő ügyfél IP-címét is. Az SQL Server gép IP-címéről, ahol az eszközt futtatta, két kérés érkezett: először egy AS_REQ TGT-t a hitelesítőkiszolgálótól, majd egy TGS_REQ ST-t a jegykiadó kiszolgálótól.

[root@MY-KDC log]# tail -2 /var/log/krb5kdc.log
May 09 09:48:26 MY-KDC.local krb5kdc[2547](info): **AS_REQ** (3 etypes {17 16 23}) 10.107.0.245: ISSUE: authtime 1494348506, etypes {rep=16 tkt=16 ses=16}, admin_user@CONTOSO.COM for **krbtgt/CONTOSO.COM@CONTOSO.COM**
May 09 09:48:29 MY-KDC.local krb5kdc[2547](info): **TGS_REQ** (3 etypes {17 16 23}) 10.107.0.245: ISSUE: authtime 1494348506, etypes {rep=16 tkt=16 ses=16}, admin_user@CONTOSO.COM for **nn/hadoop-hdp25-00.local@CONTOSO.COM**

Active Directory

Az Active Directory-ban a SPN-eket (szolgáltatásneveket) a Vezérlőpult>Active Directory – Felhasználók és számítógépek megnyitásával tekintheti meg, majd a <MyRealm> menüben <MyOrganizationalUnit> kiválasztását követően. Ha megfelelően konfigurálja a Kerberost a Hadoop-fürtön, akkor a fürtben elérhető minden szolgáltatáshoz van egy SPN (például: nn, dn, rm, yarn, spnego, stb.).

Általános hibakeresési tippek

Hasznos lehet, ha van némi Java-tapasztalata a naplók megtekintéséhez és a Kerberos-problémák hibakereséséhez, amelyek függetlenek az SQL Server PolyBase funkciótól.

Ha továbbra is problémákat tapasztal a Kerberos elérésekor, kövesse az alábbi lépéseket a hibakereséshez:

  1. Győződjön meg arról, hogy a Kerberos HDFS-adatokat az SQL Serveren kívülről is elérheti. A következő lehetőségek közül választhat:

    • Írjon saját Java-programot, vagy használja az osztályt a HdfsBridge PolyBase telepítési mappájából. Például:

      -classpath ".\Hadoop\conf;.\Hadoop\*;.\Hadoop\HDP2_2\*" com.microsoft.polybase.client.HdfsBridge 10.193.27.232 8020 admin_user C:\temp\kerberos_pass.txt
      

    Az előző példában admin_user csak a felhasználónevet tartalmazza , tartományrészt nem.

  2. Ha nem fér hozzá a Kerberos HDFS-adatokhoz a PolyBase-en kívülről:

    • A Kerberos-hitelesítésnek két típusa van: Az Active Directory Kerberos-hitelesítés és az MIT Kerberos-hitelesítés.

    • Győződjön meg arról, hogy a felhasználó létezik a tartományi fiókban, és ugyanazt a felhasználói fiókot használja a HDFS elérésekor.

  3. A Active Directory Kerberos esetében bizonyosodjon meg róla, hogy a klist parancs használatával látható a gyorsítótárazott jegy Windows rendszeren.

    Csatlakozzon a PolyBase-géphez, és futtassa klist a klist tgt parancssorban, és ellenőrizze, hogy a KDC, a felhasználónév és a titkosítási típusok helyesek-e.

  4. Ha a KDC csak az AES-256-ot tudja támogatni, győződjön meg arról, hogy a JCE-házirendfájlok telepítve vannak.