Xml Hadoop与结构化数据

Xml Hadoop与结构化数据,xml,hadoop,hive,apache-pig,bigdata,Xml,Hadoop,Hive,Apache Pig,Bigdata,我有xml数据库,数据如下: <events> <event id="123"> <location>ABC</location> <subsystem>Storage</subsystem> <warning> <date>2014-04-01</date>

我有xml数据库,数据如下:

<events>
      <event id="123">
            <location>ABC</location>
            <subsystem>Storage</subsystem>
            <warning>
                <date>2014-04-01</date>
                <text>warning1<text/>
            </warning>
            <warning>
                <date>2014-04-02</date>
                <text>warning2<text/>
            </warning>
            <warning>
                <date>2014-04-03</date>
                <text>warning3<text/>
            </warning>
       </event>
       ....
</events>

基础知识
存储
2014-04-01
警告1
2014-04-02
警告2
2014-04-03
警告3
....
数据量正在增长,所以我想改用Hadoop处理它。假设对于每个事件,我想添加一个额外的节点:。。。。。。基于节点。所以现在有很多问题需要解决:

  • 如何在Hadoop中存储结构化数据?我可以将它保存在xml中,但我没有看到任何支持原生xml/json的工具(pig支持json,但没有列表)。我可以按列将其拆分为不同的文件(一个用于事件,一个用于警告,然后按事件id连接它们),但有很多子节点(这只是原始格式的一部分),因此每次连接所有子节点都会有问题

  • 新列(级别)可以用当前数据存储在新生成的xml文件中,也可以存储在新文件中,就像将事件id映射到级别一样。将所有数据存储在新的xml文件中需要再次生成xml文件,但存储不同的文件需要在每次需要访问该级别时将它们连接起来。这两者之间有什么区别吗(只是以某种格式更新行?)

  • 如果能够简单地为几行添加新节点/列(比如当有关键级别时,我想添加额外注释),那就太好了。使用xml很容易做到这一点,但如果有列,则需要为所有行添加新列

  • 大多数工具只支持平面结构。有像Hive和HQL这样的工具,但在我的例子中会有太多的连接,所以我更喜欢将数据保存在单个结构化记录中。已经有解决这个问题的方法了吗

查看使用Avro()或Google Protobuf作为存储数据的格式,而不是XML作为存储格式,并使用Avro Serde解释配置单元表中的记录


Avro支持版本控制,因此根据基础版本和表定义中使用的模式版本,您可以拥有具有不同列集的不同记录。Avro还应该支持您对任意嵌套和复杂结构的需求。

您可以使用XMLLoader来处理数据