¿Diferencia entre tablas internas y tablas externas de Hive?

110

¿Alguien puede decirme la diferencia entre la tabla externa y las tablas internas de Hive? Sé que la diferencia surge cuando se cae la mesa. No entiendo lo que quiere decir con los datos y los metadatos se eliminan en las tablas internas y solo los metadatos se eliminan en las tablas externas. ¿Alguien puede explicarme en términos de nodos, por favor?

DrewRose
fuente

Respuestas:

117

Hive tiene una base de datos relacional en el nodo principal que utiliza para realizar un seguimiento del estado. Por ejemplo, cuando usted CREATE TABLE FOO(foo string) LOCATION 'hdfs://tmp/';, este esquema de tabla se almacena en la base de datos.

Si tiene una tabla particionada, las particiones se almacenan en la base de datos (esto le permite a hive usar listas de particiones sin tener que ir al sistema de archivos y encontrarlas, etc.). Este tipo de cosas son los 'metadatos'.

Cuando suelta una tabla interna, descarta los datos y también los metadatos.

Cuando suelta una tabla externa, solo descarta los metadatos. Eso significa que Hive ahora ignora esos datos. No toca los datos en sí.

prestomación
fuente
ok ... por ejemplo, he creado una tabla externa ... y la dejo caer. ¿lo que pasa? ¿A qué te refieres con que los datos no se tocan? si le doy una selección * de esa tabla, ¿se mostrará? No puedo imaginar la diferencia.
DrewRose
11
Si quita una tabla, Hive devuelve el estado en el que estaba antes de quitarla. si ejecuta la consulta 'seleccionar * de foo' después de soltar foo, Hive le dirá que la tabla no existe. Esto se debe a que le ha dicho a Hive que se olvide de esa mesa. Los datos todavía existen en cualquier sistema de archivos en el que estuvieran antes. Piense en los metadatos como un 'puntero' hacia donde están los datos.
prestomation
1
Entonces, ¿está diciendo si tengo datos en esta ubicación opt / nancy / foo.txt y los cargo en la tabla externa y los suelto, los metadatos se pierden pero los datos en esta ubicación opt / nancy / foo.txt permanecen?
DrewRose
Bien, ahora esta ubicación en HDFS o en mi sistema local? Si está en el sistema local, cuando cargo los datos en una tabla interna y suelto la tabla, el archivo foo.txt permanecerá en esa ubicación. estoy en lo cierto hasta ahora?
DrewRose
3
Las tablas de Hive están en un sistema de archivos compatible (Hbase, HDFS, S3, etc.). ¿Supongo que está utilizando "LOAD DATA" para cargar datos de un archivo local en una tabla de colmena? En este caso, está copiando el archivo local en una tabla de subárbol. Cuando suelte esta tabla, la copia de los datos de la tabla interna se eliminará, pero el archivo de origen del comando "LOAD DATA" seguirá intacto.
prestomation
100

Las tablas de Hive se pueden crear como EXTERNAS o INTERNAS. Esta es una elección que afecta la forma en que se cargan, controlan y administran los datos.

Utilice tablas EXTERNAS cuando:

  1. Los datos también se utilizan fuera de Hive. Por ejemplo, los archivos de datos son leídos y procesados ​​por un programa existente que no bloquea los archivos.
  2. Los datos deben permanecer en la ubicación subyacente incluso después de una DROP TABLE. Esto puede aplicarse si apunta varios esquemas (tablas o vistas) a un solo conjunto de datos o si está iterando a través de varios esquemas posibles.
  3. Desea utilizar una ubicación personalizada como ASV.
  4. Hive no debe poseer datos y configuraciones de control, directorios, etc., tiene otro programa o proceso que hará esas cosas.
  5. No está creando una tabla basada en una tabla existente (COMO SELECCIONAR).

Utilice tablas INTERNAS cuando:

Los datos son temporales.

Desea que Hive administre completamente el ciclo de vida de la tabla y los datos.

