hive可以讓你在hadoop上使用sql,但是在分布系統上的sql的調優是不同的。這裡有12個技巧能夠幫助你。
hive並不是乙個關係型資料庫,但它假裝是大部分情況中的乙個。它有**,執行sql,並且支援jdbc和odbc。
這個啟示有利及不利的訊息:hive不執行查詢資料庫方式。這是乙個很長的故事,但是我在工作周花了80多個小時親自調整hive。不用說,我不必再頭疼了。因此,為了您的利益,這裡有一些建議,讓你的hive專案比我的執行的快一點。
1、不要使用mapreduce
你是否相信tez,spark或者impala,但是不相信mapreduce。它是緩慢的,它比hive還要慢。如果你在hortonwork的分布,你可以在指令碼的頂部輸入 set hive.execution.engine=tez
在子句中使用impala.希望當你的impala不再合適的時候設定 hive.execution.engine=spark
2、不要在sql字串配對
apache hive擬人畫
3、不要加入乙個子查詢
你最好建立乙個臨時列表,然後加入臨時表不詢問hive如何智慧型的處理子查詢。也就是說不要這麼做。
而是要這麼樣做
在這一點上,它真的不應該在hive的進化上如此之快,但是它通常是這樣的。
4、使用parquet或者orc,但是不要把它們轉化成運動
5、嘗試把向量化開啟或者關閉
增加在你的指令碼的頂端。嘗試讓它們開或關,因為向量化在hive的新版本中似乎有一些問題。
6、不要用結構加入
我不得不承認我原本的大腦的sql語法依然是sql-92時代,所以我無論如何不傾向於使用結構。但是如果你做一些像對復合pks子句超重複的事情,結構是方便的。不幸的是,hive隔斷了它們——尤其是在子句上,當然,在較小的資料集並沒有這麼做,也沒有產生任何錯誤的時間。在絕對禁區,你得到乙個有趣的向量誤差。這個限制是沒有記錄任何我所知道的地方。把這個看成是乙個有序的方式來了解你的執行引擎的內部結構!
7、檢查容器的尺寸
8、啟動統計
hive的確有點愚蠢的東西加入,除非資料啟動起來。你可能還想在impala使用查詢提示。
9、考慮mapjoin優化
如果你對查詢做了解釋,你可能會發現最近hive的版本足夠聰明到去自動應用優化的。但是你需要去調整他們。
10、如果可以,把最大的表放在最後
11、區分你的朋友……額……
如果你在許多子句的地方有乙個專案,如乙個日期(但是並不是乙個理想的範圍)或者重複的位置,您可能有您的區分鍵!分割槽的基本意思是」**成為它自己的目錄,」這意味著不是在尋找乙個大的檔案,hive檢視乙個檔案,因為你用你的join/where從句讓你只看location=』nc』,這是你的乙個小資料集。此外,與列值不同,您可以在負載資料包表中推分割槽。但是,請記住,hdfs不喜歡小的文件。
12、使用雜湊表列的比較
如果你在每個查詢中比較相同的10個字段,考慮使用()對比總結。這些有時是非常有用的,你可能會把它們放在乙個輸出表中。注意hive0.12是低解析度的,但是更好的可以使用的值在0.13。
效能優化 讓nodejs再快一點
本文首次發表於但從node.js 服務端 的角度來看,js本身的執行時間卻變得至關重要,還是之前的例子,如果執行時間從30ms降到3ms,理論上qps就能提公升10倍,換句話說,以前要10臺伺服器才能扛住的流量現在1臺伺服器就能扛住,而且響應時間更短.那到底node端如何做效能優化呢?有兩種方法,一...
如何讓mysql索引更快一點
在 innodb 中,從二級索引回到主鍵索引查詢資料,這個過程稱作回表過程,而且這個回表過程是可以被優化的,這個優化就是利用覆蓋索引。先說結論,如果乙個索引的字段包含了所有要查詢的字段,這個索引就稱作覆蓋索引,覆蓋索引可以減少回表過程,能有效提高查詢效率。前面我們有說過,在 innodb 中資料都是...
讓QT編譯快一點(增加基礎標頭檔案)
2 如何才能學到qt的精髓 提供了絕佳的物件間通訊方式,同時也是窺視gui具體實現的絕佳機會 我是來反對樓上某些答案的。我曾經用mfc寫了金山詞霸 大約20多萬行 又用qt寫了yy語音 大約100多萬行 算是對兩種框架都比較有經驗。糾正幾個錯誤的認識。1.用qt寫的程式編譯比mfc慢 的說法是錯誤的...