Hive Tunning(三) 最佳實踐

2021-09-08 09:42:18 字數 2699 閱讀 8033

在上一講的基礎上,我們來做來乙個實際的例子來展示如何在實操中進行高效的hive查詢作業。

(1)首先我們建立乙個表

create external table pos_staging(

txnid string,

txntime string,

givenname string,

lastname string,

postalcode string,

storeid string,

indl string,

productid string,

purchaseamount float,

creditcard string

)row format delimited fields terminated by '|'

location '/user/hdfs/staging_data/pos_staging';

我們建立一張外部表是為了初始化或者載入mapreduce或者pig作業產生的元資料,然後我們自己建立一張優化的表。

(2)建立調優表的時候,我們就要考慮使用哪種分割槽模式,比如按時間分割槽。

以下是兩個關於動態分割槽的引數:

所有節點的動態分割槽的最大數以及每個節點的動態分割槽的最大數

hive.exec.max.dynamic.partitions=1000

hive.exec.max.dynamic.partitions.pernode=100

(3)建立調優表

create table fact_pos

( txnid string,

txntime string,

givenname string,

lastname string,

postalcode string,

storeidstring,

indl string,

productid string,

clustered 和sorted 使用都是同乙個字段,它就是連線的時候需要使用的字段。

buckets也出現了,前面一直不理解的概念,現在出現了還分了24個。

(4)把資料插入到調優表中

from pos_staging

insert overwrite table fact_pos

partition (part_dt)

select

txnid,

txntime,

givenname,

lastname,

postalcode,

storeid,

indl,

productid,

purchaseamount,

creditcard,

concat(year(txntime),month(txntime)) as part_dt

sort by productid;

語句中使用了前面教的自動分割槽的語句,按照年月自動分割槽。

上面的命令當中是個hdfs中存數的fact_pos表增加備份,因為hdfs的資料是存得很分散的,增加備份因為會使得節點上的資料增多,然後查詢的時候,hive

從本地直接就可以獲取到的資料的機率提高,增快查詢速度。

當然考慮到空間的問題,可以減少一下備份的數量。

上述流程我們也可以把它放到oozie中自動執行。

。。。又乙個熟悉的詞出現了。

在hdfs-site.xml或者ambari settings for hdfs, 設定完要重啟。

開啟了這個東東有什麼作用呢?當資料塊在本地的時候,它可以不需要開啟乙個埠來讀,可以直接訪問,就像圖中的閃電那樣。

(5)執行查詢

set hive.mapred.reduce.tasks.speculative.execution=false;

set io.sort.mb=300;

set mapreduce.reduce.input.limit=-1;

select productid, round(sum(purchaseamount),2) as total

from fact_pos

where part_dt between 『201210』 and 『201212』

group by productid

order by total desc

limit 100;

查詢之前先對查詢設定相應的執行引數。

sharding proxy分庫分表最佳實踐

sharding proxy 分庫分表 讀寫分離,它和mycat類似,屬於中介軟體 層,它類似乙個資料庫,後面的分庫分表的多個資料庫,它遮蔽了後端多個資料庫的複雜性,應用開發時直接連線 sharding proxy 即可 如果使用docker,可以執行docker pull shardingsphe...

設計模式最佳實之工廠模式

工廠模式 是建立型設計模式,用於建立物件的介面,讓子類決定new那個類的例項 使用場景 例子 public abstract class factory 定義工廠實現類,根據傳入工廠實現型別生產相應的產品 public class factoryimp extends factorycatch ex...

RabbitMQ實戰 訊息通訊模式和最佳實踐

本系列是 rabbitmq實戰 高效部署分布式訊息佇列 書籍的總結筆記。通過介紹,你會了解到 主要從非同步狀態思維 處理能力擴充套件性 整合複雜度方面,說明面向訊息通訊的好處。非同步狀態思維 當將訊息通訊整合到應用程式時,開發模式將從同步模型變為非同步模型,rabbitmq提供了不同的方法,允許我們...