2014-06-11 112 views
0

我有這樣的數據的XML數據庫:Hadoop和結構化數據

<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來處理它。假設對於每個事件,我想添加一個額外的節點:<級別...... </level>基於< warning>節點。所以現在有多個問題需要解決:

  • 如何在Hadoop中存儲結構化數據?我可以保留在XML中,但我沒有看到任何工具與本機XML/JSON支持(豬支持JSON,但沒有列表)。我可以將它按列分割成不同的文件(一個用於事件,一個用於警告,然後通過事件ID加入),但是有很多子節點(這只是原始格式的一部分),所以每次都加入它們會有問題。

  • 新列(級別)可以存儲在具有當前數據的新生成的xml文件中,或者可以像將event_id映射到級別一樣存儲在新文件中。將所有數據存儲在新的xml文件中將需要再次生成xml文件,但將其存儲爲不同的文件需要每次需要訪問級別時加入它們。之間有什麼(只是更新某些格式的行?)。

  • 能夠輕鬆地爲少數行添加新節點/列會很好(比如當我想添加額外的註釋時有臨界級別)。它可以用xml輕鬆完成,但如果有列,則需要爲所有行添加新列。

  • 大多數工具只支持扁平結構。還有像蜂巢與HQL工具,但會有在我的案例太多的加入,所以我prefere將數據保存在單一的結構化記錄。有沒有解決這個問題的解決方案?

回答

1

看看使用的Avro(http://avro.apache.org)或谷歌的Protobuf的https://code.google.com/p/protobuf/作爲用於存儲數據的格式,而不是XML,爲您的格式,並使用Avro公司SERDE解釋在蜂巢表中的記錄。

的Avro支持版本,所以你可以有不同的列集合,這取決於底層的版本,並在表定義中使用的模式的版本不同的記錄。 Avro還應該支持您對任意嵌套和複雜結構的要求。