hive-索引(加優化)
1,索引
hive只有有限的索引功能,hive中沒有普通關係型資料庫中鍵的概念,但是還是可以對一些欄位建立索引來加速某些操作的,一張表的索引資料在另一張表中,說到索引我們也可以理解為這是hive提供的優化功能。他可以減少MapReduce的輸入資料量,因為在索引表中他把每個欄位的索引和偏移量都計算出來,可以說查詢的速度是很快了,尤其是大資料集
1,建立索引我們有一個現成的表zxz_5.
建立格式: create index zxz_5_index on table zxz_5 (nid) as 'bitmap' with deferred rebuild 注意:as 後面跟的是索引處理器,bitmap處理器普遍應用於排重後值較小的列; with deferred rebuild 他是必須要填加的
2,我們建立出來的索引表可以show tables; 檢視
他的預設顯示就是:default__zxz_5_zxz_5_index__ 後面是我們指定的索引表名他們是連在一塊的
3,desc show 這個索引表,裡面就是指定的索引列,和一些桶欄位和偏移量;如果你指定的表是分割槽表,那麼他會顯示分割槽索引而不是全域性索引了。
4,我們要把重建索引表才能得到索引資料;
普通重建索引: alter index zxz_5_index on zxz_5 rebuild
分割槽重建索引:alter index zxz_5_index on zxz_5 partition (year="2018") rebuild
5,我們顯示一些索引表的資訊:
show fromated index on zxz_5;
6,刪除索引表:
drop index zxz_5_index on table zxz_5; 注意:如果我們把原表刪除索引表會自動刪除
2,hive優化:
MapReduce
-------------------
Map : map -> partition -> sortAndSpill() --> Combiner
hive.exec.compress.output=false //輸出檔案是否壓縮,預設false
hive.exec.compress.intermediate=false //啟用中間檔案是否壓縮,預設false
hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec //設定壓縮編解碼器,預設空
hive.intermediate.compression.type //壓縮型別hive調優
------------------
1.使用explain解析查詢結果
$beeline>explain [extended] select sum(id) from customers ;
limit優化
--------------------
1.
<property>
<name>hive.limit.optimize.enable</name>
<value>false</value>
<description>Whether to enable to optimization to trying a smaller subset of data for simple LIMIT first.</description>
</property>
<property>
<name>hive.limit.row.max.size</name>
<value>100000</value>
<description>When trying a smaller subset of data for simple LIMIT, how much size we need to guarantee each row to have at least.</description>
</property>
<property>
<name>hive.limit.optimize.limit.file</name>
<value>10</value>
<description>When trying a smaller subset of data for simple LIMIT, maximum number of files we can sample.</description>
</property>
<property>
<name>hive.limit.optimize.fetch.max</name>
<value>50000</value>
<description>
Maximum number of rows allowed for a smaller subset of data for simple LIMIT, if it is a fetch query.
Insert queries are not restricted by this limit.
</description>
</property>
<property>
<name>hive.limit.pushdown.memory.usage</name>
<value>0.1</value>
<description>
Expects value between 0.0f and 1.0f.
The fraction of available memory to be used for buffering rows in Reducesink operator for limit pushdown optimization.
</description>
</property>
<property>
<name>hive.limit.query.max.table.partition</name>
<value>-1</value>
<description>
This controls how many partitions can be scanned for each partitioned table.
The default value "-1" means no limit.
</description>
</property>hadoop
-------------------
1.local
nothing!
不需要啟動單獨程序。
所有的java程式都在一個jvm中執行。2.偽分散式
3.完全分散式
本地模式:
------------------------
hive.exec.mode.local.auto=true //
hive.exec.mode.local.auto.inputbytes.max=134217728 //
hive.exec.mode.local.auto.input.files.max=4 //JVM重用
------------------------
[不推薦]
SET mapred.job.reuse.jvm.num.tasks=5; //在mapreduce-1使用,yarn不適用。
com.it18zhang.myhadoop273_1211.join.reduce.App[yarn]
//mapred-site.xml
mapreduce.job.ubertask.enable=false //啟用當個jvm按序一些列task,預設false
mapreduce.job.ubertask.maxmaps=9 //最大map數>=9,只能調低。
mapreduce.job.ubertask.maxreduces=1 //目前只支援1個reduce.
mapreduce.job.ubertask.maxbytes=128m //併發執行
-------------------------
explain解釋執行計劃,對於沒有固定依賴關係的task,
可以進行併發執行。
hive.exec.parallel=true //啟用mr的併發執行,預設false
hive.exec.parallel.thread.number=8 //設定併發執行的job數,預設是8.
map端連線
------------------------
SET hive.auto.convert.join=true; //
SET hive.mapjoin.smalltable.filesize=600000000; //檔案<= 指定值時可以啟用map連線。
SET hive.auto.convert.join.noconditionaltask=true; //不需要在select中使用/*+ streamtable(customers) */暗示.
map bucket端連線
-------------------------
SET hive.auto.convert.join=true; --default false //
SET hive.optimize.bucketmapjoin=true; --default false //
SkewJoin
-------------------------
傾斜連線.
SET hive.optimize.skewjoin=true; //開啟傾斜優化
SET hive.skewjoin.key=100000; //key量超過該值,新的key傳送給未使用的reduce。
SET hive.groupby.skewindata=true; //在groupby中使用應用資料傾斜優化,預設false.
analyze
-----------------------
對錶、partition,column level級別元資料進行統計,作為input傳遞給
CBO(cost-based Optimizer),會選擇成本最低查詢計劃來執行。
analyze table customers compute statictics ;
desc extended customers ;
beeline
---------------------------
beeline -u jdbc:hive2:// //執行在本地模式下,沒有啟動hiveserver2伺服器。
create table tt (id int,hobbies array<String>,addr struct<province:string,city:string,street:string>,scores map<string,int> ) row format delimited fields terminated by ' ' collection items terminated by ',' map keys terminated by ':' lines terminated by '\n' stored as textfile ;insert into tt values(1,array('1','2','3'),struct('province':"hebei",'city':'baoding','street':'renmin'),map('a':100,'b':200));
create table stru(id int,a struct<p1:string,p2:string>) row format delimited ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' COLLECTION ITEMS TERMINATED BY ',' MAP KEYS TERMINATED BY ':' STORED AS TEXTFILE;
create table map(id int ,a map<string,int>) row format delimited fields terminated by ' ' collection items terminated by ',' map keys terminated by ':' lines terminated by '\n' stored as textfile ;