logo xml hadoop mapreduce hbase

logo - Maneras adecuadas de poner XML en HBase



hbase 2 (2)

Estoy tratando de poner en HBase (versión 1.1.X) algunos archivos XML almacenados localmente.

Mi objetivo es almacenar el contenido de esos XML en mi tabla HBase como cadena usando MapReduce ( sin etapa de reducción ) sin cargarlos en HDFS.

Aquí está mi pseudo código:

fetchXMLs(path); XML2OneLineFile(); configureHBase(); // + establishing connection Map(input, output); //input: one XML file in one line; output : is the Put() of HBase; closeConnection();

¿Es correcta esta forma de abordar el problema, o hay mejores formas de hacerlo?

ps: no quiero analizar ni extraer datos de mi XML, solo almacénelos.

Gracias por adelantado


Hbase no está hecho para el almacenamiento de objetos grandes . Dependiendo del tamaño de su xml, HBase podría no ser la solución que está buscando.

En este momento, estoy trabajando en una base de datos que consta de varios tipos de archivos, incluido xml. Lo que pensé que era bueno era almacenar cualquier archivo en 1Mo en HBase, y el resto en Hadoop, manteniendo metadatos en SQL o en HBase.

Depende mucho de lo que quiere lograr con estos datos.


En lugar de almacenar cadenas XML en Hbase, puede almacenarlas como byte [] y puede recuperarlas como un objeto (de tipo serializado) utilizando la deserialización.

Puedes hacerlo de la siguiente manera usando la API de Apache commons.

Por ejemplo:

byte[] xmlInBytes = org.apache.commons.lang.SerializationUtils.serialize(Serializable obj)

para deserializar, puedes hacer esto

static Object deserialize(byte[] objectData)

si Object puede ser un documento w3c , el objeto debe escribirse en el documento w3c.

Ya he probado con muchos tipos de objetos, no solo XML. Debería funcionar de la misma manera. Espero que esto ayude.