我正在尝试将一些存储在本地的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中解析或提取数据,只需存储它们。
提前致谢
答案 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中维护元数据。
这取决于你想用这些数据实现的目标。