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/
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
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:
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
Découvrez le partitionnement de votre table show partitions users;
Copiez les fichiers Parquet de la table à partir de HDFS dans un répertoire local.
hdfs dfs -copyToLocal /apps/Hive/warehouse/users
Déplacez-les vers l'autre cluster/machine virtuelle ou à l'endroit souhaité.
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;
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/
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.
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.
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
Merci
Kumar