成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在 Apache Hive 中輕松生存的12個技巧

大數據
Hive可以讓你在Hadoop上使用SQL,但是在分布式系統上優化 SQL 則有所不同。這里是讓你可以輕松駕馭Hive的12個技巧。

[[187348]]

Hive 可以讓你在 Hadoop 上使用 SQL,但是在分布式系統上優化 SQL 則有所不同。這里是讓你可以輕松駕馭 Hive 的12個技巧。

Hive 并不是關系型數據庫(RDBMS),但是它大多數時候都表現得像是一個關系型數據庫一樣,它有表、可以運行 SQL、也支持 JDBC 和 ODBC。

這種表現既有好的一面,也有不好的一面:Hive 并不像關系型數據庫那樣執行 SQL 查詢。我在 Hive 上花費了大量時間,光是我自己在工作中就為了優化它花費了超過80個小時。不說你也知道,我就像呆在蜂巢(Hive)旁邊一樣腦袋嗡嗡作響。所以,為了讓你免受這種痛苦,我決定將它們寫出來,以便讓你在你的下一個 Hive 項目中逃離這種折磨。

1、不要使用 MapReduce

不管你是不是覺得 Tez、Spark 或 Impala 能行,但是不要指望 MapReduce。它本身就很慢,比 Hive 還慢。如果你用的是 Hortonwork 的版本,你可以在腳本前面寫上 set hive.execution.engine=tez ;用 Cloudera 的話,使用 Impala。如果 Impala 不適用的話,我 希望到時候 可以使用 hive.execution.engine=spark 。

2、不要在 SQL 中做字符串匹配

絕不要,特別是在 Hive 中!如果你堅持要在 WHERE 語句中使用 LIKE 匹配,就會產生一個跨產品的警告。本來你的查詢可能只用幾秒鐘,但是使用字符串匹配的話就會變成幾分鐘。***的辦法是使用那些可以在 Hadoop 中進行搜索的工具,可以試試 Elasticsearch 的 Hive 集成版本或 Lucidwork 的 Solr ,以及 Cloudera Search 。關系型數據庫這方面表現并不好,但是 Hive 則更糟糕。

3、不要用表連接子查詢

你***創建一個臨時表,然后對這個臨時表進行連接,而不是讓 Hive 自己智能處理子查詢。即不要這樣做:

  1. select a.* from something a inner join  
  2.   (select ... from somethingelse union b select ... from anotherthing c) d  
  3.   on a.key1 = d.key1 and a.key2 = b.key2 where a.condition=1 

而是應該這樣:

  1. create var_temp as select ... from somethingelse b  
  2.   union select ... from anotherthing c  
  3. and then  
  4. select a.* from something a inner join from var_temp b  
  5.   where a.key1=b.key1 and a.key2=b.key2 where a.condition=1 

一般來說,這會比 Hive 自己處理子查詢要快許多。

4、使用 Parquet 或 ORC,但是不要轉換使用

也就是說,使用 Parquet 或 ORC 而不要用 TEXTFILE。然而,如果你要把文本數據中導入到更具結構性的數據中,應該做一些轉換再導入到目標表中。你不應該用 LOAD DATA 將文本文件加載到 ORC 中,而是應該將其加載到一個文本中。

如果你要創建另外一個表,并最終大多數分析都是對它進行的,那么你就該對該表進行 ORC 化,因為轉換到 ORC 或 Parquet 要花費很多時間,并不值得將其放到你的 ETL 處理中。如果你有一個簡單的普通文本要導入,也沒做過任何優化,你應該將其加載到一個臨時表并通過 select create 放到 ORC 或 Parquet 中。不過,這有點慢。

5、開關矢量化試試

在你的腳本前面加上 set hive.vectorized.execution.enabled = true 和 set hive.vectorized.execution.reduce.enabled = true ,然后試著打開或關閉它們看看。因為最近版本的 Hive 的矢量化有點問題。

6、不要在表連接中使用 structs

我必須承認我大腦里面的 SQL 格式還是 SQL-92 時代的,所以我無論如何都不會想到去用 structs 。但是如果你做一些超級復雜的操作,比如在聯合主鍵上使用 ON 語句,那么 structs 就很方便。不幸的是,Hive 對它們很不適應,特別是在 ON 語句上。當然,大多數情況下,在較小的數據集和 yields 下是沒錯誤的。在 Tez 里面,你會得到一個有趣的矢量錯誤。這個限制并未見于我所知的任何文檔,也許這是一個探索你的執行引擎內部的好辦法。

