hadoop与结构化数据

lvjbypge  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(657)

我有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>

数据量在增长,所以我想改用hadoop来处理它。假设对于每个事件,我想添加一个额外的节点:…基于节点。所以现在有很多问题需要解决:
如何在hadoop中存储结构化数据?我可以将它保存在xml中,但是我没有看到任何支持原生xml/json的工具(pig支持json,但是没有列表)。我可以将它按列拆分为不同的文件(一个用于事件,一个用于警告,然后按事件id连接它们),但是有很多子节点(这只是原始格式的一部分),所以每次连接所有子节点都会有问题。
新列(级别)可以用当前数据存储在新生成的xml文件中,也可以存储在新文件中,就像将事件标识Map到级别一样。将所有数据存储在新的xml文件中需要再次生成xml文件,但存储不同的文件需要在每次需要访问级别时连接它们。这两者之间有什么区别吗(只是以某种格式更新行?)。
如果能够简单地为几行添加新的节点/列就太好了(比如当有关键级别时,我想添加额外的注解)。使用xml可以很容易地完成,但如果有列,则需要为所有行添加新列。
大多数工具只支持平面结构。有像hive和hql这样的工具,但是在我的例子中会有太多的连接,所以我更喜欢将数据保存在单个结构化记录中。已经有解决这个问题的办法了吗?

ehxuflar

ehxuflar1#

看看使用avro(http://avro.apache.org )或者谷歌protobuf的https://code.google.com/p/protobuf/ 作为存储数据的格式,而不是xml作为格式,并使用avro serde解释配置单元表中的记录。
avro支持版本控制,因此根据基础版本和表定义中使用的模式版本,可以使用不同的列集创建不同的记录。avro还应该支持您对任意嵌套和复杂结构的需求。

gev0vcfq

gev0vcfq2#

您可以使用xmloader来处理数据http://pig.apache.org/docs/r0.7.0/api/org/apache/pig/piggybank/storage/xmlloader.html

相关问题