【问题标题】:Hadoop and structured dataHadoop和结构化数据
【发布时间】:2014-06-11 14:34:01
【问题描述】:

我有这样的数据的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 的工具(猪支持 json,但没有列表)。我可以按列将其拆分为不同的文件(一个用于事件,一个用于警告,然后通过事件 ID 加入它们),但是有很多子节点(这只是原始格式的一部分),所以每次都加入它们会有问题的。

  • 新列(级别)可以存储在新生成的带有当前数据的 xml 文件中,也可以存储在新文件中,就像将 event_id 映射到级别一样。将所有数据存储在新的 xml 文件中将需要再次生成 xml 文件,但是每次我需要访问级别时,将其存储为不同的文件都需要加入它们。之间有什么关系(只是以某种格式更新行?)。

  • 如果能够轻松地为几行添加新节点/列,那就太好了(比如当有关键级别时,我想添加额外的注释)。使用 xml 可以轻松完成,但如果有列,则需要为所有行添加新列。

  • 大多数工具仅支持平面结构。有像 Hive 和 HQL 这样的工具,但在我的情况下会有太多的连接,所以我更喜欢将数据保存在单个结构化记录中。是否已经有一些解决方案可以解决这个问题?

【问题讨论】:

    标签: xml hadoop hive apache-pig bigdata


    【解决方案1】:

    考虑使用 Avro (http://avro.apache.org) 或 Google Protobuf 的 https://code.google.com/p/protobuf/ 作为存储数据的格式,而不是 XML,并使用 Avro Serde 来解释 Hive 表中的记录。

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

    【讨论】:

      【解决方案2】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-09
        • 1970-01-01
        • 2015-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多