web-dev-qa-db-ger.com

Können wir die Parkettdatei direkt in Hive laden?

Ich weiß, dass wir die Parkettdatei mit Spark SQL und mit Impala laden können, aber ich frage mich, ob wir mit Hive dasselbe tun können. Ich habe viele Artikel gelesen, bin aber immer noch verwirrt. 

Einfach gesagt, ich habe eine Parkettdatei - sagen Sie users.parquet. Nun bin ich beeindruckt, wie ich Daten aus dem users.parquet in Hive laden/einfügen/importieren kann (offensichtlich in eine Tabelle).

Bitte raten Sie mir oder weisen Sie mich in die richtige Richtung, wenn ich etwas offensichtliches vermisse.

Erstellen einer Hive-Tabelle mit Parkettdatei-Metadaten

https://phdata.io/examples-using-textfile-and-parkett-mit-Bienenhaus-und-impala/

11
annunarcist

Holen Sie sich das Schema der Parkettdatei mit Parkettwerkzeugen. Weitere Informationen finden Sie unter dem Link http://kitesdk.org/docs/0.17.1/labs/4-using-parquet-tools-solution.html .

erstellen und Erstellen einer Tabelle mithilfe des Schemas oben in der Datei. Weitere Informationen finden Sie unter Erstellen einer Strukturtabelle zum Lesen von Parkettdateien aus dem Parkett-/Avro-Schema .

6
Ram Manohar

Das Aufrufen des Schemas ist von entscheidender Bedeutung, da Sie die Tabelle mit dem entsprechenden Schema zuerst in Hive erstellen und dann auf die Parkettdateien verweisen müssen.

Ich hatte ein ähnliches Problem, bei dem ich Daten in einem hatte VM) und sie auf einen anderen verschieben musste. Hier ist meine exemplarische Vorgehensweise:

  1. Informieren Sie sich über die ursprünglichen Parkettdateien (Speicherort und Schema): describe formatted users; Und show create table users; Mit letzterem erhalten Sie das Schema sofort und weisen Sie auch auf den Speicherort von HDFS hdfs://hostname:port/apps/Hive/warehouse/users.

  2. Informieren Sie sich über die Aufteilung Ihrer Tabelle show partitions users;

  3. Kopieren Sie die Parkettdateien der Tabelle von HDFS in ein lokales Verzeichnis

    hdfs dfs -copyToLocal /apps/Hive/warehouse/users
    
  4. Verschieben Sie sie auf den anderen Cluster/die andere VM oder dorthin, wo Sie sie haben möchten

  5. Erstellen Sie die Benutzertabelle auf Ihrem Ziel CREATE USERS ..., Indem Sie dasselbe Schema verwenden

    CREATE TABLE users ( name string, ... )
    PARTITIONED BY (...)
    STORED AS PARQUET;
    
  6. Verschieben Sie nun die Parkettdateien in den entsprechenden Ordner (informieren Sie sich bei Bedarf über den Speicherort der soeben erstellten Tabelle).

    hdfs dfs -ls /apps/Hive/warehouse/users/
    hdfs dfs -copyFromLocal ../temp/* /apps/Hive/warehouse/
    
  7. Für jede Partition müssen Sie Hive auf das entsprechende Unterverzeichnis verweisen: alter table users add partition (sign_up_date='19991231') location '/apps/Hive/warehouse/users/sign_up_date=19991231'; (möglicherweise möchten Sie dies mit einem Bash-Skript tun)

Das hat bei mir funktioniert, hoffe es hilft.

7
Hendrik F

Ich weiß nicht, ob es ein bisschen "hacky" ist, aber ich benutze Zeppelin (im Lieferumfang von Ambari enthalten). In Kombination mit spark2 können Sie einfach Folgendes tun:

%spark2
import org.Apache.spark.sql.SaveMode

var df = spark.read.parquet("hdfs:///my_parquet_files/*.parquet");
df.write.mode(SaveMode.Overwrite).saveAsTable("imported_table")

Der Vorteil dieser Methode ist, dass Sie auch viele Parkettdateien importieren können, auch wenn sie ein anderes Schema haben.

2
Fabian

Sie können dies versuchen ... Der Export/Import funktioniert für alle Arten von Dateiformaten, einschließlich Parkett in Hive. Dies ist ein allgemeines Konzept. Sie können ein wenig an Ihren Anforderungen anpassen, z. B. Laden von lokal (oder) über Cluster hinweg

Hinweis: Wenn Sie einzelne Schritte ausführen, können Sie anstelle von $ einen harten Code verwenden. Als Parameter können Sie außerdem "HDFS-Pfad", "Schema" und "Tabellenname" als Parameter übergeben. Sie können also unbegrenzt Tabellen exportieren oder importieren, indem Sie den Parameter übergeben

  • Schritt1: Hive -e "Exportiert die Tabelle $ schema_file1. $ Tbl_file1 nach '$ HDFS_DATA_PATH/$ tbl_file1';" # - Von HDFS ausführen. 
  • Schritt 2: # - Es enthält sowohl Daten als auch Metadaten. Zip und scp zum Zielcluster
  • Schritt3: Hive -e "importiert die Tabelle $ schema_file1. $ Tbl_file1 aus '$ HDFS_DATA_PATH/$ tbl_file1';" # - Beim ersten Import wird ein Fehler ausgegeben, da die Tabelle nicht vorhanden ist, sondern automatisch eine Tabelle erstellt wird.
  • Schritt4: Hive -e "importiert die Tabelle $ schema_file1. $ Tbl_file1 aus '$ HDFS_DATA_PATH/$ tbl_file1';" # - Beim zweiten Import werden die Daten fehlerfrei als jetzt verfügbare Tabelle importiert.

Vielen Dank 

Kumar

0
saranvisa