

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.

# Metastore-Konfiguration für EMR Serverless
<a name="metastore-config"></a>

Ein *Hive-Metastore* ist ein zentraler Ort, an dem Strukturinformationen zu Ihren Tabellen gespeichert werden, einschließlich Schemas, Partitionsnamen und Datentypen. Mit EMR Serverless können Sie diese Tabellenmetadaten in einem Metastore speichern, der Zugriff auf Ihre Jobs hat.

Sie haben zwei Optionen für einen Hive-Metastore:
+ Der AWS Glue-Datenkatalog
+ Ein externer Apache Hive-Metastore

## Den AWS Glue-Datenkatalog als Metastore verwenden
<a name="glue-metastore"></a>

Sie können Ihre Spark- und Hive-Jobs so konfigurieren, dass sie den AWS Glue-Datenkatalog als Metastore verwenden. Wir empfehlen diese Konfiguration, wenn Sie einen persistenten Metastore oder einen Metastore benötigen, der von verschiedenen Anwendungen, Diensten oder gemeinsam genutzt wird. AWS-Konten Weitere Informationen zum Datenkatalog finden Sie unter [Füllen des AWS Glue-Datenkatalogs](https://docs.aws.amazon.com/glue/latest/dg/populate-data-catalog.html). Informationen zu den Preisen von AWS Glue finden Sie unter [AWS Glue-Preise](https://aws.amazon.com/glue/pricing).

Sie können Ihren EMR Serverless-Job so konfigurieren, dass er den AWS Glue-Datenkatalog entweder in derselben AWS-Konto Anwendung oder in einer anderen verwendet. AWS-Konto

### Den AWS Glue-Datenkatalog konfigurieren
<a name="glue-metastore-configure"></a>

Um den Datenkatalog zu konfigurieren, wählen Sie aus, welchen Typ von EMR Serverless-Anwendung Sie verwenden möchten.

------
#### [ Spark ]

Wenn Sie EMR Studio verwenden, um Ihre Jobs mit EMR Serverless Spark-Anwendungen auszuführen, ist der AWS Glue-Datenkatalog der Standard-Metastore.

Wenn Sie SDKs oder verwenden AWS CLI, stellen Sie die `spark.hadoop.hive.metastore.client.factory.class` Konfiguration `com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory` in den `sparkSubmit` Parametern Ihrer Jobausführung auf ein. Das folgende Beispiel zeigt, wie Sie den Datenkatalog mit dem konfigurieren AWS CLI.

```
aws emr-serverless start-job-run \
    --application-id application-id \
    --execution-role-arn job-role-arn \
    --job-driver '{
        "sparkSubmit": {
            "entryPoint": "s3://amzn-s3-demo-bucket/code/pyspark/extreme_weather.py",
            "sparkSubmitParameters": "--conf spark.hadoop.hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory --conf spark.driver.cores=1 --conf spark.driver.memory=3g --conf spark.executor.cores=4 --conf spark.executor.memory=3g"
        }
    }'
```

Alternativ können Sie diese Konfiguration festlegen, wenn Sie `SparkSession` in Ihrem Spark-Code einen neuen erstellen.

```
from pyspark.sql import SparkSession

spark = (
    SparkSession.builder.appName("SparkSQL")
    .config(
        "spark.hadoop.hive.metastore.client.factory.class",
        "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory",
    )
    .enableHiveSupport()
    .getOrCreate()
)

# we can query tables with SparkSQL
spark.sql("SHOW TABLES").show()

# we can also them with native Spark
print(spark.catalog.listTables())
```

------
#### [ Hive ]

Für EMR Serverless Hive-Anwendungen ist der Datenkatalog der Standard-Metastore. Das heißt, wenn Sie Jobs auf einer EMR Serverless Hive-Anwendung ausführen, zeichnet Hive Metastore-Informationen im Datenkatalog genauso auf wie Ihre Anwendung. AWS-Konto Sie benötigen keine Virtual Private Cloud (VPC), um den Datenkatalog als Metastore zu verwenden.

Um auf die Hive-Metastore-Tabellen zuzugreifen, fügen Sie die erforderlichen AWS Glue-Richtlinien hinzu, die unter [Einrichten von IAM-Berechtigungen](https://docs.aws.amazon.com/glue/latest/dg/getting-started-access.html) für Glue beschrieben sind. AWS 

------

### Kontoübergreifenden Zugriff für EMR Serverless und AWS Glue Data Catalog konfigurieren
<a name="glue-metastore-cross-account"></a>

Um den kontenübergreifenden Zugriff für EMR Serverless einzurichten, melden Sie sich zunächst bei folgenden Konten an: AWS-Konten
+ `AccountA`— Und AWS-Konto wo Sie eine serverlose EMR-Anwendung erstellt haben.
+ `AccountB`— Ein AWS-Konto , der einen AWS Glue-Datenkatalog enthält, auf den Ihr EMR Serverless-Job zugreifen soll. 

1. Stellen Sie sicher, dass ein Administrator oder eine andere autorisierte Person eine Ressourcenrichtlinie an den Datenkatalog in `AccountB` anhängt. `AccountB` Diese Richtlinie gewährt `AccountA` spezifische kontoübergreifende Berechtigungen zur Ausführung von Vorgängen mit Ressourcen im `AccountB` Katalog.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "glue:GetDatabase",
           "glue:CreateDatabase",
           "glue:GetDataBases",
           "glue:CreateTable",
           "glue:GetTable",
           "glue:UpdateTable",
           "glue:DeleteTable",
           "glue:GetTables",
           "glue:GetPartition",
           "glue:GetPartitions",
           "glue:CreatePartition",
           "glue:BatchCreatePartition",
           "glue:GetUserDefinedFunctions"
         ],
         "Resource": [
           "arn:aws:glue:*:123456789012:catalog"
         ],
         "Sid": "AllowGLUEGetdatabase"
       }
     ]
   }
   ```

------

1. Fügen Sie der Runtime-Rolle EMR Serverless Job eine IAM-Richtlinie hinzu, `AccountA` damit diese Rolle auf Datenkatalogressourcen in zugreifen kann. `AccountB`

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "glue:GetDatabase",
           "glue:CreateDatabase",
           "glue:GetDataBases",
           "glue:CreateTable",
           "glue:GetTable",
           "glue:UpdateTable",
           "glue:DeleteTable",
           "glue:GetTables",
           "glue:GetPartition",
           "glue:GetPartitions",
           "glue:CreatePartition",
           "glue:BatchCreatePartition",
           "glue:GetUserDefinedFunctions"
         ],
         "Resource": [
           "arn:aws:glue:*:123456789012:catalog"
         ],
         "Sid": "AllowGLUEGetdatabase"
       }
     ]
   }
   ```

