xml - Hadoop 和结构化数据

标签 xml hadoop hive apache-pig bigdata

我的 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 文件中,也可以存储在新文件中,就像将 event_id 映射到级别一样。将所有数据存储在新的 xml 文件中将需要再次生成 xml 文件,但存储不同的文件将需要在每次我需要访问级别时加入它们。两者之间是否存在某种差异(仅以某种格式更新行?)。

  • 能够轻松地为几行添加新节点/列会很棒(比如当存在临界级别时,我想添加额外的注释)。使用 xml 可以轻松完成,但如果有列,则需要为所有行添加新列。

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

最佳答案

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

Avro 支持版本控制,因此您可以拥有包含不同列集的不同记录,具体取决于基础版本和表定义中使用的架构版本。 Avro 还应支持您对任意嵌套和复杂结构的要求。

关于xml - Hadoop 和结构化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24165676/

相关文章:

hadoop - 为什么 Hadoop 使用 Kerberos 而不是 PKI/OAuth 进行身份验证?

java - 根据reducer的值升序排序

hadoop - 在 HIVE 中运行查询时如何更改 Tez 作业名称

python - 统一码编码错误 : 'ascii' codec can't encode character u'\u2019' in position 126: ordinal not in range(128)

c# - 表示具有相同名称的 n 层深度嵌套 XML 节点的最佳方式?

.net - XDocument 和 BOM(字节顺序标记)问题

hadoop - 启动 hive 和 spark 时未发现合适的驱动程序错误

java - 将 XML 的正则表达式部分与 java 匹配时出现问题

hadoop - Hadoop:resourcemanager不在本地主机上运行

sql - HIVE中如何获取一个数组中的所有元素而不是另一个数组中的所有元素?