tipo name español drop datos databases create creacion hadoop hive hdfs

hadoop - español - rename hive table name



¿Dónde almacena Hive los archivos en HDFS? (9)

Me gustaría saber cómo encontrar el mapeo entre las tablas Hive y los archivos HDFS reales (o mejor dicho, directorios) que representan. Necesito acceder a los archivos de la tabla directamente.

¿Dónde almacena Hive sus archivos en HDFS?


En Hive, las tablas se almacenan en algunos lugares. Específicamente, si usa particiones (que debería hacer, si sus tablas son muy grandes o crecientes), 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 HIVE predeterminados: ( insert overwrite ... partition ... y tal):

describe formatted dbname.tablename

Para mostrar la ubicación real de una partición particular dentro de una tabla HIVE, en su lugar haga esto:

describe formatted dbname.tablename partition (name=value)

Si busca 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 en otra ubicación. Esta es una gran forma de crear tablas a partir de elementos como las importaciones diarias de terceros y cosas similares, lo que evita tener que copiar los archivos o almacenarlos más de una vez en diferentes lugares.


En el tipo de terminal Hive:

hive> set hive.metastore.warehouse.dir;

(imprimirá el camino)


La ubicación en la que están almacenados en el HDFS es bastante fácil de descubrir una vez que sepa dónde buscar. :)

Si va a http://NAMENODE_MACHINE_NAME:50070/ en su navegador, debe llevarlo a una página con Browse the filesystem enlace Browse the filesystem .

En el $HIVE_HOME/conf , se encuentra hive-default.xml y / o hive-site.xml que tiene la propiedad hive.metastore.warehouse.dir . A ese valor es a 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. Al hacer clic en el nombre de una tabla (que es solo una carpeta), se expondrán las particiones de la tabla. En mi caso, actualmente solo lo tengo particionado en date . Cuando hago clic en la carpeta en este nivel, veré los archivos (más particiones tendrán más niveles). Estos archivos son donde los datos se almacenan realmente en el HDFS.

No he intentado acceder a estos archivos directamente, supongo que se puede hacer. Tomaría MUCHO cuidado si estás pensando en editarlos. :) Para mí, encontraría una manera de hacer lo que necesito sin acceso directo a los datos de Hive en el disco. Si necesita acceder a datos brutos, puede usar una consulta Hive y enviar el resultado a un archivo. Tendrán exactamente la misma estructura (divisor entre columnas, ect) que los archivos en HDFS . Hago consultas como esta todo el tiempo y las convierto en CSV.

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

ACTUALIZAR

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


Las tablas Hive pueden no almacenarse necesariamente en un almacén (ya que puede crear tablas ubicadas en cualquier lugar del 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 se pueden almacenar en diferentes lugares y para obtener la ubicación de la partición alpha=foo/beta=bar , deberá agregar una partition(alpha=''foo'',beta=''bar'') después de <table_name> .


Otra forma de verificar 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 nombre_tabla es el nombre de la tabla sujeto.

Un ejemplo de 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 debe enfocarse. Esa es la ubicación de su hdfs para el almacén de la colmena.

No olvides agradarme si te gusta esta solución. ¡Aclamaciones!


Resume algunos puntos publicados anteriormente, en hive-site.xml, propiedad hive.metastore.warehouse.dir especifica dónde se encuentran los archivos ubicados 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, colmena-2.1.1


Si miras el archivo hive-site.xml, verás 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 se pueden almacenar en una ubicación diferente.

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


También es muy posible que al escribir show create table <table_name> en el cli de colmena, se obtenga la ubicación exacta de la tabla de colmenas.


describe formatted <table_name>; dentro de la colmena.

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