hadoop - summoners - hive meaning
¿Diferencia entre las tablas internas de Hive y las tablas externas? (18)
Para responderte Pregunta:
Para tablas externas, Hive no mueve los datos a su directorio de depósito. Si se descarta 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 depósito. Si se descarta la tabla, se eliminarán los metadatos de la tabla y los datos.
Para tu 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 fuente por completo.
Si elimina una tabla externa, el archivo aún permanece en el servidor HDFS.
Como 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 externas son accesibles para cualquier persona que tenga acceso a la estructura de archivos HDFS y, por lo tanto, la seguridad necesita ser administrada en el nivel de archivo / carpeta HDFS.
Los metadatos se mantienen en el nodo maestro y eliminar una tabla externa de HIVE solo elimina los metadatos, no los datos / archivos.
Para tablas internas-
- Almacenado en un directorio basado en la configuración de
hive.metastore.warehouse.dir
, de forma predeterminada las tablas internas se almacenan en el siguiente directorio "/ user / hive / warehouse" , 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 maestro y del HDFS, respectivamente.
- La seguridad interna del archivo de tabla se controla únicamente a través de HIVE. La seguridad debe ser administrada 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 cómo se cargan, controlan y administran los datos.
Use tablas EXTERNAS cuando:
- Los datos también se usan 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 DEJAR. Esto puede aplicarse si está apuntando a un esquema múltiple (tablas o vistas) en 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. , puede tener otro programa o proceso que haga esas cosas.
- No está creando una tabla basada en la tabla existente (AS SELECT).
Use tablas INTERNAS cuando:
- La información es temporal .
- Desea que Hive administre por completo el ciclo de vida de la tabla y los datos .
Fuente :
¿Alguien puede 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 qué quiere decir con los datos y los metadatos se eliminan en interno y solo los metadatos se eliminan en las tablas externas. ¿Alguien puede explicarme en términos de nodos por favor?
Considere este escenario que mejor se adapta a la tabla externa:
Un trabajo de MapReduce (MR) filtra un archivo de registro enorme para escupir n
archivos de sublogs (por ejemplo, cada archivo secundario de registro contiene un registro de tipo de mensaje específico) y la salida, es decir, n
archivos de registro secundario se almacenan en hdfs.
Estos archivos de registro se cargarán en tablas Hive para realizar más análisis, en este caso recomendaría una tabla externa porque los archivos de registro reales se generan y son propiedad de un proceso externo, es decir, un trabajo de MR además de evitar una paso adicional de cargar cada archivo de registro generado en la tabla Hive respectiva también.
Cuando ya hay datos en HDFS, se puede crear una tabla Hive externa para describir los datos. Se llama EXTERNAL porque los datos en la tabla externa se especifican en las propiedades de LOCALIZACIÓN en lugar del directorio de depósito predeterminado.
Al mantener los datos en las tablas internas, Hive maneja completamente el ciclo de vida de la tabla y los datos. Esto significa que los datos se eliminan una vez que se descarta la tabla interna. Si se elimina la tabla externa, los metadatos de la tabla se eliminan pero los datos se guardan. La mayoría de las veces, se prefiere una tabla externa para evitar borrar datos junto con las tablas por error.
El mejor caso de uso para una tabla externa en la sección es cuando desea crear la tabla desde un archivo, ya sea CSV o texto
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. La eliminación de tablas externas eliminará los metadatos pero no los datos.
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 administran de manera eterna desde el almacén. Entonces no se puede eliminar y los clientes que no sean colmenas también pueden usarlo.
En tablas externas, si lo quita, elimina solo el esquema de la tabla, los datos de la tabla existen en la ubicación física. Así que para eliminar los datos, use hadoop fs - rmr tablename. La colmena de tabla administrada tendrá control total sobre las tablas. En tablas externas, los usuarios tendrán control sobre él.
La única diferencia en el comportamiento (no el uso previsto) basada en mis investigaciones y pruebas limitadas hasta el momento (usando Hive 1.1.0 -cdh5.12.0) parece ser que cuando se deja caer 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 enumera alguna otra diferencia que no entendí del todo)
Creo que Hive elige la ubicación donde necesita crear la tabla basada en la siguiente precedencia de arriba a abajo
- Ubicación definida durante la creación de la tabla
- Ubicación definida en la creación de base de datos / esquema en la que se crea la tabla.
- Default Hive Warehouse Directory (Propiedad hive.metastore.warehouse.dir en hive.site.xml)
Cuando la opción "Ubicación" no se utiliza durante la "creación de una tabla de colmenas", se utiliza la regla de precedencia anterior. Esto es aplicable para tablas internas y externas. Esto significa que una tabla interna no necesariamente debe residir en el directorio de Warehouse y puede residir en cualquier otro lugar.
Nota: Es posible que haya omitido algunos escenarios, pero en función de mi exploración limitada, el comportamiento de la tabla interna y de 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.
- Crear tabla con y sin opción de Ubicación
- Crear tabla con y sin opción de partición
- Agregar nuevos datos usando las instrucciones Hive Load e Insert
- 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"
- Dejar caer las tablas
La tabla de colmenas externa tiene la ventaja de que no elimina los archivos cuando dejamos caer las tablas, podemos configurar los formatos de fila con diferentes configuraciones, como serde .... delimited
Las tablas Hive se pueden crear como EXTERNAS o INTERNAS. Esta es una opción que afecta cómo se cargan, controlan y administran los datos.
Use tablas EXTERNAS cuando:
- Los datos también se usan 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 DEJAR. Esto puede aplicarse si está apuntando a múltiples esquemas (tablas o vistas) en un solo conjunto de datos o si está iterando a través de varios esquemas posibles.
- Desea utilizar una ubicación personalizada, como ASV.
- Hive no debe tener datos ni configuraciones de control, directorios, etc., tiene otro programa o proceso que hará esas cosas.
- No está creando una tabla basada en la tabla existente (AS SELECT).
Use tablas INTERNAS cuando:
La información es temporal.
Desea que Hive administre por completo el ciclo de vida de la tabla y los datos.
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 usan fuera de Hive.
Los datos internos de la tabla se almacenan en la carpeta Almacén, los datos de la tabla externa apuntan a la ubicación que mencionó en la creación de la tabla. por lo tanto, cuando elimine la tabla interna, eliminará el esquema y los datos en la carpeta Almacén, pero en la tabla externa su único esquema se perderá. Entonces, cuando desee volver a la tabla, puede crear una tabla con esquema nuevamente y señalar la ubicación. Espero que esté claro ahora.
Para las tablas administradas, Hive controla el ciclo de vida de sus datos. Hive almacena los datos para 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 en 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 le damos a Hive la propiedad de los datos.
En ese momento, se define una tabla externa que apunta a esa información, pero no se apropia de ella.
También tenga en cuenta que Hive es un gran almacén de datos. Cuando quiere soltar una tabla, no quiere perder Gigabytes o Terabytes de datos. Generar, mover y copiar datos a esa escala puede llevar mucho tiempo. Cuando suelta una colmena de tabla ''Administrada'' también borrará sus datos. Cuando suelta una tabla ''Externa'', solo se elimina la definición del esquema de la meta-tienda de la colmena. Los datos en el HDF aún permanecen.
Una tabla externa es una tabla para la cual Hive no administra el almacenamiento. Si elimina una tabla externa, solo se elimina la definición en Hive. Los datos permanecen. Una tabla interna es una tabla que Hive administra. Si elimina una tabla interna, se eliminan tanto la definición en Hive como los datos.
la colmena almacena solo los metadatos en metastore y los datos originales en un lado de la colmena cuando usamos la tabla externa, podemos dar la ubicación '''' por estos nuestros datos originales no tendrán efecto cuando dejemos caer la mesa
INTERNO : la tabla se crea primero y la información se carga más tarde
EXTERNAL : los datos están presentes y la tabla se crea encima de él.
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 la colmena 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 elimina los metadatos.
Cuando suelta una tabla externa, solo descarta los metadatos. Eso significa que colmena es ignorante de esa información ahora. No toca los datos en sí.