

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Benutzer-Identitätswechsel
<a name="emr-jupyterhub-user-impersonation"></a>

Ein Spark-Auftrag, der in einem Jupyter-Notebook ausgeführt wird, durchläuft während seiner Ausführung in Amazon EMR mehrere Anwendungen. Zum Beispiel wird PySpark 3-Code, den ein Benutzer in Jupyter ausführt, von Sparkmagic empfangen. Sparkmagic verwendet eine HTTP-POST-Anfrage, um ihn an Livy zu senden, das dann einen Spark-Job erstellt, der mit YARN auf dem Cluster ausgeführt wird.

Standardmäßig werden auf diese Weise gesendete YARN-Aufträge als Benutzer `livy` ausgeführt. Dies gilt unabhängig von dem Benutzer, der den Auftrag initiiert hat. Durch das Einrichten eines *Benutzer-Identitätswechsels* können Sie die Benutzer-ID des Notebook-Benutzers auch für den dem YARN-Auftrag zugeordneten Benutzer verwenden. Von `shirley` und `diego` initiierte Aufträge werden nicht dem Benutzer `livy` zugeordnet. Stattdessen werden die von den Benutzern initiierten Aufträge `shirley` und `diego` zugeordnet. Dies erleichtert das Überwachen der Jupyter-Nutzung und das Verwalten von Anwendungen in der Organisation.

Diese Konfiguration wird nur unterstützt, wenn Aufrufe von Sparkmagic an Livy ohne Authentifizierung erfolgen. Anwendungen, die eine Authentifizierung oder einen Proxy-Layer zwischen Hadoop-Anwendungen und Livy (z. B. Apache Knox Gateway) bereitstellen, werden nicht unterstützt. Bei den Schritten zur Konfiguration des Benutzerwechsels in diesem Abschnitt wird davon ausgegangen, dass JupyterHub und Livy auf demselben Master-Knoten ausgeführt werden. Wenn die Anwendung separate Cluster enthält, muss [Schritt 3: HDFS-Stammverzeichnisse für Benutzer erstellen](#Step3-UserImpersonation) geändert werden, damit HDFS-Verzeichnisse auf dem Livy-Master-Knoten erstellt werden.

**Topics**
+ [Schritt 1: Livy konfigurieren](#Step1-UserImpersonation)
+ [Schritt 2: Benutzer hinzufügen](#Step2-UserImpersonation)
+ [Schritt 3: HDFS-Stammverzeichnisse für Benutzer erstellen](#Step3-UserImpersonation)

## Schritt 1: Livy konfigurieren
<a name="Step1-UserImpersonation"></a>

Sie verwenden die Konfigurationsklassifizierungen `livy-conf` und `core-site`, wenn Sie einen Cluster erstellen, um Livy-Benutzer-Identitätswechsel zu ermöglichen (siehe folgendes Beispiel). Speichern Sie die Konfigurationsklassifizierung als JSON-Objekt und verweisen Sie dann darauf, wenn Sie den Cluster erstellen. Sie können die Konfigurationsklassifizierung auch im Code angeben. Weitere Informationen finden Sie unter [Anwendungen konfigurieren](emr-configure-apps.md).

```
[
  {
    "Classification": "livy-conf",
    "Properties": {
      "livy.impersonation.enabled": "true"
    }
  },
  {
    "Classification": "core-site",
    "Properties": {
      "hadoop.proxyuser.livy.groups": "*",
      "hadoop.proxyuser.livy.hosts": "*"
    }
  }
]
```

## Schritt 2: Benutzer hinzufügen
<a name="Step2-UserImpersonation"></a>

Fügen Sie JupyterHub Benutzer mithilfe von PAM oder LDAP hinzu. Weitere Informationen erhalten Sie unter [Verwenden der PAM-Authentifizierung](emr-jupyterhub-pam-users.md) und [Verwenden der LDAP-Authentifizierung](emr-jupyterhub-ldap-users.md).

## Schritt 3: HDFS-Stammverzeichnisse für Benutzer erstellen
<a name="Step3-UserImpersonation"></a>

Sie haben eine Verbindung zum Master-Knoten hergestellt, um Benutzer zu erstellen. Kopieren Sie den unten angegebenen Inhalt, während die Verbindung zum Master-Knoten noch besteht, und speichern Sie ihn in einer Skriptdatei. Das Skript erstellt HDFS-Home-Verzeichnisse für jeden JupyterHub Benutzer auf dem Master-Knoten. Das Skript geht davon aus, dass Sie die Standard-Administratorbenutzer-ID verwenden,*jovyan*.

```
#!/bin/bash

CURL="curl --silent -k"
HOST=$(curl -s http://169.254.169.254/latest/meta-data/local-hostname)

admin_token() {
    local user=jovyan
    local pwd=jupyter
    local token=$($CURL https://$HOST:9443/hub/api/authorizations/token \
        -d "{\"username\":\"$user\", \"password\":\"$pwd\"}" | jq ".token")
    if [[ $token != null ]]; then
        token=$(echo $token | sed 's/"//g')
    else
        echo "Unable to get Jupyter API Token."
        exit 1
    fi
    echo $token
}

# Get Jupyter Admin token
token=$(admin_token)

# Get list of Jupyter users
users=$(curl -XGET -s -k https://$HOST:9443/hub/api/users \
 -H "Authorization: token $token" | jq '.[].name' | sed 's/"//g')

# Create HDFS home dir 
for user in ${users[@]}; 
do
 echo "Create hdfs home dir for $user"
 hadoop fs -mkdir /user/$user
 hadoop fs -chmod 777 /user/$user
done
```