swetha
fuente
2
Cortesía de blogs.msdn.microsoft.com/cindygross/2013/02/05/…
Persona anónima
¿La creación de una tabla INTERNA eliminará los datos de HDFS o hará una copia y se utilizará exclusivamente para colmena dejando la fuente (HDFS) intacta?
luckyluke
@swetha Hola, vine aquí porque eliminé el metastore.db por completo pero los datos permanecen en hdfs. Entonces, cuando muestro tablas, no se muestra nada. ¿Hay alguna forma de recrear los metadatos?
awadhesh14
46

Para responder a su pregunta:

Para las tablas externas, Hive almacena los datos en la UBICACIÓN especificada durante la creación de la tabla (generalmente no en el directorio del almacén). Si se descarta la tabla externa, se eliminan los metadatos de la tabla, pero no los datos.

Para las tablas internas, Hive almacena datos en su directorio de almacén. Si se elimina la tabla, se eliminarán tanto los metadatos como los datos de la tabla.


Para tu referencia,

Diferencia entre tablas internas y externas:

Para mesas externas -

  • La tabla externa almacena archivos en el servidor HDFS, pero las tablas no están vinculadas al archivo fuente por completo.

  • Si elimina una tabla externa, el archivo aún permanece en el servidor HDFS.

    Por ejemplo, si crea una tabla externa llamada "table_test" en HIVE usando HIVE-QL y vincula la tabla al archivo "file" , entonces eliminar "table_test" de HIVE no eliminará "file" de HDFS .

  • Los archivos de tablas externos son accesibles para cualquier persona que tenga acceso a la estructura de archivos HDFS y, por lo tanto, la seguridad debe administrarse a nivel de archivo / carpeta HDFS.

  • Los metadatos se mantienen en el nodo principal y, al eliminar una tabla externa de HIVE, solo se eliminan los metadatos, no los datos / archivos.


Para tablas internas

  • Almacenado en un directorio basado en la configuración en hive.metastore.warehouse.dir, de forma predeterminada, las tablas internas se almacenan en el siguiente directorio "/ usuario / colmena / almacén" . Puede cambiarlo actualizando la ubicación en el archivo de configuración.
  • Al eliminar la tabla, se eliminan los metadatos y los datos del nodo principal y HDFS, respectivamente.
  • La seguridad del archivo de tabla interno se controla únicamente a través de HIVE. La seguridad debe gestionarse dentro de HIVE, probablemente a nivel de esquema (depende de la organización).

Hive puede tener tablas internas o externas, esta es una opción que afecta la forma en que se cargan, controlan y administran los datos.

Utilice tablas EXTERNAS cuando:

  • Los datos también se utilizan fuera de Hive . Por ejemplo, los archivos de datos son leídos y procesados ​​por un programa existente que no bloquea los archivos.
  • Los datos deben permanecer en la ubicación subyacente incluso después de una DROP TABLE.Esto se puede aplicar si apunta varios esquemas (tablas o vistas) a un solo conjunto de datos o si está iterando a través de varios esquemas posibles.
  • Hive no debe poseer datos y configuraciones de control, directorios, etc. , es posible que tenga otro programa o proceso que haga esas cosas.
  • No está creando una tabla basada en una tabla existente (COMO SELECCIONAR).

Utilice tablas INTERNAS cuando:

  • Los datos son temporales .
  • Desea que Hive administre completamente el ciclo de vida de la tabla y los datos .

Fuente :

HDInsight: Introducción a las tablas internas y externas de Hive

Tablas internas y externas en Hadoop- HIVE

Ani Menon
fuente
1
@CapturedTree Pero la respuesta no es correcta. "Hive mueve los datos a su directorio de almacén". Esto es completamente incorrecto, no es así. Los datos se almacenan en la ubicación de la mesa. No importa externo o administrado.
leftjoin
6

Los datos de una tabla interna se almacenan en la carpeta del almacén, mientras que los datos de una tabla externa se almacenan en la ubicación que mencionó en la creación de la tabla.

Entonces, cuando elimina una tabla interna, elimina el esquema, así como los datos en la carpeta del almacén, pero para una tabla externa, solo perderá el esquema.

