select count( distinct id ) from table_name where ...;對乙個表中符合條件的記錄統計不重複的id的總數。由於引入了distinct,因此在map階段無法利用combine對輸出結果消重,必須將id作為key輸出,在reduce階段再對來自於不同map task、相同key的結果進行消重,計入最終統計值。作業執行時的reduce task個數為1,對於統計大資料量時,這會導致最終map的全部輸出到單個reducetask處理。這唯一的reduce task需要shuffle大量的資料,並且進行排序聚合等處理,這使得它成為整個作業的io和運算瓶頸
改進:
select count(*) from (select distinct id from table_name where … ) t;利用hive對巢狀語句的支援,將原來乙個mapreduce作業轉換為兩個作業,在第一階段選出全部的非重複id,在第二階段再對這些已消重的id進行計數。這樣在第一階段我們可以通過增大reduce的併發數,併發處理map輸出。在第二階段,由於id已經消重,因此count(*)操作在map階段不需要輸出原id資料,只輸出乙個合併後的計數即可
hive 列表去重 Hive 資料去重
實現資料去重有兩種方式 distinct 和 group by 1.distinct消除重複行 distinct支援單列 多列的去重方式。單列去重的方式簡明易懂,即相同值只保留1個。多列的去重則是根據指定的去重的列資訊來進行,即只有所有指定的列資訊都相同,才會被認為是重複的資訊。1 作用於單列 se...
hive效能調優
原文 limit 限制調整 因為使用 limit 語句時候,是先執行整個查詢語句,然後再返回部分結果的 set hive.limit.optimize.enable true set hive.limit.row.max.size 10000 set hive.limit.optimize.limi...
Hive效能調優
軟體環境 hive1.2.1 hadoop2.6.4 直接使用hive cli模式執行 1.設定執行引擎 set hive.execution.engine mr set hive.execution.engine spark 如果設定執行引擎為mr,那麼就會呼叫hadoop的maprecude來執...