hadoop與hive的對映

2021-09-01 13:49:06 字數 1546 閱讀 5990

hadoop與hive的對映

hadoop**轉向hive**說到,很多mr任務可以由hive完成。這幾天,作了一些簡單的彙總:

1、檔案切割(多輸入多輸出)

需求:資料log包含多種資訊,需要將不同的資料資訊重定向到不同的檔案。

hadoop:multipleinputs、multipleoutputs兩個類主要負責多輸入多輸出的處理

hive:利用union all和custom map/reduce scripts,可以對不同的輸入進行不同的處理,然後合併結果;multi table/file inserts、dynamic-partition insert這兩個主要是對同個資料來源(或者某個中間結果),根據條件重定向輸出,特別是中間結果,可以減少很多mr job。

2、獲取檔案的輸入路徑

需求:資料log可能包含日誌伺服器和日期資訊,每個檔案包含的是不同伺服器、不同日期的資料。這個時候只能通過檔名區分資料的伺服器、日期。

hadoop: ((filesplit) reporter.getinputsplit()).getpath()

hive:hive建表時已經指定資料儲存路徑,只能通過元資料庫獲取。但是直到0.8.0版本之前,hive都一直沒有提供相應的函式和介面。hive0.8.0提供了input__file__name、block__offset__inside__file兩個虛擬列,可以獲取檔名和檔案位置。我非常喜歡hive這些改進。hadoop之所以能夠廣泛使用,是因為提供的底層介面,讓使用者自定義處理;hive雖然提高了編寫指令碼的效率,但是功能畢竟有限。這就類似一些高階語言也會提供一些底層語言的語法,以適合不同的場景應用。

3、兩表資料join

需求:資料資訊不可能只儲存在乙個資料檔案/資料中,實際工作經常需要關聯多張表,才能完整獲取檔案資訊。

hadoop: 分為map side join 和reduce side join兩種。reduce side join的實現方式是在map階段給資料來源打標籤,區分資料檔案;然後在reduce階段,獲取來自多個檔案的相同key的value, 然後對於同key,進行多個檔案間的資料join。map side join是一種改進。如果關聯的兩個表,乙個表非常大,而另乙個表可以直接存放到記憶體中。這樣,可以將可以放到記憶體的表直接複製到每個map,然後只需要掃瞄大表,關聯資料即可。

hive:left、right、full join是常見的兩表資料關聯。而判斷表a中的key是否在表b中,則需要用到left semi join

4、獲取配置檔案

需求:**與配置檔案是分離的,這樣有變動的時候,只需要修改配置檔案就能獲得良好的擴充套件。

hadoop:distributedcache 是map/reduce框架提供的功能,能夠快取應用程式所需的檔案 (包括文字,檔案檔案,jar檔案等)。distributedcache.addcachefile是相應實現

hive:add files jars archives

5、不同的資料不同的處理

hive:select transfrom(輸入字段) using '處理指令碼『 as(輸出字段) where 根據條件篩選相應的資料 union all(歸併不同處理指令碼輸出的資料)

Hive之 hive與hadoop的聯絡

hive與hadoop呼叫圖 解析 1 提交sql 交給驅動 2 驅動編譯 解析相關的字段表資訊 3 去metastore查詢相關的資訊 返回字段表資訊 4 編譯返回資訊 發給驅動 5 驅動傳送乙個執行計畫 交給執行引擎 6 執行計畫 三種形式 metastore namenode metastor...

Hive與Hadoop的呼叫關係

1 提交sql 交給驅動 3 去metastore查詢相關的資訊返回字段表資訊 4 編譯返回資訊 發給驅動 5 驅動傳送乙個執行計畫交給執行引擎 6 執行計畫 6.1 ddls 對資料庫表的操作的直接和metastore互動 create table t1 name string 6.1 把job交...

Hadoop之hive的drop table恢復

一 恢復過程 在之前我有對hadoop的 站有過了解,就是將hdfs dfs rm刪除掉的檔案進行恢復,只需要hdfs dfs mv將檔案從 站中搬過來就行,我就先使用這個方法,但是效果不佳,執行select count from table name,得到的結果為0。這個時候我想到這個表被drop...