Entonces, cuando desee que una tabla externa lo respalde nuevamente después de eliminarla, puede crear una tabla con el mismo esquema nuevamente y apuntar a la ubicación de datos original. Espero que esté claro ahora.

Aprendiz de Hadoop
fuente
4

La única diferencia en el comportamiento (no el uso previsto) basada en mi investigación y pruebas limitadas hasta ahora (usando Hive 1.1.0 -cdh5.12.0) parece ser que cuando se elimina una tabla

  • los datos de las tablas internas (administradas) se eliminan del sistema de archivos HDFS
  • mientras que los datos de las tablas externas NO se eliminan del sistema de archivos HDFS.

(NOTA: Consulte la sección 'Tablas externas y administradas' en https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL que enumera alguna otra diferencia que no entendí por completo)

Creo que Hive elige la ubicación donde necesita crear la tabla en función de la siguiente precedencia de arriba a abajo

  1. Ubicación definida durante la creación de la tabla
  2. Ubicación definida en la Base de datos / Creación de esquema en la que se crea la tabla.
  3. Directorio de almacén de Hive predeterminado (propiedad hive.metastore.warehouse.dir en hive.site.xml)

Cuando la opción "Ubicación" no se usa durante la "creación de una tabla de colmena", se usa la regla de precedencia anterior. Esto es aplicable tanto para tablas internas como externas. Esto significa que una tabla interna no tiene que residir necesariamente en el directorio Warehouse y puede residir en cualquier otro lugar.

Nota: Es posible que me haya perdido algunos escenarios, pero según mi exploración limitada, el comportamiento de la tabla Interna y Extenal parece ser el mismo, excepto por la única diferencia (eliminación de datos) descrita anteriormente. Probé los siguientes escenarios para tablas internas y externas.

  1. Crear tabla con y sin opción de ubicación
  2. Crear tabla con y sin opción de partición
  3. Adición de datos nuevos mediante las instrucciones de inserción y carga de Hive
  4. Agregar archivos de datos a la ubicación de la tabla fuera de Hive (usando comandos HDFS) y actualizar la tabla usando el comando "MSCK REPAIR TABLE
  5. Dejando caer las mesas
NallaAnand
fuente
buena exploración. Esta es la única respuesta que explica cómo Hive maneja la opción de ubicación para la tabla interna y externa.
d2207197
3

En las tablas externas, si lo elimina, solo elimina el esquema de la tabla, los datos de la tabla existen en la ubicación física. Entonces, para eliminar los datos, use hadoop fs - rmr tablename. Colmena de tablas administradas tendrá control total sobre las tablas. En las tablas externas los usuarios tendrán control sobre él.

Ajaykumar
fuente
Me encuentro con una situación en la que el directorio no siempre se elimina después de una DROP TABLE en una tabla interna creada a través de CREATE TABLE foo (id INT). Aparentemente, los metadatos están bien porque MOSTRAR TABLAS es consistente: la tabla no aparece en esa lista después de que se quita. Confusamente, he notado que el directorio / es / eliminado a veces, pero no puedo recrearlo de manera consistente. ¿Algunas ideas?
Matthew Cornell
¿Se verifican los permisos de las tablas? Es posible que haya cambiado la propiedad de la ubicación en HDFS a algún usuario diferente.
Milind Jindal
1

Las tablas internas son útiles si desea que Hive administre el ciclo de vida completo de sus datos, incluida la eliminación, mientras que las tablas externas son útiles cuando los archivos se utilizan fuera de Hive.

Muthu Palaniappan
fuente
1

La tabla de colmena externa tiene la ventaja de que no elimina archivos cuando soltamos tablas, podemos establecer formatos de fila con diferentes configuraciones, como serde .... delimitado

usuario3485352
fuente
1

También tenga en cuenta que Hive es un gran almacén de datos. Cuando desee eliminar una tabla, no querrá perder Gigabytes o Terabytes de datos. Generar, mover y copiar datos a esa escala puede llevar mucho tiempo. Cuando suelta una tabla "Administrada", la colmena también eliminará sus datos. Cuando suelta una tabla 'Externa', solo se elimina la definición de esquema del metaalmacén de Hive. Los datos de los hdfs aún permanecen.

