Hive -- Fetch Task

2021-03-02 跟著卓仔一起成長

在使用Hive的時候,有時候只是想取表中某個分區的前幾條的記錄看下數據格式,比如一個很常用的查詢:

select * from foo where partition_column=bar limit 10;


Hive命令都要轉換為MapReduce任務去執行,但是因為啟動MapReduce需要消耗資源,然後速度還很慢(相比較於直接從本地文件中讀取而言),

所以Hive對於查詢做了優化,對於某些查詢可以不啟動MapReduce任務的就儘量不去啟動MapReduce任務,而是直接從本地文件讀取。這種對數據基本沒什麼要求,隨便來點就行,既然如此為什麼不直接讀取本地存儲的數據作為結果集呢。

fetch task就是不啟動MapReduce,直接讀取本地文件輸出結果。

Hive有3個參數控制Fetch task, 對應2個優化器(優化那篇文章說了)

hive.fetch.task.conversion

hive.fetch.task.conversion.threshold

hive.fetch.task.aggr

對應優化器為SimpleFetchOptimizer和SimpleFetchAggregation

hive.fetch.task.conversion:

這個屬性有三個可選的值:

none:關閉fetch task優化

minimal:只在select *、使用分區列過濾、帶有limit的語句上進行優化

more:在minimal的基礎上更加強大了,select不僅僅可以是*,還可以單獨選擇幾列,並且filter也不再局限於分區欄位,同時支持虛擬列(別名)

對於查詢所有列的情況,會使用fetch task:

 

如果是查詢部分列呢?

嘗試將hive.fetch.task.conversion設置為none,再查詢:

啟動了MapReduce任務。

 

hive.fetch.task.conversion.threshold:


在輸入大小為多少以內的時候fetch task生效,默認1073741824 byte = 1G。

hive.fetch.task.aggr:


對於沒有group by的聚合查詢,比如select count(*) from src,這種最終都會在一個reduce中執行,像這種查詢,可以把這個置為true將將其轉換為fetch task,這可能會節約一些時間。

對應優化器:SimpleFetchAggregation

總結!


hive源碼已經看了快一個月了,這種應該就能看完了。

