web-dev-qa-db-fra.com

Pouvons-nous charger le fichier Parquet directement dans Hive?

Je sais que nous pouvons charger un fichier de parquet à l'aide de Spark SQL et d'Impala, mais nous nous demandons si nous pouvons faire de même avec Hive. J'ai lu de nombreux articles mais je suis toujours confus. 

En un mot, j’ai un fichier de parquet - disons user.parquet. Maintenant, je suis frappé ici sur la façon de charger/insérer/importer des données de users.parquet dans Hive (évidemment dans un tableau).

Veuillez me conseiller ou me diriger dans la bonne direction si quelque chose d’évident me manque.

Création d'une table Hive à l'aide de métadonnées de fichier de parquet

https://phdata.io/examples-using-textfile-and-parquet-with-Hive-and-impala/

11
annunarcist

Obtenir le schéma du fichier de parquet à l'aide des outils de parquet, pour plus de détails, consultez le lien http://kitesdk.org/docs/0.17.1/labs/4-using-parquet-tools-solution.html

et construire une table en utilisant le schéma en haut du fichier, pour vérifier les détails Créer une table Hive pour lire les fichiers de parquet à partir du schéma parquet/avro

6
Ram Manohar

Obtenir le schéma est crucial, car vous devrez d'abord créer la table avec le schéma approprié dans Hive, puis le pointer vers les fichiers de parquet.

J'ai eu un problème similaire, où j'avais des données dans un VM et que je devais les transférer dans un autre. Voici ma procédure pas à pas:

  1. Vous trouverez des informations sur les fichiers Parquet d’origine (emplacement et schéma): describe formatted users; et show create table users;. Ce dernier vous obtiendra immédiatement le schéma et vous indiquera également l’emplacement de HDFS hdfs://hostname:port/apps/Hive/warehouse/users

  2. Découvrez le partitionnement de votre table show partitions users;

  3. Copiez les fichiers Parquet de la table à partir de HDFS dans un répertoire local.

    hdfs dfs -copyToLocal /apps/Hive/warehouse/users
    
  4. Déplacez-les vers l'autre cluster/machine virtuelle ou à l'endroit souhaité.

  5. Créez la table des utilisateurs sur votre destination CREATE USERS ... en utilisant le même schéma 

    CREATE TABLE users ( name string, ... )
    PARTITIONED BY (...)
    STORED AS PARQUET;
    
  6. Maintenant, déplacez les fichiers Parquet dans le dossier respectif (si nécessaire, recherchez l'emplacement de la table que vous venez de créer).

    hdfs dfs -ls /apps/Hive/warehouse/users/
    hdfs dfs -copyFromLocal ../temp/* /apps/Hive/warehouse/
    
  7. Pour chaque partition, vous devrez pointer Hive vers le sous-répertoire respectif: alter table users add partition (sign_up_date='19991231') location '/apps/Hive/warehouse/users/sign_up_date=19991231'; (vous pouvez le faire avec un script bash)

Cela a fonctionné pour moi, espérons que cela aide.

6
Hendrik F

Je ne sais pas si c'est un peu "hacky" mais j'utilise zeppelin (livré avec ambari). Vous pouvez simplement faire ce qui suit en combinaison avec spark2:

%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")

L'avantage de cette méthode est que vous pouvez également importer de nombreux fichiers de parquet, même s'ils ont un schéma différent.

2
Fabian

Vous pouvez essayer ceci ... L'export/import fonctionne pour tous les types de format de fichier, y compris le parquet dans Hive. C’est un concept général, vous pouvez modifier un petit peu en fonction de vos besoins, comme une charge locale (ou) d’un cluster à l’autre.

Remarque: vous pouvez utiliser un code fixe à la place de $ lorsque vous exécutez des étapes individuelles, mais aussi définir le "chemin d'accès HDFS", le "Schéma" et le "nom de table" comme paramètre lorsque vous l'exécutez à partir d'un script. Ainsi, vous pouvez exporter/importer des tables illimitées simplement en passant le paramètre

  • Etape 1: Hive -S -e "table d'exportation $ schema_file1. $ Tbl_file1 vers '$ HDFS_DATA_PATH/$ tbl_file1';" # - Exécuter à partir de HDFS. 
  • Étape 2: # - Il contient des données et des métadonnées. Compressez-le et scp pour cibler le cluster
  • Étape 3: Hive -S -e "table d'importation $ schema_file1. $ Tbl_file1 à partir de '$ HDFS_DATA_PATH/$ tbl_file1"; " # - La première importation passe par une erreur car la table n'existe pas, mais crée automatiquement une table
  • Étape 4: Hive -S -e "table d'importation $ schema_file1. $ Tbl_file1 à partir de '$ HDFS_DATA_PATH/$ tbl_file1';" # - La deuxième importation importera les données sans erreur, car la table est disponible maintenant

Merci 

Kumar

0
saranvisa