Hive-Anwendungsmerkmale bei früheren AMI-Versionen von Amazon EMR - Amazon EMR

Hive-Anwendungsmerkmale bei früheren AMI-Versionen von Amazon EMR

Protokolldateien

Beim Verwenden der AMI-Versionen 2.x und 3.x von Amazon EMR werden Hive-Protokolle in /mnt/var/log/apps/ gespeichert. Zur Unterstützung gleichzeitiger Versionen von Hive bestimmt die Hive-Version, die Sie ausführen, den Protokolldateinamen, wie in der folgenden Tabelle dargestellt.

Hive-Version Protokolldateiname
0.13.1 hive.log
Anmerkung

Ab dieser Version verwendet Amazon EMR den nicht versionierten Dateinamen hive.log. Nebenversionen verwenden denselben Protokollspeicherort wie die Hauptversion.

0.11.0 hive_0110.log
Anmerkung

Nebenversionen von Hive 0.11.0, z. B. 0.11.0.1, nutzen denselben Speicherort für ihre Protokolldatei wie Hive 0.11.0.

0.8.1 hive_081.log
Anmerkung

Nebenversionen von Hive 0.8.1, z. B. Hive 0.8.1.1, nutzen denselben Speicherort für ihre Protokolldatei wie Hive 0.8.1.

0.7.1 hive_07_1.log
Anmerkung

Nebenversionen von Hive 0.7.1, z. B. Hive 0.7.1.3 und Hive 0.7.1.4, nutzen denselben Speicherort für ihre Protokolldatei wie Hive 0.7.1.

0.7 hive_07.log
0.5 hive_05.log
0.4 hive.log

Split-Eingabe-Funktionen

Verwenden Sie Folgendes zum Implementieren von Split-Eingabe-Funktionen mit Hive-Versionen niedriger als 0.13.1 (Amazon-EMR-AMI-Versionen vor 3.11.0):

hive> set hive.input.format=org.apache.hadoop.hive.ql.io.HiveCombineSplitsInputFormat; hive> set mapred.min.split.size=100000000;

Diese Funktionalität wurde mit Hive 0.13.1 eingestellt. Verwenden Sie folgende Einstellung, um dieselbe Funktionalität wie beim Split-Eingabeformat in AMI-Version 3.11.0 von Amazon EMR zu erhalten:

set hive.hadoop.supports.splittable.combineinputformat=true;

Thrift-Service-Ports

Thrift ist ein RPC-Framework, das ein kompaktes binäres Serialisierungsformat definiert. Es wird dazu verwendet, Datenstrukturen für spätere Analysen beizubehalten. In der Regel konfiguriert Hive die Server für den Betrieb an folgenden Ports.

Hive-Version Port-Nummer
Hive 0.13.1 10000
Hive 0.11.0 10004
Hive 0.8.1 10003
Hive 0.7.1 10002
Hive 0.7 10001
Hive 0.5 10000

Weitere Informationen über Thrift-Services finden Sie unter http://wiki.apache.org/thrift/.

Verwenden von Hive zum Wiederherstellen von Partitionen

Amazon EMR enthält eine Anweisung in der Hive-Abfragesprache, mit der die Partitionen einer Tabelle aus den Tabellendaten in Amazon S3 wiederhergestellt werden. Im folgenden Beispiel ist diese Anweisung dargestellt.

CREATE EXTERNAL TABLE (json string) raw_impression PARTITIONED BY (dt string) LOCATION 's3://elastic-mapreduce/samples/hive-ads/tables/impressions'; ALTER TABLE logs RECOVER PARTITIONS;

Die Partitionsverzeichnisse und -daten müssen sich den dem in der Tabellendefinition angegebenem Speicherort befinden und dem Hive-Standard entsprechend benannt sein: z. B. dt=2009-01-01.

Anmerkung

Nach der Version Hive 0.13.1 wird diese Funktion nativ mit msck repair table unterstützt. Daher wird recover partitions nicht unterstützt. Weitere Informationen finden Sie unter https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL.

Übergeben einer Hive-Variable an ein Skript

Um eine Variable mithilfe der AWS CLI an einen Hive-Schritt zu übergeben, geben Sie den folgenden Befehl ein. Ersetzen Sie myKey durch den Namen Ihres EC2-Schlüsselpaares und mybucket durch Ihren Bucket-Namen. In diesem Beispiel ist SAMPLE ein Variablenwert, dem der Switch -d vorangestellt wird. Diese Variable ist im Hive-Skript definiert als: ${SAMPLE}.

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" --ami-version 3.9 \ --applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.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://mybucket/hive-ads/output/,\ -d,SAMPLE=s3://elasticmapreduce/samples/hive-ads/]

Angeben eines externen Metastore-Speicherorts

