¿Dónde almacena Hive archivos en HDFS?


Me gustaría saber cómo encontrar la asignación entre las tablas Hive y los archivos HDFS reales (o más bien, directorios) que representan. Necesito acceder a los archivos de la tabla directamente.

¿Dónde almacena Hive sus archivos en HDFS?

Author: PreethiS, 2011-02-20

9 answers

La ubicación en que se almacenan en los HDFS es bastante fácil de averiguar una vez que sepa dónde buscar. :)

Si vas a http://NAMENODE_MACHINE_NAME:50070/ en tu navegador debería llevarte a una página con un enlace Browse the filesystem.

En el directorio $HIVE_HOME/conf está el hive-default.xml y/o hive-site.xml que tiene la propiedad hive.metastore.warehouse.dir. Ese valor es donde querrá navegar después de hacer clic en el enlace Browse the filesystem.

En el mío, es /usr/hive/warehouse. Una vez que navego a esa ubicación, veo los nombres de mis tablas. Haciendo clic en un el nombre de la tabla (que es solo una carpeta) expondrá las particiones de la tabla. En mi caso, actualmente solo lo tengo particionado en date. Cuando haga clic en la carpeta en este nivel, entonces veré archivos (más particiones tendrán más niveles). Estos archivos son donde los datos se almacenan realmente en los HDFS.

No he intentado acceder a estos archivos directamente, estoy asumiendo que se puede hacer. Me gustaría tener mucho cuidado si usted está pensando en editarlos. :) Para mí-me imaginaría un manera de hacer lo que necesito sin acceso directo a los datos de la colmena en el disco. Si necesita acceso a datos sin procesar, puede usar una consulta de colmena y generar el resultado en un archivo. Estos tendrán exactamente la misma estructura (divisor entre columnas, ect) que los archivos en el HDFS. Hago consultas como esta todo el tiempo y las convierto a CSVs.

La sección sobre cómo escribir datos desde consultas al disco es https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Writingdataintothefilesystemfromqueries

UPDATE

Desde Hadoop 3.0.0 - Alpha 1 hay un cambio en los números de puerto predeterminados. NAMENODE_MACHINE_NAME: 50070 cambia a NAMENODE_MACHINE_NAME: 9870. Utilice este último si se está ejecutando en Hadoop 3.x. La lista completa de cambios de puerto se describe en HDFS-9427

 50
Author: QuinnG,
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-08-10 20:28:18

Es posible que las tablas de Hive no se almacenen necesariamente en un almacén (ya que puede crear tablas ubicadas en cualquier lugar de los HDFS).

Debe usar el comando DESCRIBE FORMATTED <table_name>.

hive -S -e "describe formatted <table_name> ;" | grep 'Location' | awk '{ print $NF }'

Tenga en cuenta que las particiones pueden almacenarse en diferentes lugares y para obtener la ubicación de la partición alpha=foo/beta=bar tendría que agregar partition(alpha='foo',beta='bar') después de <table_name>.

 50
Author: Just,
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-11-29 09:25:39

En el tipo de terminal de Colmena:

hive> set hive.metastore.warehouse.dir;

(imprimirá la ruta)

 24
Author: rajnish,
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-04-08 18:10:07

También es muy posible que escribir show create table <table_name> en la cli de la colmena le dé la ubicación exacta de su tabla de la colmena.

 5
Author: Tyrone Hinderson,
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-30 20:58:16

describe formatted <table_name>; dentro de la cáscara de la colmena.

Observe el valor "Ubicación" que muestra la ubicación de la tabla.

 3
Author: smishra,
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-03-23 23:53:03

Resumir algunos puntos publicados anteriormente, en la colmena.xml, colmena de propiedades.metastore.Warehouse.dir especifica dónde se encuentran los archivos en hadoop HDFS

<property>
   <name>hive.metastore.warehouse.dir</name>
   <value>/user/hive/warehouse</value>
</property>

Para ver archivos, use este comando:

hadoop fs -ls /user/hive/warehouse

O

http://localhost:50070
Utilities > Browse the file system
or
http://localhost:50070/explorer.html#/

Probado bajo hadoop-2.7.3, hive-2.1.1

 2
Author: Jonathan 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-07-11 03:24:13

Si nos fijamos en el sitio de la colmena.archivo xml verá algo como esto

<property>
   <name>hive.metastore.warehouse.dir</name>
   <value>/usr/hive/warehouse </value>
   <description>location of the warehouse directory</description>
 </property>

/usr/hive/warehouse es la ubicación predeterminada para todas las tablas administradas. Las tablas externas pueden almacenarse en una ubicación diferente.

describe formatted <table_name> es el comando hive shell que se puede usar más generalmente para encontrar la ubicación de los datos pertenecientes a una tabla hive.

 0
Author: balboa,
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-05-23 01:47:22

En Hive, las tablas se almacenan en algunos lugares. Específicamente, si usa particiones (que debería, si sus tablas son muy grandes o están creciendo), entonces cada partición puede tener su propio almacenamiento.

Para mostrar la ubicación predeterminada donde se crearán los datos de la tabla o las particiones si los crea a través de los comandos de COLMENA predeterminados: (insert overwrite ... partition ... y tales):

describe formatted dbname.tablename

Para mostrar la ubicación real de una partición en particular dentro de una tabla de COLMENA, haga lo siguiente:

describe formatted dbname.tablename partition (name=value)

Si miras en su sistema de archivos donde una tabla "debería" vivir, y no encuentra archivos allí, es muy probable que la tabla se cree (generalmente de forma incremental) creando una nueva partición y apuntando esa partición a alguna otra ubicación. Esta es una excelente manera de construir tablas a partir de cosas como importaciones diarias de terceros y demás, lo que evita tener que copiar los archivos o almacenarlos más de una vez en diferentes lugares.

 0
Author: Jon Watte,
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-02-23 17:35:40

Otra forma de comprobar dónde se almacena una tabla específica sería ejecutar esta consulta en la interfaz interactiva de la colmena :

show create table table_name;

Donde table_name es el nombre de la tabla de asunto.

Un ejemplo para la consulta anterior en la tabla 'clientes' sería algo como esto:

CREATE TABLE `customers`(
  `id` string, 
  `name` string)
COMMENT 'Imported by sqoop on 2016/03/01 13:01:49'
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY ',' 
  LINES TERMINATED BY '\n' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://quickstart.cloudera:8020/user/hive/warehouse/
   sqoop_workspace.db/customers'
TBLPROPERTIES (
  'COLUMN_STATS_ACCURATE'='true', 
  'numFiles'='4', 
  'totalSize'='77', 
  'transient_lastDdlTime'='1456866115')

UBICACIÓN en el ejemplo anterior es donde usted debe centrarse en. Esa es su ubicación hdfs para hive warehouse.

No te olvides de gustar si te gusta esto solución. ¡Salud!

 0
Author: Kireet Bhat,
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-03-14 22:23:49