【问题标题】:Proper ways to Put XML into HBase将 XML 放入 HBase 的正确方法
【发布时间】:2016-04-27 15:27:35
【问题描述】:

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

我的目标是使用 MapReduce(no reduce stage)将这些 XML 的内容作为字符串存储在我的 HBase Table 中,而不将它们加载到 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 中解析或提取数据,只是存储它们。

提前致谢

【问题讨论】:

    标签: xml hadoop mapreduce hdfs hbase


    【解决方案1】:

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

    您可以使用 Apache commons API 通过以下方式做到这一点。

    例如:

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

    为了反序列化,你可以这样做

    static Object deserialize(byte[] objectData) 
    

    如果 Object 可能是 w3c 文档,则应该将对象类型转换为 w3c 文档。

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

    【讨论】:

      【解决方案2】:

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

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

      这很大程度上取决于您想用这些数据实现什么。

      【讨论】:

      • 确实,我的 XML 文件并不大,但数量众多;换句话说,我将不得不在短时间内存储大量小型 XML(大约 90.000 个文件,从 80KB 到 500KB 不等)。
      • 那么Hbase应该是可以的,如果你不需要扫描这些文件的内容,只需将内容转储到一个列属性中就可以了。但是,它会减慢您的扫描速度(因为它必须扫描每个文件的所有内容)。您需要如何访问数据?
      • 数据将通过目标获取访问到我的 Hbase 表中的特定(很少全部)记录。那么不将文件加载到 HDFS 的想法仍然正确吗?
      • 是的,我想是的。我还没有对它进行过广泛的测试,所以我不知道这样做是否会降低很多性能。但如果你只做得到它应该没问题。
      猜你喜欢
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多