相關焦點

  • Hive性能調優 | Fetch抓取
    在hive-default.xml.template文件中hive.fetch.task.conversion默認是more,老版本hive默認是minimal,該屬性修改為more以後,在全局查找、欄位查找、limit查找等都不走mapreduce。
  • hive強制select * 進行MapReduce任務
    原因就是因為hive的優化,使得沒有進行MapReduce任務,而是在那個hiveserver2本地機器上啟動fetch task,數據量巨大的時候,就可能使它崩潰了。  解決辦法        現在我們採用的辦法是,禁用掉hive的這些features,強制使用MapReduce執行語句,這樣壓力就不會丟給那一臺hiveserver2機器,而是整個集群來承擔。
  • Hive高級-調優
    =true; -- 默認falseSET hive.stats.fetch.column.stats=true; -- 默認trueSET hive.stats.fetch.partition.stats=true;定期執行表(分析的命令:analyze)的分析,分析後的數據放在元資料庫中。
  • Hive LLAP
    內容目錄1 hive llap該怎麼部署2 注意事項3 llap初始化4 性能測試5 總結連結LLAP是hive 2.0.0版本引入的新特性,hive官方稱為(Live long and process),hortonworks公司的CDH稱為(low-latency analytical processing),其實它們都是一樣的
  • 大數據分析師工程師入門6-HIVE進階
    ;name>hive.limit.optimize.fetch.max</name> <value>50000</value> </property>說明:hive.limit.optimize.enable:是否啟用limit優化。
  • 大數據面試題(Hive優化措施)
    在hive-default.xml.template文件中hive.fetch.task.conversion默認是more,老版本hive默認是minimal,該屬性修改為more以後,在全局查找、欄位查找、limit查找等都不走mapreduce。
  • HiveSQL優化方法與實踐(推薦收藏)
    by有數據傾斜的時候進行負載均衡:Set hive.groupby.skewindata = true;# hive自動進行負載均衡;策略就是把MR任務拆分成兩個MR Job:第一個先做預匯總,第二個再做最終匯總;第一個Job:Map輸出結果集中緩存到maptask
  • 最新Hive的高頻面試題新鮮出爐了!
    不是,從Hive0.10.0版本開始,對於簡單的不需要聚合的類似SELECT  from LIMIT n語句,不需要起MapReduce job,直接通過Fetch task獲取數據。9、說說對Hive桶表的理解?
  • 手把手教你在 Windows 平臺搭建本地 Hive 訪問環境
    連接url中hive也可以修改為其他名字,表示hive存儲元數據的資料庫的名稱。hive.metastore.warehouse.dir表示默認情況hive管理表的數據存儲位置。而在這個配置的hive下創建資料庫或表,/tmp/hive/warehouse會識別為以fs.defaultFS為前綴的hdfs路徑,在本文的配置中就是hdfs://localhost:9000/tmp/hive/warehouse,如果hive.metastore.warehouse.dir被配置為D:/tmp/hive/warehouse則hive會認為是hdfs://localhost:9000
  • 常用Hive函數的學習和總結
    由於公眾號對代碼的支持不太友好,您可以在後臺回復「hive函數」獲取本文的PDF版本,方便閱讀。type=1&query=abc&id=1234&task_id=11112    https://ty.facebook.com/dwd/social?
  • Hive 不為人知 但 到處都是Hook!
    今天看hive源碼的時候看到了hook, 之前從沒聽過,特意學習了一下。而且看源碼的時候發現hook 到處都是,每個類都有點那種。2. org.apache.hadoop.hive.ql.HiveDriverRunHook.preDriverRun() 讀取 hive.exec.pre.hooks 中的配置,來看 pre 需要運行的 hook. 3. org.apache.hadoop.hive.ql.Driver.compile() 開始處理 query,並且生成 AST。
  • hive sql 優化心得
    下面為大家介紹一下hive的優化器以及一些常見的sql技巧。常見的優化器如果你想查看hive的優化器,可以從github上面拉一份hive的源碼,在org.apache.hadoop.hive.ql.optimizer目錄下可以看到hive裡面有哪些邏輯優化器。
  • Hive On LLAP搭建&常見問題
    這裡hive.llap.daemon.service.hosts配置為運行在yarn上的LLAP服務名。這裡可以自定義設置,但要與下一步中使用hive命令生成的LLAP環境包中的服務名一致。> <property> <name>hive.execution.mode</name> <value>llap</value></property><property> <name>hive.llap.execution.mode</name> <value>all<
  • Hive數據倉庫實戰
    >mv hive-env.sh.template hive-env.shmv hive-default.xml.template hive-site.xmlvim ..:3306/chongdianleme_hive?
  • 【SQL】詳細講解如何進行Hive性能優化
    設置合理的map reduce的task數,能有效提升性能。(比如,10w+級別的計算,用160個reduce,那是相當的浪費,1個足夠)。了解數據分布,自己動手解決數據傾斜問題是個不錯的選擇。相關的參數為:hive.join.emit.interval = 1000hive.mapjoin.size.key = 10000hive.mapjoin.cache.numrows = 100003.5GROUP
  • 一網打盡Hive高頻面試題
    (2)merge// 輸出合併小文件SET hive.merge.mapfiles = true; SET hive.merge.mapredfiles = true; SET hive.merge.size.per.task = 268435456; SET hive.merge.smallfiles.avgsize = 16777216
  • Hadoop數據分析之Hive
    創建資料庫hive > create database db_hive;hive > create database if not exists db_hive;-- 查詢資料庫 show databases like 'db_hive*';-- 查看資料庫詳情desc database db_hive;-- 顯示資料庫詳細信息desc database extended
  • 【乾貨】Hive常用函數大全
    舉例:hive> select1 from lxw_dual where 'football' like 'foot%';1hive> select1 from lxw_dual where 'football' like 'foot____';1注意:否定比較時候用NOT ALIKE Bhive
  • 深入淺出Hive數據傾斜
    hive|spark|hive|hbase   hadoop|hive|spark|hive sqoop|flume|scala|scala具體步驟如下:1.1  MapReduce讀取HDFS中的文件並進行切割,將每一行解析成一個<k,v>(初始的k值是根據偏移量來的)。
  • Flink寫入hive測試
    序言:前段時間測試讀取hive數據,今天測試寫入hive一、插件版本 flink 1.11.1  hive 2.3.6