web-dev-qa-db-fra.com

Différence entre les tables internes de Hive et les tables externes?

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.

101
DrewRose

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.

105
prestomation

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:

  1. Les données sont également utilisées en dehors de Hive. Par exemple, les fichiers de données sont lus et traités par un programme existant qui ne les verrouille pas.
  2. Les données doivent rester à l'emplacement sous-jacent, même après une table DROP. Cela peut s'appliquer si vous pointez plusieurs schémas (tables ou vues) sur un seul jeu de données ou si vous effectuez une itération à travers différents schémas possibles.
  3. Vous souhaitez utiliser un emplacement personnalisé tel que ASV.
  4. Hive ne devrait pas posséder de données ni de paramètres de contrôle, d’enregistrements, etc., vous avez un autre programme ou processus qui fera ces choses.
  5. Vous ne créez pas de table basée sur une table existante (AS SELECT).

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.

93
swetha

Pour vous répondre Question:

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.


Pour votre référence,

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:

  • Les données sont également utilisées en dehors de Hive . Par exemple, les fichiers de données sont lus et traités par un programme existant qui ne les verrouille pas.
  • Les données doivent rester à l'emplacement sous-jacent, même après une table DROP. Ceci peut s'appliquer si vous pointez plusieurs schémas (tables ou vues) sur une seule donnée. définir ou si vous effectuez une itération à travers différents schémas possibles.
  • Hive ne devrait pas posséder de données ni de paramètres de contrôle, de répertoires, etc. . Vous pouvez avoir un autre programme ou processus qui fera ces choses.
  • Vous ne créez pas de table à partir d'une table existante (AS SELECT).

Utilisez les tables INTERNAL quand:

  • Les données sont temporaires .
  • Vous voulez Hive gérer complètement le cycle de vie de la table et des données .

La source :

HDInsight: Intro des tables internes et externes de Hive

Tables internes et externes dans Hadoop- Hive

40
Ani Menon

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.

4
Hadoop Learner

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.

3
Ajaykumar

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é

  • les données des tables internes (gérées) sont supprimées du système de fichiers HDFS
  • alors que les données des tables externes ne sont PAS supprimées du système de fichiers HDFS.

(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

  1. Emplacement défini lors de la création de la table
  2. Emplacement défini dans la création de base de données/schéma dans lequel la table est créée.
  3. Répertoire d'entrepôt Hive par défaut (propriété Hive.metastore.warehouse.dir dans Hive.site.xml)

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.

  1. Création de table avec et sans option d'emplacement
  2. Création de table avec et sans option de partition
  3. Ajout de nouvelles données à l'aide des instructions de chargement et d'insertion Hive
  4. Ajout de fichiers de données à l'emplacement Table en dehors de Hive (à l'aide de commandes HDFS) et actualisation de la table à l'aide de la commande "MSCK REPAIR TABLE
  5. Laisser tomber les tables
2
NallaAnand

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.

1
anubhav

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.

1
Suresh Vadali

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.

1

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é

1
user3485352

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.

1
Muthu Palaniappan

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.

0
user5080458

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é.

0
Ankit Nandwal

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.

0
Sayat Satybald