Xml Hadoop与结构化数据
我有xml数据库,数据如下: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>
<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支持版本控制,因此根据基础版本和表定义中使用的模式版本,您可以拥有具有不同列集的不同记录。Avro还应该支持您对任意嵌套和复杂结构的需求。您可以使用XMLLoader来处理数据