Quelqu'un peut-il me dire la différence entre la table externe de Hive et les tables internes. Je sais que la différence vient en laissant tomber la table. Je ne comprends pas ce que vous entendez par les données et les métadonnées sont supprimées dans interne et seules les métadonnées sont supprimées dans les tables externes. Quelqu'un peut-il m'expliquer en termes de nœuds s'il vous plaît.
Hive dispose d'une base de données relationnelle sur le nœud maître qu'il utilise pour suivre l'état. Par exemple, lorsque vous CREATE TABLE FOO(foo string) LOCATION 'hdfs://tmp/';
, ce schéma de table est stocké dans la base de données.
Si vous avez une table partitionnée, les partitions sont stockées dans la base de données (cela permet à Hive d'utiliser des listes de partitions sans accéder au système de fichiers et les rechercher, etc.). Ces sortes de choses sont les "métadonnées".
Lorsque vous supprimez une table interne, les données sont également supprimées, ainsi que les métadonnées.
Lorsque vous supprimez une table externe, seules les métadonnées sont supprimées. Cela signifie que Hive ignore ces données maintenant. Il ne touche pas les données elles-mêmes.
Les tables de ruche peuvent être créées en tant que EXTERNAL ou INTERNAL. C'est un choix qui affecte la manière dont les données sont chargées, contrôlées et gérées.
Utilisez des tables externes lorsque:
Utilisez les tables INTERNAL quand:
Les données sont temporaires.
Vous voulez que Hive gère complètement le cycle de vie de la table et des données.
Pour les tables externes, Hive ne déplace pas les données dans son répertoire de stockage. Si la table externe est supprimée, les métadonnées de la table sont supprimées, mais pas les données.
Pour les tables internes, Hive déplace les données dans son répertoire d'entrepôt. Si la table est supprimée, les métadonnées de la table et les données seront supprimées.
Différence entre les tables internes et externes:
Pour les tables externes -
Une table externe stocke des fichiers sur le serveur HDFS, mais les tables ne sont pas complètement liées au fichier source.
Si vous supprimez une table externe, le fichier reste sur le serveur HDFS.
Par exemple, si vous créez une table externe appelée "table_test" dans Ruche utilisant Hive-QL et lier la table à fichier "fichier" , puis la suppression de "table_test" de Hive ne supprimera pas le "fichier" de HDFS .
Les fichiers de table externes sont accessibles à toute personne ayant accès à la structure de fichier HDFS. Par conséquent, la sécurité doit être gérée au niveau du fichier/dossier HDFS.
Les métadonnées sont conservées sur le nœud maître et la suppression d'une table externe de Hive supprime uniquement les métadonnées et non les données/fichiers.
Pour les tables internes -
- Stocké dans un répertoire basé sur les paramètres de
Hive.metastore.warehouse.dir
, par défaut, les tables internes sont stockées dans le répertoire suivant “/ user/Hive/warehouse” , vous pouvez le modifier en mettant à jour l'emplacement. dans le fichier de configuration.- La suppression de la table supprime les métadonnées et les données de maître-noeud et HDFS respectivement.
- La sécurité des fichiers de la table interne est contrôlée uniquement via Hive. La sécurité doit être gérée dans Hive, probablement au niveau du schéma (dépend de l'organisation).
Hive peut avoir des tables internes ou externes, c'est un choix qui affecte la façon dont les données sont chargées, contrôlées et gérées.
Utilisez des tables externes lorsque:
Utilisez les tables INTERNAL quand:
La source :
Les données d'une table interne sont stockées dans le dossier de l'entrepôt, alors que les données d'une table externe sont stockées à l'emplacement mentionné dans la création de la table.
Ainsi, lorsque vous supprimez une table interne, le schéma ainsi que les données situées dans le dossier de l'entrepôt sont supprimés, mais pour une table externe, seul le schéma que vous allez perdre.
Ainsi, lorsque vous souhaitez récupérer une table externe après sa suppression, vous pouvez créer une table avec le même schéma et la rediriger vers l'emplacement de données d'origine. J'espère que c'est clair maintenant.
Dans les tables externes, si vous le supprimez, seul le schéma de la table est supprimé, les données de la table existent à l'emplacement physique. Donc, pour supprimer les données, utilisez hadoop fs - rmr nomtable. Table gérée Hive aura le contrôle total sur les tables. Dans les tables externes, les utilisateurs auront le contrôle.
La seule différence de comportement (et non l'utilisation prévue), basée sur mes recherches et mes tests limités jusqu'à présent (en utilisant Hive 1.1.0-cdh5.12.0), semble être que lorsqu'un tableau est supprimé
(REMARQUE: voir la section 'Tables gérées et externes' dans https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+DDL qui énumère une autre différence que je n'ai pas bien comprise)
Je crois que Hive choisit l'emplacement où il doit créer la table en fonction de la précédence suivante de haut en bas
Lorsque l'option "Emplacement" n'est pas utilisée lors de la "création d'une table Hive", la règle de priorité ci-dessus est utilisée. Ceci s'applique aux tables internes et externes. Cela signifie qu'une table interne ne doit pas nécessairement résider dans le répertoire Warehouse et peut résider n'importe où ailleurs.
Remarque: j'ai peut-être manqué certains scénarios, mais compte tenu de mon exploration limitée, le comportement des tableaux Internal et Extenal semble être le même, à l'exception de la seule différence (suppression de données) décrite ci-dessus. J'ai essayé les scénarios suivants pour les tables internes et externes.
Le meilleur cas d'utilisation pour une table externe dans le répertoire est lorsque vous souhaitez créer la table à partir d'un fichier au format CSV ou texte.
Considérez ce scénario qui convient le mieux à la table externe:
Un travail MapReduce (MR) filtre un fichier journal volumineux afin de créer des sous-fichiers journaux n
(chaque fichier journal contient par exemple un journal de type message) et les fichiers journaux de sortie i.e n
sont stockés dans des fichiers hdfs.
Ces fichiers journaux doivent être chargés dans des tables Hive pour permettre des analyses plus poussées. Dans ce scénario, je vous recommanderais une ou plusieurs tables externes, car les fichiers journaux réels sont générés et appartiennent à un processus externe, c’est-à-dire un travail MR. étape supplémentaire de chargement de chaque fichier journal généré dans la table Hive respective.
N'oubliez pas non plus que Hive est un grand entrepôt de données. Lorsque vous voulez supprimer une table, vous ne voulez pas perdre des gigaoctets ou des téraoctets de données. Générer, déplacer et copier des données à cette échelle peut prendre beaucoup de temps. Lorsque vous supprimez une table 'Gérée', Hive supprimera également ses données. Lorsque vous supprimez une table 'External', seule la définition de schéma du méta-magasin Hive est supprimée. Les données sur les hdfs sont toujours présentes.
La table Hive externe a pour avantage de ne pas supprimer les fichiers lorsque nous les supprimons, nous pouvons définir des formats de lignes avec des paramètres différents, tels que serde .... délimité
Les tables internes sont utiles si vous souhaitez que Hive gère le cycle de vie complet de vos données, suppression comprise, tandis que les tables externes sont utiles lorsque les fichiers sont utilisés en dehors de Hive.
Hive stocke uniquement les métadonnées dans le métastore et les données originales en dehors de Hive lorsque nous utilisons une table externe, nous pouvons donner l'emplacement ''. Ces données n'affecteront pas nos données d'origine lorsque nous déposerons la table.
Pour les tables gérées, Hive contrôle le cycle de vie de leurs données. Hive stocke les données des tables gérées dans un sous-répertoire du répertoire défini par Hive.metastore.warehouse.dir par défaut.
Lorsque nous supprimons une table gérée, Hive supprime les données de la table.Mais les tables gérées sont moins pratiques à partager avec d'autres outils. Par exemple, supposons que nous ayons des données créées et utilisées principalement par Pig, mais que nous souhaitons exécuter certaines requêtes sur ces données, sans donner à Hive la propriété de ces données.
A ce moment, une table externe est définie qui pointe vers ces données, mais ne s'en approprie pas la propriété.
Dans Hive, nous pouvons également créer une table externe. Il indique à Hive de se référer aux données qui se trouvent à un emplacement existant en dehors du répertoire de l'entrepôt. Si vous supprimez des tables externes, les métadonnées sont supprimées, mais pas les données.
Lorsqu'il existe déjà des données dans HDFS, une table Hive externe peut être créée pour décrire les données. Il s'appelle EXTERNAL car les données de la table externe sont spécifiées dans les propriétés LOCATION au lieu du répertoire d'entrepôt par défaut.
En conservant les données dans les tables internes, Hive gère entièrement le cycle de vie de la table et des données. Cela signifie que les données sont supprimées une fois la table interne supprimée. Si la table externe est supprimée, les métadonnées de la table sont supprimées mais les données sont conservées. La plupart du temps, une table externe est préférable pour éviter de supprimer des données avec des tables par erreur.