1. 程式人生 > >hive:textfile,sequencefile和rcfile的使用與區別詳解

hive:textfile,sequencefile和rcfile的使用與區別詳解

 hive在建立表時預設儲存格式是textfile,或者顯示自定義的stored as textfile.很多人知道hive常用的儲存格式有三種,textfile,sequencefile,rcfile.但是卻說不清楚這三種格式的幹什麼用的,本質有有什麼區別?適合什麼時候用?
         為什麼hive會有多種儲存格式?因為hive是文字批處理系統,所以就存在一個往hive中匯入資料的問題,首先資料的儲存格式有多種,比如資料來源是二進位制格式, 普通文字格式等等,而hive強大之處不要求資料轉換成特定的格式,而是利用hadoop本身InputFormat API來從不同的資料來源讀取資料,同樣地使用OutputFormat API將資料寫成不同的格式。所以對於不同的資料來源,或者寫出不同的格式就需要不同的對應的InputFormat和Outputformat類的實現。

        以stored as textfile(其實這就是下面stored as inputformat -outputformat的縮減寫法)為例,其在底層java API中表現是輸入InputFormat格式:TextInputFormat以及輸出OutputFormat格式:HiveIgnoreKeyTextOutputFormat.這裡InputFormat中定義瞭如何對資料來源文字進行讀取劃分,以及如何將切片分割成記錄存入表中。而Outputformat定義瞭如何將這些切片寫回到檔案裡或者直接在控制檯輸出。

  STORED AS INPUTFORMAT 
           'org.apache.hadoop.mapred.TextInputFormat' 
  OUTPUTFORMAT 
          'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
      實際上hive使用一個TextInputFormat物件將輸入流分割成記錄,然後使用一個HiveIgnoreKeyTextOutputFormat物件來將記錄格式化為輸出流(比如查詢的結果),再使用Serde在讀資料時將記錄解析成列。在寫資料時將列編碼成記錄。所以stored as ''只是決定了行級別(記錄級別 )的儲存格式,而實際將記錄解析成列依靠的則是Serde物件,比如hive預設的ROW FORMAT SERDE   'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'  。或者使用者自定義的Serde格式。

   textfile,sequencefile和rcfile的三種儲存格式的本質和區別
 

雖然hive中常見的有3種儲存格式,但是這三種儲存格式的資料可以相互轉化,而且不需要對應的轉換工具。具體如何轉換,參考下面部落格。

原文參考:https://blog.csdn.net/qq_26442553/article/details/80300714