------

1.  Starten Sie Ihren Job Run. Dieser Schritt unterscheidet sich je `AccountA` nach EMR Serverless-Anwendungstyp geringfügig. 

------
#### [ Spark ]

   Übergeben Sie die `spark.hadoop.hive.metastore.glue.catalogid` Eigenschaft an, `sparkSubmitParameters` wie im folgenden Beispiel gezeigt. *`AccountB-catalog-id`*Ersetzen Sie es durch die ID des Datenkatalogs in`AccountB`.

   ```
   aws emr-serverless start-job-run \
   --application-id "application-id" \
   --execution-role-arn "job-role-arn" \
   --job-driver '{
       "sparkSubmit": {
           "entryPoint": "s3://amzn-s3-demo-bucket/scripts/test.py",
            "sparkSubmitParameters": "--conf spark.hadoop.hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory --conf spark.hadoop.hive.metastore.glue.catalogid=AccountB-catalog-id --conf spark.executor.cores=1 --conf spark.executor.memory=1g --conf spark.driver.cores=1 --conf spark.driver.memory=1g --conf spark.executor.instances=1"
       }
     }' \
   --configuration-overrides '{
       "monitoringConfiguration": {
       "s3MonitoringConfiguration": {
       "logUri": "s3://amzn-s3-demo-bucket/logs/"
       }
     }
   }'
   ```

------
#### [ Hive ]

   Stellen Sie die `hive.metastore.glue.catalogid` Eigenschaft in der `hive-site` Klassifizierung ein, wie im folgenden Beispiel gezeigt. *`AccountB-catalog-id`*Ersetzen Sie es durch die ID des Datenkatalogs in`AccountB`.

   ```
   aws emr-serverless start-job-run \
   --application-id "application-id" \
   --execution-role-arn "job-role-arn" \
   --job-driver '{
       "hive": {
       "query": "s3://amzn-s3-demo-bucket/hive/scripts/create_table.sql",
       "parameters": "--hiveconf hive.exec.scratchdir=s3://amzn-s3-demo-bucket/hive/scratch --hiveconf hive.metastore.warehouse.dir=s3://amzn-s3-demo-bucket/hive/warehouse"
       }
   }' \
   --configuration-overrides '{
       "applicationConfiguration": [{
           "classification": "hive-site",
           "properties": {
               "hive.metastore.glue.catalogid": "AccountB-catalog-id"
           }
       }]
   }'
   ```

------

### Überlegungen zur Verwendung des AWS Glue-Datenkatalogs
<a name="glue-metastore-considerations"></a>

Sie können Ihren JARs `ADD JAR` Hive-Skripten Hilfsmittel hinzufügen. Weitere Überlegungen finden Sie unter [Überlegungen zur Verwendung des AWS Glue-Datenkatalogs](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hive-metastore-glue.html#emr-hive-glue-considerations-hive). 