Hive Fetch Task
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
show?tables;?metastore->>mysql;? select?*?from?bi.dpods_dp_unsubscribe?where?hp_statdate?=?'2015-03-22'?limit?10;?-》不起job? select?dpid?from?bi.dpods_dp_unsubscribe?where?hp_statdate?=?'2015-03-22'?limit?10;?->起job,需要resource?manager如果你想查詢某個表的某一列,Hive默認是會啟用MapReduce Job來完成這個任務(wù),如下: 我們都知道,啟用MapReduce Job是會消耗系統(tǒng)開銷的。對于這個問題,從Hive0.10.0版本開始,對于簡單的不需要聚合的類似(SELECT columns from table_name)不需要起MapReduce job,直接通過Fetch task獲取數(shù)據(jù),可以通過設(shè)置如下屬性實現(xiàn):
set?hive.fetch.task.conversion=more;?//?簡單查詢就不走map/reduce了,直接讀取hdfs文件進行filter過濾。但是有數(shù)據(jù)量大時要等很長時間,且沒有任何返回。 set?hive.fetch.task.conversion=minimal;?//?任何簡單select都會走map/reduce;開啟了Fetch任務(wù),所以對于上述簡單的列查詢不在啟用MapReduce job。上面的兩種方法都可以開啟了Fetch任務(wù),但是都是臨時起作用的;如果你想一直啟用這個功能,可以在${HIVE_HOME}/conf/hive-site.xml里面加入以下配置:?
<property><name>hive.fetch.task.conversion</name><value>more</value><description>Some?select?queries?can?be?converted?to?single?FETCH?task?minimizing?latency.Currently?the?query?should?be?single?sourced?not?having?any?subquery?and?should?not?haveany?aggregations?or?distincts?(which?incurrs?RS),?lateral?views?and?joins.1.?minimal?:?SELECT?STAR,?FILTER?on?partition?columns,?LIMIT?only2.?more????:?SELECT,?FILTER,?LIMIT?only?(+TABLESAMPLE,?virtual?columns)</description> </property>meta store查詢:
show?tables; desc?database?finance;PS:
發(fā)現(xiàn)hive就可以啟動起來了,其實我們只需要把hive理解為幾個部分即可:metastore、thrift server和剩下的hive,這幾個部分都是可以分開部署的,放在不同的服務(wù)器上,這樣的設(shè)計增加了hive的ha和可擴展性 但是分開部署會犧牲很大的可維護性,也增加了運維的復(fù)雜性,所以一般還是把元數(shù)據(jù)留著mysql中其他的部分放在一個jvm中。 hive也是個cs結(jié)構(gòu)的東西 thrift是負責(zé)client和server通信的。?
轉(zhuǎn)載于:https://my.oschina.net/rathan/blog/603415
總結(jié)
以上是生活随笔為你收集整理的Hive Fetch Task的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MDEV Primer
- 下一篇: python 3.x urllib学习