Das folgende Verfahren zeigt, wie Sie die Standardkonfigurationswerte für den Speicherort des Hive-Metastores überschreiben und einen Cluster mit dem neu konfigurierten Metastore-Speicherort starten.

So erstellen Sie einen Metastore außerhalb des EMR-Clusters
  1. Erstellen Sie eine MySQL- oder Aurora-Datenbank mit Amazon RDS.

    Weitere Informationen zum Erstellen einer Amazon-RDS-Datenbank finden Sie unter Erste Schritte mit Amazon RDS.

  2. Ändern Sie Ihre Sicherheitsgruppen, um JDBC-Verbindungen zwischen Ihrer Datenbank und der Sicherheitsgruppe ElasticMapReduce-Master zuzulassen.

    Informationen zum Ändern Ihrer Sicherheitsgruppen für den Zugriff finden Sie unter Amazon-RDS-Sicherheitsgruppen im Amazon-RDS-Benutzerhandbuch.

  3. Legen Sie die JDBC-Konfigurationswerte in hive-site.xml fest:

    1. Erstellen Sie eine hive-site.xml-Konfigurationsdatei, die folgende Informationen enthält:

      <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mariadb://hostname:3306/hive?createDatabaseIfNotExist=true</value> <description>JDBC connect string for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> <description>Username to use against metastore database</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>password</value> <description>Password to use against metastore database</description> </property> </configuration>

      Hostname ist die DNS-Adresse der Amazon-RDS-Instance, auf der die Datenbank ausgeführt wird. Username und Password sind die Anmeldeinformationen für Ihre Datenbank. Weitere Informationen zum Verbinden mit MySQL- und Aurora-Datenbank-Instances finden Sie unter Herstellen einer Verbindung mit einer DB-Instance auf der MySQL Databank Engine und Herstellen von einer Verbindung zu einem Aurora-DB-Cluster im Amazon-RDS-Benutzerhandbuch.

      Die JDBC-Treiber werden von Amazon EMR installiert.

      Anmerkung

      Die Werteigenschaft darf keine Leerzeichen oder Wagenrückläufe enthalten. Sie sollte in einer Zeile erscheinen.

    2. Speichern Sie die hive-site.xml-Datei in einem Speicherort in Amazon S3, z. B. unter s3://mybucket/hive-site.xml.

  4. Erstellen Sie einen Cluster, indem Sie den Amazon-S3-Speicherort der benutzerdefinierten Datei hive-site.xml angeben.

    Das folgende Beispiel zeigt einen AWS CLI-Befehl, der diese Aktion durchführt.

    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" --ami-version 3.10 \ --applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 \ --bootstrap-actions Name="Install Hive Site Configuration",\ Path="s3://region.elasticmapreduce/libs/hive/hive-script",\ Args=["--base-path","s3://elasticmapreduce/libs/hive","--install-hive-site",\ "--hive-site=s3://mybucket/hive-site.xml","--hive-versions","latest"]

Mit Hive über JDBC verbinden

Zum Herstellen einer Verbindung mit Hive über JDBC müssen Sie den JDBC-Treiber herunterladen und einen SQL-Client installieren. Das folgende Beispiel veranschaulicht die Verwendung von SQL Workbench/J zur Verbindung mit Hive über JDBC.