7、檢查你的容器大小

你也許需要為 Impala 或 Tez 增加你的容器大小。如果有你的節點大小比較大,“推薦的”容器大小可能就不適用于你的系統。你也許需要確保你的 YARN 隊列和常規的 YARN 內存大小合適。你也許應該 注意默認的隊列并不適合 所有的常規使用。

8、啟用統計

Hive 在表連接時 會做一些蠢事 ,除非 啟用了統計 。你也可以 在 Impala 中使用查詢提示 。

9、考慮 MapJoin 優化

如果你分析你的查詢,你可能發現***的 Hive 已經可以足夠智能地進行自動優化了。但是你也許需要再調整一下。

10、如果可以, 將大表放到***

如標題。

11、分區總會幫到你,不管多少

如果你有一個出現在許多地方的東西,比如語句中的日期(但不是日期范圍)或重復的地點,你也許應該做分區。分區的基本意思是“拆分到它自己的目錄里面”,而不是到一個大的文件中去查找。當你在你的 join/where 語句中僅檢索 location=’NC’ 這樣一個小數據集時,Hive 就可以在一個文件中查找。此外,和列值不同,你可以在你的 LOAD DATA 語句中加上分區。另外,要記住, HDFS 并不喜歡小文件 。

12、使用哈希進行列比較

如果你要在每個查詢中比較同樣的10個字段,可以考慮使用 hash() 來比較它們的校驗值。在一個輸出表中展示它們也許很有用。注意,在 Hive 0.12 中,哈希功能比較差,0.13中的哈希更好一些。

以上就是我的12點經驗,我希望這些能夠幫到你,讓你從 Hive 的嗡嗡聲中逃離出來。

責任編輯:武曉燕 來源: 數據為王
相關推薦

2024-01-03 14:54:56

PythonPandas數據處理工具

2024-06-12 12:03:15

Python變量代碼

2023-10-11 13:32:30

2023-11-12 11:54:55

UX性能widget

2024-02-26 08:20:00

CSS開發

2022-11-04 15:56:41

2023-12-19 13:31:00

CSS前端技巧

2019-05-23 11:42:04

Java語法糖編程語言

2023-06-08 14:10:00

VSCodePython代碼

2020-06-23 08:28:26

前端開發技巧

2016-05-10 10:16:13

JavaScript技巧

2024-05-28 14:45:00

2022-11-24 10:34:05

CSS前端

2024-06-11 00:09:00

JavaScript模式變量

2023-07-24 15:24:00

前端CSS 技巧

2022-03-10 08:01:06

CSS技巧選擇器

2025-01-14 00:01:01

2015-08-04 10:51:26

vim效率技巧

2020-05-18 10:52:00

前端JavaScript html

2023-01-03 11:47:47

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 古装三级在线播放 | 中文字幕视频在线看5 | 欧美日韩一区在线观看 | 日韩有码一区 | 天天综合久久 | 国产精品久久久久久一级毛片 | 成人免费网视频 | 久久性av| 日韩欧美在线视频一区 | 天天爽夜夜操 | 久久精品国产久精国产 | 午夜精品一区二区三区在线观看 | 成人国产精品久久 | 国产不卡一区 | 日韩一区二区在线视频 | 日韩在线一区二区 | 狠狠色香婷婷久久亚洲精品 | 日韩亚洲视频在线 | 国精产品一品二品国精在线观看 | 四虎在线观看 | 日本午夜免费福利视频 | 成人午夜在线观看 | 综合久 | 成人精品在线观看 | 小早川怜子xxxxaⅴ在线 | 国产91精品久久久久久久网曝门 | 欧美一区二区 | 成人污污视频 | 中文字幕在线观看视频一区 | 日韩一二区 | 一级黄色片毛片 | 国产精品久久久久久久久免费高清 | 欧美激情久久久 | 91精品久久久久久久久中文字幕 | 日韩a在线 | 国产亚洲一区二区三区 | 永久精品| 亚洲欧美在线观看 | 91精产国品一二三区 | 一区二区三区在线免费观看 | 精品一区二区三区中文字幕 |