Be-Daten mit Hive, S3, EMR und Partitionen Wiederherstellen

GELÖST: Siehe Update #2 unten für die 'Lösung' dieses Problems.

~~~~~~~

In s3 habe ich einige log*.gz-Dateien gespeichert, die in einer verschachtelten Verzeichnisstruktur wie:

s3://($BUCKET)/y=2012/m=11/d=09/H=10/

Ich bin versucht zu laden, diese in die Hive auf " Elastic Map Reduce (EMR), mit einem multi-level-partition-spec wie:

create external table logs (content string)
partitioned by (y string, m string, d string, h string)
location 's3://($BUCKET)';

Erstellung der Tabelle funktioniert. Ich habe dann den Versuch der Wiederherstellung werden alle vorhandenen Partitionen:

alter table logs recover partitions;

Diese scheint zu funktionieren und es nicht einen Drilldown durch meine s3-Struktur und fügen Sie alle verschiedenen Ebenen von Verzeichnissen:

hive> show partitions logs;
OK
y=2012/m=11/d=06/h=08
y=2012/m=11/d=06/h=09
y=2012/m=11/d=06/h=10
y=2012/m=11/d=06/h=11
y=2012/m=11/d=06/h=12
y=2012/m=11/d=06/h=13
y=2012/m=11/d=06/h=14
y=2012/m=11/d=06/h=15
y=2012/m=11/d=06/h=16
...

So scheint es, dass Hive-sehen und interpretieren in meine layout-Datei erfolgreich. Jedoch keine tatsächlichen Daten überhaupt geladen wird. Wenn ich versuche, eine einfache Zählung oder wählen Sie * aus, ich bekomme nichts:

hive> select count(*) from logs;
...
OK
0

hive> select * from logs limit 10;
OK

hive> select * from logs where y = '2012' and m = '11' and d = '06' and h='16' limit 10;
OK

Gedanken? Fehlen mir einige zusätzliche Kommandos zum laden von Daten über die Wiederherstellung der Partitionen?

Wenn ich manuell hinzufügen einer partition mit einer expliziten Stelle, dann funktioniert:

alter table logs2 add partition (y='2012', m='11', d='09', h='10') location 's3://($BUCKET)/y=2012/m=11/d=09/H=10/'

Kann ich einfach ein Skript schreiben, um dies zu tun, aber es fühlt sich wie ich ' m fehlt etwas grundlegendes w.r.t 'Partitionen wiederherstellen'.

UPDATE #1

Durch eine brillante und scharfe Beobachtung von Joe K in einem Kommentar unten, ich denke, dass die groß-und Kleinschreibung Probleme könnten hier mit einbezogen werden.

Die Dateien sind definitiv organisiert, wie der folgende Pfad spec, mit einem aktivierten H (ich denke, das könnte einige kräftig zu nach ISO8601-Formatierung):

s3://($BUCKET)/y=2012/m=11/d=09/H=10/

Erstelle ich meine externe Tabelle mit einer partition-spec, der hat die richtige groß - /Kleinschreibung:

partitioned by (y string, m string, d string, H string)

(Man beachte das "H"). Ich mache eine Wiederherstellung von Partitionen, die nicht scheinen, um recurse durch die Verzeichnisse, und finden Sie die Partitionen entsprechend, aber irgendwie (trotz der Verwendung von 'H' in alle lehrreich Orten so weit), es scheint sich tatsächlich, dass Hive speichert es als eine untere case 'h':

hive> show partitions logs;
OK
y=2012/m=11/d=06/h=08

(Beachten Sie das 'h'). So scheint es, die Struktur ist in der Lage, entdecken Sie die Partitionen, aber dann speichert Sie in einen Kleinbuchstaben form ... Später, wenn es geht, um nach Daten zu suchen, diese Pfade sind (natürlich) leer, weil S3 ist groß-und Kleinschreibung.

Werde ich, um meine Daten in ein all-Kleinbuchstaben-Verzeichnis-Struktur und sehen, ob das funktioniert...

UPDATE #2

In der Tat, ich habe bestätigt, dass die Großbuchstaben " H " als Volume-Bezeichnung (in der s3-Datei-layout), war das problem hier. So weit wie ich kann sagen, dies ist das, was passiert war:

  • Mein layout auf S3 hatte der groß-und Kleinschreibung partition name (H=)
  • Ausgeführt WIEDERHERSTELLEN von PARTITIONEN korrekt erkennt diese Partitionen...
  • Aber dann sind Sie intern gespeichert, als Kleinbuchstaben (h)

Den "Partitionen wiederherstellen" - Befehl ist eine Erweiterung von Hive " von Amazon. Ich vermute stark, dass der Fehler in dieser Komponente. Meines Wissens native Hive hat kein Konzept für die Erkundung einer Datei, die root-partition für die Entdeckung...

  • Im Falle jemand anderes Wagen, auf diesem Weg, hier sind zwei sehr hilfreiche blog-posts: pkghosh.wordpress.com/2012/05/06/hive-plays-well-with-json und sites.google.com/a/khanacademy.org/forge/technical/data_n/...
  • Eine Sache, die ich bin zu bemerken ist, dass Ihre Stunde partition Spalte hat verschiedene Fälle in verschiedenen teilen der post. Könnte das Teil des Problems? Ich bin mir nicht sicher, welche Teile von S3/Hive sind oder sind nicht case-sensitive. Auch, was ist die Ausgabe, wenn Sie describe formatted logs2 partition (y='2012', m='11', d='06', h='08')?
  • Joe! Danke!!! Ich denke, Sie sind auf etwas. Ich bin auf jeden Fall jetzt da Verhalten, das ist symptomatisch für die groß-und Kleinschreibung Probleme. Ich werde zu aktualisieren, meine Frage mit mehr info.
  • Joe - ich verdanke Sie der Akzeptieren dies. Bitte fügen Sie einer Antwort über die groß-und Kleinschreibung und ich werde Haken es. Nochmals vielen Dank.
  • Danke, hat mir Geholfen
InformationsquelleAutor Mike Repass | 2012-11-10
Schreibe einen Kommentar