Diferencia entre las tablas internas de Hive y las tablas externas?


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

Author: Kim Moritz, 2013-06-11

18 answers

Hive tiene una base de datos relacional en el nodo maestro que utiliza para realizar un seguimiento del estado. Por ejemplo, cuando 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 permite a hive usar listas de particiones sin ir al sistema de archivos y encontrarlas, etc.). Este tipo de cosas son los "metadatos".

Cuando se cae una tabla interna, se cae los datos, y también se cae la metadatos.

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

 89
Author: prestomation,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-09 21:02:49

Las tablas Hive se pueden crear como EXTERNAS o INTERNAS. Esta es una opció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 TABLA DE CAÍDA. Esto se puede aplicar si está apuntando varios esquemas (tablas o vistas) a una sola 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, dirs, etc., tienes otro programa o proceso que hará esas cosas.
  5. No está creando una tabla basada en una tabla existente (COMO SELECCIONE).

Utilice tablas INTERNAS cuando:

Los datos son temporales.

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

 84
Author: swetha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-12 03:34:43

Para responder a su Pregunta:

Para las tablas externas ,Hive no mueve los datos a su directorio de almacén. Si se elimina la tabla externa, se eliminan los metadatos de la tabla, pero no los datos.

Para las tablas internas , Hive mueve los datos a su directorio de almacén. Si se elimina la tabla, se eliminarán los metadatos de la tabla y los datos.


Para su referencia,

Diferencia entre tablas internas y externas :

Para Tablas Externas -

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

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

    Como ejemplo, si crea una tabla externa llamada "table_test" en HIVE usando HIVE-QL y vincula la tabla a file "file", a continuación, eliminar "table_test" de la COLMENA no eliminar "archivo" de HDFS.

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

  • Los metadatos se mantienen en el nodo maestro, y al eliminar una tabla externa del subárbol solo se eliminan los metadatos, no los datos/archivos.


Para Tablas Internas -

  • Almacenado en un directorio basado en ajustes en hive.metastore.warehouse.dir, por defecto se almacenan tablas internas 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 de master-node y HDFS, respectivamente.
  • La seguridad interna de los archivos de tabla se controla únicamente a través de HIVE. La seguridad debe gestionarse dentro de HIVE, probablemente a nivel de esquema (depende en organismo).

Hive puede tener tablas internas o externas, esta es una opción que afecta cómo 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 TABLA DE CAÍDA. Esto puede aplicarse si está apuntando varios esquemas (tablas o vistas) a un único 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., usted puede tener otro programa o proceso que hará esas cosas.
  • No está creando una tabla basada en una tabla existente (COMO SELECCIONE).

Utilice tablas INTERNAS cuando:

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

Fuente:

HDInsight: Hive Tablas Internas y Externas Intro

Tablas internas y externas en Hadoop-HIVE

 32
Author: Ani Menon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-19 10:49:42

Los datos de la tabla interna se almacenan en la carpeta Warehouse, los datos de la tabla externa apuntan a la ubicación que mencionó en la creación de la tabla. así que cuando se elimina la tabla interna se elimina Esquema, así como los datos en la carpeta de almacén, pero en la tabla externa su único Esquema va a perder. Por lo tanto, cuando desee volver a la tabla, puede crear una tabla con esquema de nuevo y señalar la ubicación . Espero que esté claro ahora.

 4
Author: Hadoop Learner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-09 13:12:24

En tablas externas, si lo suelta, elimina solo el esquema de la tabla, los datos de la tabla existen en la ubicación física. Por lo tanto, para eliminar los datos use hadoop fs - rmr tablename . La colmena de tablas gestionadas tendrá control total sobre las tablas. En tablas externas los usuarios tendrán el control sobre ella.

 2
Author: Ajaykumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-24 18:05:05

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.

 1
Author: Muthu Palaniappan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-24 21:48:57

External hive table tiene las ventajas de que no elimina archivos cuando soltamos tablas,podemos establecer formatos de fila con diferentes configuraciones , como serde....delimitado

 1
Author: user3485352,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-03 09:55:09

También tenga en cuenta que Hive es un almacén de big data. Cuando desea soltar una tabla, no desea perder Gigabytes o Terabytes de datos. Generar, mover y copiar datos a esa escala puede llevar mucho tiempo. Cuando sueltas un subárbol de tabla 'Administrado' también eliminará sus datos. Cuando se suelta una tabla 'Externa' solo se elimina la definición de esquema de hive meta-store. Los datos de los hdfs aún permanecen.

 1
Author: Urvishsinh Mahida,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-02 16:21:54

Considere este escenario que mejor se adapte a la Tabla Externa:

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

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

 1
Author: Suresh Vadali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-25 01:07:12

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

 1
Author: anubhav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-25 12:36:45

La única diferencia en el comportamiento (no el uso previsto) basado en mi limitada investigación y pruebas 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 Administradas y Externas' en https://cwiki.apache.org/confluence/display/Hive/LanguageManual + DDL que listan alguna otra diferencia que no entendí completamente)

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 Creación de la Base de datos/Esquema en la que se crea la tabla.
  3. Directorio predeterminado del Almacén de la colmena (Propiedad colmena.metastore.Warehouse.dir in hive.sitio.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 necesariamente tiene que residir en el directorio del almacén y puede residir en cualquier otro lugar.

Nota: Puede que me haya perdido algunos escenarios, pero basado en mi exploración limitada, el comportamiento de la tabla Interna y Extenal parece ser la misma excepto por la 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. Agregar nuevos datos usando las instrucciones Load and Insert de la Colmena
  4. Agregar archivos de datos a la ubicación de la tabla fuera de Hive (usando comandos HDFS) y actualizar la tabla usando la " TABLA DE REPARACIÓN MSCK command
  5. Eliminar las tablas
 1
Author: NallaAnand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-30 06:58:10

Una tabla externa es una tabla para la que Hive no administra el almacenamiento. Si elimina una tabla externa, solo se elimina la definición del subárbol. Los datos permanecen. Una tabla interna es una tabla que gestiona Hive. Si elimina una tabla interna, se eliminan tanto la definición del subárbol como los datos.

 1
Author: Sujith AK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-17 07:32:16

Hive almacena solo los metadatos en metastore y los datos originales en el lado externo de hive cuando usamos una tabla externa podemos dar ubicación' ' por estos nuestros datos originales no afectarán cuando eliminemos la tabla

 0
Author: user5080458,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-04 13:09:01

Cuando ya hay datos en HDFS, se puede crear una tabla de colmena externa para describir los datos. Se llama EXTERNO 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 gestiona completamente 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.

 0
Author: Sayat Satybald,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-18 12:56:04

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

Cuando soltamos 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 su contra, pero no darle la propiedad de Hive de los datos.

En ese momento, se define una tabla externa que apunta a esos datos, pero no toma posesión de ellos.

 0
Author: Ankit Nandwal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-05 06:37:30

En Hive también podemos crear una tabla externa. Le dice a Hive que se refiera 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.

 0
Author: Harsimranjit Singh Kler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-30 08:37:04

INTERNA : Tabla es creada Primero a y Datos está cargado más tarde

EXTERNO : Data is presentand Tableis created on top of it.

 -1
Author: Prasad L,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-26 19:21:56

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. Así que será eliminado.

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

 -2
Author: Sonu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-15 12:17:40