

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.

# Unterschiede und Überlegungen für Hive auf Amazon EMR
<a name="emr-hive-differences"></a>

## Unterschiede zwischen Apache Hive in Amazon EMR und Apache Hive
<a name="emr-hive-apache-diff"></a>

[In diesem Abschnitt werden die Unterschiede zwischen Hive auf Amazon EMR und den Standardversionen von Hive beschrieben, die unter http://svn.apache verfügbar sind. org/viewvc/hive/branches/.](http://svn.apache.org/viewvc/hive/branches/) 

### Hive-Autorisierung
<a name="emr-hive-authorization"></a>

 Amazon EMR unterstützt [Hive-Autorisierung](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Authorization) für HDFS, aber nicht für EMRFS und Amazon S3. Amazon-EMR-Cluster werden standardmäßig mit deaktivierter Autorisierung ausgeführt.

### Dateizusammenführung mit Hive in Amazon S3
<a name="emr-hive-filemerge"></a>

Apache Hive führt kleine Dateien am Ende eines Map-Auftrags zusammen, wenn `hive.merge.mapfiles` auf "true" gesetzt ist und die Zusammenführung nur dann ausgelöst wird, wenn die durchschnittliche Ausgabegröße des Auftrags kleiner als die Einstellung `hive.merge.smallfiles.avgsize` ist. Amazon EMR; Hive verhält sich genau gleich, wenn sich der Endausgabepfad in HDFS befindet. Wenn sich der Ausgabepfad in Amazon S3 befindet, wird der Parameter `hive.merge.smallfiles.avgsize` jedoch ignoriert. In diesem Fall wird die Zusammenführungsaufgabe immer dann ausgelöst, wenn `hive.merge.mapfiles` auf `true` gesetzt ist.

### ACID-Transaktionen und Amazon S3
<a name="emr-hive-acid"></a>

Amazon EMR 6.1.0 und höher unterstützt Hive-ACID-Transaktionen (Atomicity, Consistency, Isolation, Durability), sodass sie den ACID-Eigenschaften einer Datenbank entsprechen. Mit diesem Feature können Sie INSERT-, UPDATE-, DELETE- und MERGE-Operationen in Hive-Tabellen mit Daten in Amazon Simple Storage Service (Amazon S3) ausführen.

### Hive Live Long and Process (LLAP)
<a name="emr-hive-LLAP"></a>

Die [LLAP-Funktionalität](https://cwiki.apache.org/confluence/display/Hive/LLAP), die in Version 2.0 von Standard-Apache Hive hinzugefügt wurde, wird in Hive 2.1.0 für Amazon-EMR-Version 5.0 nicht unterstützt.

Amazon-EMR-Version 6.0.0 und höher unterstützt die Live Long and Process (LLAP)-Funktionalität für Hive. Weitere Informationen finden Sie unter [Verwenden von Hive LLAP](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hive-llap.html). 

## Hive-Unterschiede zwischen Amazon-EMR-Version 4.x und 5.x
<a name="emr-hive-diff"></a>

In diesem Abschnitt werden die Unterschiede behandelt, die Sie berücksichtigen sollten, bevor Sie eine Hive-Implementierung von Hive Version 1.0.0 in Amazon-EMR-Version 4.x zu Hive 2.x in Amazon-EMR-Version 5.x migrieren.

### Betriebliche Unterschiede und Überlegungen
<a name="emr-hive-diffs-ops"></a>
+ **Die Unterstützung für [ACID-Transaktionen (Atomizität, Konsistenz, Isolation und Dauerhaftigkeit)](https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions) wurde ergänzt:** Dieser Unterschied zwischen Hive 1.0.0 für Amazon EMR 4.x und Standard-Apache-Hive wurde entfernt.
+ **Direkte Schreibvorgänge in Amazon S3 beseitigt:** Dieser Unterschied zwischen Hive 1.0.0 auf Amazon EMR und dem Standard-Apache-Hive wurde beseitigt. Hive 2.1.0 in Amazon-EMR-Version 5.x erstellt, liest und schreibt jetzt aus und zu temporären Dateien, die in Amazon S3 gespeichert werden. Daher müssen Sie bei Lese- und Schreibvorgängen für dieselbe Tabelle keine temporäre Tabelle mehr im lokalen HDFS-Dateisystem des Clusters erstellen, um das Problem zu umgehen. Wenn Sie versionierte Buckets verwenden, stellen Sie sicher, dass diese temporären Dateien wie unten beschrieben verwaltet werden.
+ **Verwalten Sie temporäre Dateien, wenn Sie versionierte Amazon-S3-Buckets verwenden:** Wenn Sie Hive-Abfragen ausführen, bei denen das Ziel der generierten Daten Amazon S3 ist, werden viele temporäre Dateien und Verzeichnisse erstellt. Hierbei handelt es sich, wie bereits beschrieben, um ein neues Verhalten. Wenn Sie versionierte S3-Buckets verwenden, wird Amazon S3 von diesen temporären Dateien überfrachtet und es fallen Kosten an, wenn sie nicht gelöscht werden. Passen Sie Ihre Lebenszyklusregeln an, damit Daten mit einem `/_tmp`-Präfix nach einem kurzen Zeitraum, wie z. B. nach fünf Tagen, gelöscht werden. Weitere Informationen finden Sie unter [Angeben einer Lebenszykluskonfiguration](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html).
+ **Aktualisierung von Log4j auf log4j 2:** Wenn Sie log4j verwenden, müssen Sie aufgrund dieser Aktualisierung möglicherweise Ihre Protokollierungskonfiguration ändern. Weitere Informationen finden Sie unter [Apache log4j 2](http://logging.apache.org/log4j/2.x/).

### Unterschiede und Überlegungen im Bezug auf Leistung
<a name="emr-hive-diffs-perf"></a>
+ **Leistungsunterschiede zu Tez:** Mit Amazon EMR Version 5.x ist Tez die Standard-Ausführungs-Engine für Hive anstelle von. MapReduce Tez bietet eine verbesserte Leistung für die meisten Workflows.
+ **Tabellen mit zahlreichen Partitionen:** Abfragen, die eine große Anzahl dynamischer Partitionen generieren, schlagen möglicherweise fehl. Außerdem kann die Ausführung von Abfragen, die aus Tabellen mit vielen Partitionen auswählen, länger dauern als erwartet. Beispielsweise kann eine Auswahl aus 100.000 Partitionen 10 Minuten oder länger dauern.

## Zusätzliche Features von Hive in Amazon EMR
<a name="emr-hive-additional-features"></a>

Amazon EMR erweitert Hive um neue Funktionen, die die Hive-Integration mit anderen AWS Diensten unterstützen, z. B. die Fähigkeit, von Amazon Simple Storage Service (Amazon S3) und DynamoDB zu lesen und in diese zu schreiben.

### Variablen in Hive
<a name="emr-hive-variables"></a>

 Sie können Variablen in Ihre Skripts aufnehmen, indem Sie das Dollarzeichen und geschweifte Klammern verwenden. 

```
add jar ${LIB}/jsonserde.jar
```

 Sie übergeben die Werte dieser Variablen an Hive in der Befehlszeile mit dem Parameter `-d`, wie im folgenden Beispiel dargestellt: 

```
-d LIB=s3://elasticmapreduce/samples/hive-ads/lib
```

 Sie können die Werte auch an Schritte übergeben, die Hive-Skripts ausführen. 

**So übergeben Sie Variablenwerte mithilfe der Konsole an Hive-Schritte**

1. Öffnen Sie die Amazon EMR-Konsole unter [https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr/).

1. Wählen Sie **Cluster erstellen**.

1. Wählen Sie im Abschnitt **Steps (Schritte)** in **Add Step (Schritt hinzufügen)** die Option **Hive Program (Hive-Programm)** in der Liste und **Configure and add (Konfigurieren und hinzufügen)** aus.

1.  Geben Sie im Dialogfeld **Add Step (Schritt hinzufügen)** die Parameter mithilfe der folgenden Tabelle als Leitfaden an. Wählen Sie anschließend **Add (Hinzufügen)** aus.     
[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/emr/latest/ReleaseGuide/emr-hive-differences.html)

1. Wählen Sie die Werte wie notwendig und anschließend **Create cluster (Cluster erstellen)** aus.

**Um Variablenwerte an Hive-Schritte zu übergeben, verwenden Sie AWS CLI**

Um Variablenwerte mithilfe von an Hive-Schritte zu übergeben AWS CLI, verwenden Sie den `--steps` Parameter und fügen Sie eine Argumentliste hinzu.
+ 
**Anmerkung**  
Linux-Zeilenfortsetzungszeichen (\\) sind aus Gründen der Lesbarkeit enthalten. Sie können entfernt oder in Linux-Befehlen verwendet werden. Entfernen Sie sie unter Windows oder ersetzen Sie sie durch ein Caret-Zeichen (^).

  ```
  aws emr create-cluster --name "{{Test cluster}}" --release-label {{emr-7.13.0}} \
  --applications Name={{Hive}} Name={{Pig}} --use-default-roles --ec2-attributes KeyName={{myKey}} --instance-type {{m5.xlarge}} --instance-count {{3}} \
  --steps Type={{Hive}},Name="{{Hive Program}}",ActionOnFailure={{CONTINUE}},Args=[-f,{{s3://elasticmapreduce/samples/hive-ads/libs/response-time-stats.q}},-d,INPUT={{s3://elasticmapreduce/samples/hive-ads/tables}},-d,OUTPUT={{s3://amzn-s3-demo-bucket/hive-ads/output/}},-d,{{SAMPLE}}={{s3://elasticmapreduce/samples/hive-ads/}}]
  ```

  Weitere Informationen zur Verwendung von Amazon EMR-Befehlen finden Sie AWS CLI unter[https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr).

**So übergeben Sie Variablenwerte mithilfe des Java SDK an Hive-Schritte**
+ Im folgenden Beispiel wird gezeigt, wie Variablen mithilfe des SDK an Schritte übergeben werden. Weitere Informationen finden Sie unter [Class StepFactory](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/elasticmapreduce/util/StepFactory.html) in der *AWS SDK für Java API-Referenz.* 

  ```
  StepFactory stepFactory = new StepFactory();
  
     StepConfig runHive = new StepConfig()
       .withName("Run Hive Script")
       .withActionOnFailure("TERMINATE_JOB_FLOW")
       .withHadoopJarStep(stepFactory.newRunHiveScriptStep(“s3://amzn-s3-demo-bucket/script.q”,
        Lists.newArrayList(“-d”,”LIB= s3://elasticmapreduce/samples/hive-ads/lib”));
  ```

### Amazon-EMR-Hive-Abfragen zur Unterstützung partieller DynamoDB-Schemas
<a name="emr-hive-partial-schema"></a>

Amazon EMR Hive bietet maximale Flexibilität beim Abfragen von DynamoDB-Tabellen, da Sie eine Teilmenge von Spalten angeben können, nach denen Sie Daten filtern können, und nicht alle Spalten in die Abfrage einschließen müssen. Diese Technik der Teilschemaabfrage ist effektiv, wenn Sie ein Sparse-Datenbankschema vorliegen haben und Datensätze nach wenigen Spalten filtern möchten, z. B. nach Zeitstempel. 

 Im folgenden Beispiel wird gezeigt, wie Sie eine Hive-Abfrage für folgende Aufgaben verwenden: 
+ Erstellen Sie eine DynamoDB-Tabelle.
+ Wählen Sie eine Teilmenge von Elementen (Zeilen) in DynamoDB aus und grenzen Sie die Daten basierend auf bestimmten Spalten weiter ein.
+ Kopieren Sie die Ergebnisdaten in Amazon S3. 

```
DROP TABLE dynamodb; 
DROP TABLE s3;

CREATE EXTERNAL TABLE dynamodb(hashKey STRING, recordTimeStamp BIGINT, fullColumn map<String, String>)
    STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
    TBLPROPERTIES ( 
     "dynamodb.table.name" = "myTable",
     "dynamodb.throughput.read.percent" = ".1000", 
     "dynamodb.column.mapping" = "hashKey:HashKey,recordTimeStamp:RangeKey"); 

CREATE EXTERNAL TABLE s3(map<String, String>)
     ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
     LOCATION 's3://bucketname/path/subpath/';

INSERT OVERWRITE TABLE s3 SELECT item fullColumn FROM dynamodb WHERE recordTimeStamp < "2012-01-01";
```

Die folgende Tabelle zeigt die Abfragesyntax für die Auswahl einer beliebigen Kombination von Elementen aus DynamoDB.


| Abfragebeispiel: | Ergebnisbeschreibung | 
| --- | --- | 
| WÄHLEN SIE \* AUS{{table\_name}}; | Wählt alle Elemente (Zeilen) in einer bestimmten Tabelle aus und bezieht Daten aus allen für diese Elemente verfügbaren Spalten ein. | 
| WÄHLEN SIE \* AUS {{table\_name}} WOHER {{field\_name}} ={{value}}; | Wählt einige Elemente (Zeilen) in einer bestimmten Tabelle aus und bezieht Daten aus allen für diese Elemente verfügbaren Spalten ein. | 
| WÄHLEN SIE{{column1\_name}},{{column2\_name}}, {{column3\_name}} AUS{{table\_name}}; | Wählt alle Elemente (Zeilen) in einer bestimmten Tabelle aus und bezieht Daten aus einigen für diese Elemente verfügbaren Spalten ein. | 
| WÄHLEN SIE {{column1\_name}}{{column2\_name}},, {{column3\_name}} {{table\_name}} WOHER {{field\_name}} ={{value}}; | Wählt einige Elemente (Zeilen) in einer bestimmten Tabelle aus und bezieht Daten aus einigen für diese Elemente verfügbaren Spalten ein. | 

### Daten zwischen DynamoDB-Tabellen in verschiedenen Regionen kopieren AWS
<a name="emr-hive-cross-region-ddb-copy"></a>

Amazon EMR Hive stellt die `dynamodb.region`-Eigenschaft bereit, die Sie pro DynamoDB-Tabelle festlegen können. Wenn `dynamodb.region` in zwei Tabellen unterschiedlich festgelegt ist, erscheinen alle Daten, die Sie zwischen den Tabellen kopieren, automatisch in den angegebenen Regionen.

 Das folgende Beispiel zeigt das Erstellen einer DynamoDB-Tabelle mit einem Hive-Skript, das die `dynamodb.region`-Eigenschaft festlegt:

**Anmerkung**  
Die tabellenspezifischen Regionseigenschaften überschreiben die globalen Hive-Eigenschaften.

```
CREATE EXTERNAL TABLE dynamodb(hashKey STRING, recordTimeStamp BIGINT, map<String, String> fullColumn)
    STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
    TBLPROPERTIES ( 
     "dynamodb.table.name" = "myTable",
     "dynamodb.region" = "eu-west-1", 
     "dynamodb.throughput.read.percent" = ".1000", 
     "dynamodb.column.mapping" = "hashKey:HashKey,recordTimeStamp:RangeKey");
```

### Festlegen von DynamoDB-Durchsatzwerten pro Tabelle
<a name="emr-hive-set-ddb-throughput"></a>

Amazon EMR Hive ermöglicht es Ihnen, DynamoDB readThroughputPercent und writeThroughputPercent Einstellungen pro Tabelle in der Tabellendefinition festzulegen. Das folgende Amazon-EMR-Hive-Skript zeigt, wie die Durchsatzwerte festgelegt werden. Weitere Informationen zu DynamoDB-Durchsatzwerten finden Sie unter [Angeben von Lese- und Schreibanforderungen für Tabellen](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithDDTables.html#ProvisionedThroughput). 

```
CREATE EXTERNAL TABLE dynamodb(hashKey STRING, recordTimeStamp BIGINT, map<String, String> fullColumn)
    STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
    TBLPROPERTIES ( 
     "dynamodb.table.name" = "myTable",
     "dynamodb.throughput.read.percent" = ".4",
     "dynamodb.throughput.write.percent" = "1.0",
     "dynamodb.column.mapping" = "hashKey:HashKey,recordTimeStamp:RangeKey");
```