Urvishsinh Mahida
fuente
1

Considere este escenario que se adapta mejor a la tabla externa:

Un trabajo de MapReduce (MR) filtra un archivo de registro enorme para escupir narchivos de registro secundario (por ejemplo, cada archivo de registro secundario contiene un registro de tipo de mensaje específico) y la salida, es decir, los narchivos de registro secundario se almacenan en hdfs.

Estos archivos de registro deben cargarse en las tablas de Hive para realizar más análisis; en este escenario, recomendaría una (s) tabla (s) externa (s), porque los archivos de registro reales son generados y son propiedad de un proceso externo, es decir, un trabajo de MR, además, puede evitar un paso adicional de cargar cada archivo de registro generado en la tabla de Hive respectiva también.

Suresh Vadali
fuente
1

El mejor caso de uso para una tabla externa en la colmena es cuando desea crear la tabla a partir de un archivo CSV o texto.

anubhav
fuente
0

colmena almacena solo los metadatos en la tienda de metadatos y los datos originales en el exterior de la colmena cuando usamos una tabla externa podemos dar la ubicación '' por estos nuestros datos originales no tendrán efecto cuando dejamos caer la tabla

user5080458
fuente
0

Cuando ya hay datos en HDFS, se puede crear una tabla de Hive externa para describir los datos. Se llama EXTERNAL porque los datos de la tabla externa se especifican en las propiedades de UBICACIÓN en lugar del directorio de almacén predeterminado.

Al mantener los datos en las tablas internas, Hive administra por completo el ciclo de vida de la tabla y los datos. Esto significa que los datos se eliminan una vez que se elimina la tabla interna. Si se elimina la tabla externa, los metadatos de la tabla se eliminan pero los datos se conservan. La mayoría de las veces, se prefiere una tabla externa para evitar eliminar datos junto con tablas por error.

Sayat Satybald
fuente
0

Para las tablas administradas, Hive controla el ciclo de vida de sus datos. Hive almacena los datos de las tablas administradas en un subdirectorio en el directorio definido por hive.metastore.warehouse.dir de forma predeterminada.

Cuando eliminamos una tabla administrada, Hive elimina los datos de la tabla, pero las tablas administradas son menos convenientes para compartir con otras herramientas. Por ejemplo, digamos que tenemos datos creados y utilizados principalmente por Pig, pero queremos ejecutar algunas consultas en ellos, pero sin darle a Hive la propiedad de los datos.

En ese momento, se define una tabla externa que apunta a esos datos, pero no se apropia de ellos.

Ankit Nandwal
fuente
0

INTERNO : La tabla se crea primero y los datos se cargan más tarde

EXTERNO : los datos están presentes y la tabla se crea encima de ellos.

Prasad L
fuente
0

En Hive también podemos crear una tabla externa. Le dice a Hive que haga referencia a los datos que se encuentran en una ubicación existente fuera del directorio del almacén. Eliminar tablas externas eliminará los metadatos, pero no los datos.

Harsimranjit Singh Kler
fuente
0

Me gustaria agregar eso

  1. Las tablas internas se utilizan cuando los datos deben actualizarse o algunas filas deben eliminarse porque las propiedades ACID se pueden admitir en las tablas internas, pero las propiedades ACID no se pueden admitir en las tablas externas.
  2. Asegúrese de que haya una copia de seguridad de los datos en la tabla interna porque si se descarta una tabla interna, los datos también se perderán.
jatin
fuente
-2

En palabras simples, hay dos cosas:

Hive puede administrar cosas en el almacén, es decir, no eliminará los datos del almacén. Cuando eliminamos la tabla:

1) Para las tablas internas, los datos se gestionan internamente en el almacén. Entonces será eliminado.

2) Para tablas externas, los datos se gestionan eternamente desde el almacén. Por lo tanto, no se puede eliminar y los clientes que no sean Hive también pueden usarlo.

Sonu
fuente