So laden Sie JDBC-Treiber herunter
  1. Laden Sie die entsprechenden Treiber für die Hive-Versionen herunter, auf die Sie zugreifen möchten. Entpacken Sie die Treiber. Die Hive-Version unterscheidet sich je nach dem beim Erstellen eines Amazon-EMR-Clusters ausgewählten AMI.

  2. Installieren Sie SQL Workbench/J. Weitere Informationen finden Sie unter Installieren und Starten von SQL Workbench/J im Benutzerhandbuch für SQL Workbench/J.

  3. Erstellen Sie einen SSH-Tunnel zum Cluster-Master-Knoten. Der Port für die Verbindung unterscheidet sich je nach Hive-Version. Beispielbefehle für ssh-Linux-Benutzer und PuTTY-Befehle für Windows-Benutzer finden Sie in den unten stehenden Tabellen.

    Linux-SSH-Befehle
    Hive-Version Befehl
    0.13.1 ssh -o ServerAliveInterval=10 -i path-to-key-file -N -L 10000:localhost:10000 hadoop@master-public-dns-name
    0.11.0 ssh -o ServerAliveInterval=10 -i path-to-key-file -N -L 10004:localhost:10004 hadoop@master-public-dns-name
    0.8.1 ssh -o ServerAliveInterval=10 -i path-to-key-file -N -L 10003:localhost:10003 hadoop@master-public-dns-name
    0.7.1 ssh -o ServerAliveInterval=10 -i path-to-key-file -N -L 10002:localhost:10002 hadoop@master-public-dns-name
    0.7 ssh -o ServerAliveInterval=10 -i path-to-key-file -N -L 10001:localhost:10001 hadoop@master-public-dns-name
    0.5 ssh -o ServerAliveInterval=10 -i path-to-key-file -N -L 10000:localhost:10000 hadoop@master-public-dns-name
    Windows-PuTTY-Tunneleinstellungen
    Hive-Version Tunneleinstellungen
    0.13.1 Source port (Quellport): 10000 Destination (Ziel): master-public-dns-name:10000
    0.11.0 Source port (Quellport): 10004 Destination (Ziel): master-public-dns-name:10004
    0.8.1 Source port (Quellport): 10003 Destination (Ziel): master-public-dns-name:10003
  4. Fügen Sie SQL Workbench den JDBC-Treiber hinzu.

    1. Klicken Sie im Dialogfeld Select Connection Profile (Verbindungsprofil auswählen) auf Manage Drivers (Treiber verwalten).

    2. Wählen Sie das Symbol (leere Seite) Create a new entry (Neuen Eintrag erstellen) aus.

    3. Geben Sie in das Feld Name Hive JDBC ein.

    4. Klicken Sie bei Library (Bibliothek) auf das Symbol Select the JAR file(s) (JAR-Datei(en) auswählen).

    5. Wählen Sie JAR-Dateien aus, wie in der folgenden Tabelle gezeigt.

      Hive-Treiberversion Hinzufügen von JAR-Dateien
      0.13.1
      hive_metastore.jar hive_service.jar HiveJDBC3.jar libfb303-0.9.0.jar libthrift-0.9.0.jar log4j-1.2.14.jar ql.jar slf4j-api-1.5.8.jar slf4j-log4j12-1.5.8.jar TCLIServiceClient.jar
      0.11.0
      hadoop-core-1.0.3.jar hive-exec-0.11.0.jar hive-jdbc-0.11.0.jar hive-metastore-0.11.0.jar hive-service-0.11.0.jar libfb303-0.9.0.jar commons-logging-1.0.4.jar slf4j-api-1.6.1.jar
      0.8.1
      hadoop-core-0.20.205.jar hive-exec-0.8.1.jar hive-jdbc-0.8.1.jar hive-metastore-0.8.1.jar hive-service-0.8.1.jar libfb303-0.7.0.jar libthrift-0.7.0.jar log4j-1.2.15.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar
      0.7.1
      hadoop-0.20-core.jar hive-exec-0.7.1.jar hive-jdbc-0.7.1.jar hive-metastore-0.7.1.jar hive-service-0.7.1.jar libfb303.jar commons-logging-1.0.4.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar
      0.7
      hadoop-0.20-core.jar hive-exec-0.7.0.jar hive-jdbc-0.7.0.jar hive-metastore-0.7.0.jar hive-service-0.7.0.jar libfb303.jar commons-logging-1.0.4.jar slf4j-api-1.5.6.jar slf4j-log4j12-1.5.6.jar
      0.5
      hadoop-0.20-core.jar hive-exec-0.5.0.jar hive-jdbc-0.5.0.jar hive-metastore-0.5.0.jar hive-service-0.5.0.jar libfb303.jar log4j-1.2.15.jar commons-logging-1.0.4.jar
    6. Wählen Sie im Dialogfeld Please select one driver (Bitte einen Treiber auswählen) einen Treiber gemäß der folgenden Tabelle aus und klicken Sie dann auf OK.

      Hive-Version Treiber-Klassenname
      0.13.1
      com.amazon.hive.jdbc3.HS2Driver
      0.11.0
      org.apache.hadoop.hive.jdbc.HiveDriver.jar
      0.8.1
      org.apache.hadoop.hive.jdbc.HiveDriver.jar
      0.7.1
      org.apache.hadoop.hive.jdbc.HiveDriver.jar
      0.7
      org.apache.hadoop.hive.jdbc.HiveDriver.jar
      0.5
      org.apache.hadoop.hive.jdbc.HiveDriver.jar
  5. Wenn Sie zum Dialogfeld Select Connection Profile (Verbindungsprofil auswählen) zurückkehren, stellen Sie sicher, dass das Dialogfeld Driver (Treiber) auf Hive JDBC festgelegt ist, und geben Sie die JDBC-Verbindungszeichenfolge im Feld URL gemäß der folgenden Tabelle ein.

    Hive-Version JDBC-Verbindungszeichenfolge
    0.13.1 jdbc:hive2://localhost:10000/default
    0.11.0 jdbc:hive://localhost:10004/default
    0.8.1 jdbc:hive://localhost:10003/default

    Wenn Ihr Cluster die AMI-Version 3.3.1 oder höher im Dialogfeld Select Connection Profile (Verbindungsprofil auswählen) verwendet, geben Sie hadoop in das Feld Username (Benutzername) ein.