将XML放入HBase的正确方法

时间:2016-04-27 15:27:35

标签: xml hadoop mapreduce hdfs hbase

我正在尝试将一些存储在本地的XML文件放入HBase(版本1.1.X)。

我的目标是使用MapReduce( no reduce stage )将这些XML的内容作为字符串存储在我的HBase表中,而不将它们加载到HDFS。

这是我的伪代码:

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

这种解决问题的方法是否正确,还是有更好的方法可以解决?

ps:我不想从我的XML中解析或提取数据,只需存储它们。

提前致谢

2 个答案:

答案 0 :(得分:2)

您可以将它们存储为byte [],而不是将XML字符串存储到Hbase中 并且您可以使用反序列化将其作为对象(序列化类型)检索回来。

您可以使用Apache commons API以下面的方式执行此操作。

例如:

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

用于反序列化,你可以这样做

static Object deserialize(byte[] objectData) 

如果Object可能是w3c文档,则对象应该被wyl文档转换为w3c。

我已经测试了许多类型的对象,而不仅仅是XML。 它应该以相同的方式工作。希望这会有所帮助。

答案 1 :(得分:1)

Hbase并非真正用于大型对象存储。根据XML的大小,HBase可能不是您正在寻找的解决方案。

目前,我正在开发一个由多种文件类型组成的数据库,包括XML。我认为好的是将任何1MB以下的文件存储到HBase,其余文件存储到Hadoop,在SQL或HBase中维护元数据。

这取决于你想用这些数据实现的目标。