企業中,由於領導們的要求,hive中有數據存儲格式很多時候是會變的,比如為了優化將tsv,csv格式改為了parquet或者orcfile。那么這個時候假如是mr作業讀取hive的表數據的話,我們又要重新去寫mr並且重新部署。這個時候就很蛋疼。hcatalog幫我們解決了這個問題,有了它我們不用關心hive中數據的存儲格式。詳細信息請仔細閱讀本文。
本文主要是講mapreduce使用HCatalog讀寫hive表。
hcatalog使得hive的元數據可以很好的被其它hadoop工具使用,比如pig,mr和hive。
HCatalog的表為用戶提供了(HDFS)中數據的關系視圖,並確保用戶不必擔心他們的數據存儲在何處或采用何種格式,因此用戶無需知道數據是否以RCFile格式存儲, 文本文件或sequence?文件。
它還提供通知服務,以便在倉庫中有新數據可用時通知工作流工具(如Oozie)。
HCatalog提供HCatInputFormat / HCatOutputFormat,使MapReduce用戶能夠在Hive的數據倉庫中讀/寫數據。 它允許用戶只讀取他們需要的表和列的分區。 托福備考返回的記錄格式是方便的列表格式,用戶無需解析它們。
下面我們舉個簡單的例子。
在mapper類中,我們獲取表schema並使用此schema信息來獲取所需的列及其值。
下面是map類。
在reduce類中,會為將要寫入hive表中的數據創建一個schema。
最后,創建driver類,並且表明輸入輸出schema和表信息。
當然,在跑上面寫的代碼之前,應該先在hive中創建輸出表。
可能會引起錯誤的地方是沒有設置$HIVE_HOME.
[完]
歡迎點擊閱讀原文或掃二維碼加入浪尖知識星球,獲取更多優質的大數據學習資源和指導。
推薦閱讀:
Hive性能優化(全面)
Hive高級優化
文章來源:https://blog.csdn.net/rlnLo2pNEfx9c/article/details/81713969