2016-05-06 9 views
1
  1. Stack: Installierte HDP-2.3.2.0-2950 mit Ambari 2.1
  2. Die Quelle ist eine MS SQL-Datenbank von rund 1,6 TB und rund 25 Tabellen Das ultimative Ziel ist es, Überprüfen Sie, ob die vorhandenen Abfragen schneller auf dem HDP laufen können
  3. Es gibt keinen Luxus von Zeit und Verfügbarkeit, die Daten mehrmals zu importieren, daher muss der Import einmal durchgeführt werden und die Hive-Tabellen, Abfragen usw. müssen Versuchen Sie zum Beispiel, zuerst eine normale, partitionierte Tabelle in ORC zu erstellen. Wenn es nicht ausreicht, versuchen Sie Indizes und so weiter. Möglicherweise werden wir auch das Parkett Format auswerten und so weiter

4.As eine Lösung zu 4., habe ich mich entschlossen, zunächst die Tabellen auf HDFS in Avro-Format zum Beispiel zu importieren:Import zu HDFS oder Hive (direkt)

sqoop import --connect 'jdbc:sqlserver://server;database=dbname' --username someuser --password somepassword --as-avrodatafile --num-mappers 8 --table tablename --warehouse-dir /dataload/tohdfs/ --verbose 

Jetzt Ich plane, eine Hive-Tabelle zu erstellen, aber ich habe einige Fragen erwähnt here.

Meine Frage ist, dass alle oben genannten Punkte am sichersten sind (in Bezug auf die Zeit und nicht die HDFS etc.) Ansatz - zuerst auf HDFS bringen, Hive-Tabellen erstellen und experimentieren oder direkt in Hive importieren (ich weiß nicht, wenn ich nun diese Tabellen löschen und neu starten wollen, muss ich die Daten)

+0

Ich sehe einen Widerspruch zwischen diesen 2 Behauptungen: * "keine Zeit, Daten mehrmals zu importieren" * vs * "Zieltabellen müssen experimentiert werden ... Tabellen mit verschiedenen Optionen neu erstellen" *. Wenn Sie verschiedene SerDe (ORC, Parquet) mit verschiedenen Partitionierungsschemata ausprobieren möchten, müssen Sie die Hive-Tabellen neu erstellen und sie mehrmals neu laden. –

+0

Also ** was meinst du mit "Daten importieren" - du willst einen Speicherauszug im portablen Format (z. B. CSV) in HDFS erstellen, der oft als Quelle verwendet wird? Verwende 'Sqoop'. Oder möchten Sie, dass eine End-to-End-Lösung von SQL Server liest und Daten direkt in Ihr partitioniertes ORC/Parquet-Format lädt?Verwenden Sie 'Spark', die neueste Version kann parallel Laden wie Sqoop * (aber hüten Sie sich über einige Optionen, die nicht automatisch aus dem Metastore, wie Parkett-Komprimierung - und Partitionsverwaltung ist nicht einfach) * –

+0

Durch 'Daten importieren ', Ich meine' auf den sql-server zugreifen und daten auf hdfs laden ', dh ich kann machen, was ich mir in hive wünsche. Nein. von Zeiten, aber ich kann nicht mehr als einmal auf den SQL-Server zuzugreifen, um die Daten zu holen. Ich habe SQL-Server-Tabellen im Avro-Format importiert und jetzt baue ich Hive ORC- und Hive Avro-Tabellen auf, die einzige Verwirrung, die bleibt, ist, ob Avro-Dateiformat während des Imports Perf darstellen wird. Probleme später, wenn Hive-Abfragen ausgeführt werden –

Antwort

0

für das Laden erneut zu importieren, können Sie diese Optionen versuchen

1) Sie können csv eine mySQL-Import tun Datei, die in Ihrem Linux-Dateisystem als Backup gespeichert wird, dann tun Sie einen Abstand zu HDFS.

2) Wie bereits erwähnt, können Sie einen Sqoop-Import durchführen und die Daten in die Hive-Tabelle (parent_table) laden.

Zur Überprüfung der Leistung bei Verwendung verschiedener Formate & Partitionstabelle können Sie CTAS-Abfragen (Create Table As Select) verwenden, in denen Sie neue Tabellen aus der Basistabelle (parent_table) erstellen können. In CTAS können Sie das Format wie Parque oder Avro usw. erwähnen und Partitionsoptionen sind ebenfalls vorhanden.

Auch wenn Sie neue Tabellen löschen, die von CTAS erstellt wurden, ist die Basistabelle vorhanden.

Basierend auf meiner Erfahrung, Parque + Partition wird eine beste Leistung geben, aber es hängt auch von Ihren Daten ab.

0

Ich sehe, dass die Verbindung und Einstellungen alle korrekt sind. Aber ich sehe --fetch-size in der Abfrage. Standardmäßig ist die --fetch-size 1000, was in Ihrem Fall ewig dauern würde. Wenn die Anzahl der Spalten geringer ist. Ich würde empfehlen, die --fetch-size 10000 zu erhöhen. Ich bin bis zu 50000 gegangen, wenn die Anzahl der Spalten weniger als 50 ist. Vielleicht 20000, wenn Sie 100 Spalten haben. Ich würde empfehlen, die Größe der Daten pro Zeile zu überprüfen und dann zu entscheiden. Wenn es eine Spalte gibt, deren Größe größer als 1 MB Daten ist. Dann würde ich nichts über 1000 empfehlen.

Verwandte Themen