1. 程式人生 > 其它 >Hive高階(3):優化(3) 合理設定 Map 及 Reduce 數/並行執行/ 嚴格模式/JVM 重用/壓縮

Hive高階(3):優化(3) 合理設定 Map 及 Reduce 數/並行執行/ 嚴格模式/JVM 重用/壓縮

目錄

一、常見的Web叢集排程器

  目前常見的Web叢集排程器分為軟體和硬體

  軟體通常使用開源的LVS、Haproxy、Nginx

  • LVS效能最好,但是搭建相對複雜;Nginx的upstream模組支援群集功能,但是對群集節點健康檢查功能不強,高併發效能沒有Haproxy好。

  硬體一般使用比較多的是F5,也有很多人使用國內的一些產品,如梭子魚、綠盟等

二、Haproxy應用分析

  LVS在企業應用中抗負載能力很強,但存在不足

  • LVS不支援正則處理,不能實現動靜分離
  • 對應大型網站,LVS的實施配置複雜,維護成本相對較高

  Haproxy是一款可提供高可用性、負載均衡、及基於TCP和HTTP應用的代理的軟體

  • 適用於負載大的Web站點
  • 執行在硬體上可支援數以萬計的併發連線的連線請求

三、Haproxy排程演算法原理

  1、RR (Round Robin)
  • RR演算法是最簡單最常用的一種演算法,即輪詢排程
  理解舉例
  • 有三個節點A、B、C
  • 第一個使用者訪問會被指派到節點A
  • 第二個使用者訪問會被指派到節點B
  • 第三個使用者訪問會被指派到節點C
  • 第四個使用者訪問繼續指派到節點A,輪詢分配訪問請求實現負載均衡效果

  2、LC (Least Connections)

  • 最小連線數演算法,根據後端的節點連線數大小動態分配前端請求
  理解舉例
  • 有三個節點A、B、C,各節點的連線數分別為A:4、B:5、 C:6
  • 第一個使用者連線請求,會被指派到A上,連線數變為A:5、B:5、C:6
  • 第二個使用者請求會繼續分配到A上,連線數變為A:6、B:5、 C:6;再
  • 有新的請求會分配給B,每次將新的請求指派給連線數最小的客戶端
  • 由於實際情況下A、B、C的連線數會動態釋放,很難會出現一樣連線數的情況
  • 此演算法相比較rr演算法有很大改進,是目前用到比較多的一種演算法

  3、SH (Source Hashing)

  • 基於來源訪問排程演算法,用於一些有Session會話記錄在伺服器端的場景,可以
  • 基於來源的IP、Cookie等做叢集排程
  理解舉例
  • 有三個節點A、B、C,第一個使用者第一-次訪問被指派到了A,第二個使用者第一次訪問被指派到了B
  • 當第一個使用者第二次訪問時會被繼續指派到A,第二個使用者第二次訪問時依舊會被指派到B,只要負載均衡排程器不重啟,第一一個使用者訪問都會被指派到A,第二個使用者訪問都會被指派到B,實現叢集的排程
  • 此排程演算法好處是實現會話保持,但某些IP訪問量非常大時會引|起負載不均衡部分節點訪問量超大,影響業務使用

四、Haproxy的特性

  Haproxy是可提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,是免費、快速並且可靠的一種解決方案。Haproxy非常適用併發大(併發達1w以上)web站點,這些站點通常又需要會話保持或七層處理。Haproxy的執行模式使得它可以很簡單安全的整合至當前的架構中,同時可以保護web伺服器不被暴露到網路上。

  • 可靠性和穩定性非常好,可以與硬體級的F5負載均衡裝置相媲美;
  • 最高可以同時維護40000-50000個併發連線,單位時間內處理的最大請求數為20000個,最大處理能力可達10Git/s;
  • 支援多達8種負載均衡演算法,同時也支援會話保持;
  • 支援虛機主機功能,從而實現web負載均衡更加靈活;
  • 支援連線拒絕、全透明代理等獨特的功能;
  • 擁有強大的ACI支援,用於訪問控制;
  • 其獨特的彈性二叉樹資料結構,使資料結構的複雜性上升到了0(1),即資料的查尋速度不會隨著資料條目的增加而速度有所下降;
  • 支援客戶端的keepalive功能,減少客戶端與haproxy的多次三次握手導致資源浪費,讓多個請求在--個tcp連線中完成;
  • 支援TCP加速,零複製功能,類似於mmap機制;
  • 支援響應池( response buffering) ;
  • 支援RDP協議:
  • 基於源的粘性,類似nginx的ip_hash功能,把來自同一a客戶端的請求在一定時間內始終排程到上游的同一.伺服器;
  • 更好統計資料介面,其web介面顯示後端叢集中各個伺服器的接收、傳送、拒絕、錯誤等資料的統計資訊;
  • 詳細的健康狀態檢測,web介面中有關於對上游伺服器的健康檢測狀態,並提供了一定的管理功能;
  • 基於流量的健康評估機制;
  • 基於http認證;
  • 基於命令列的管理介面;
  • 日誌分析器,可對日誌進行分析。
4.2 Haproxy常見的負載均衡策略
  • roundrobin,表示簡單的輪詢
  • static-rr,表示根據權重
  • leastconn,表示最少連線者先處理
  • source,表示根據請求源IP
  • uri,表示根據請求的URI,做cdn需使用;
  • url_ param, 表示根據請求的UR1引數'balance url_ param' requires an URL parameter name
  • hdr (name),表示根據HTTP請求頭來鎖定每一次HTTP請求;
  • rdp-cookie (name),表示根據據cookie (name)來鎖定並雜湊每一次TCP請求 。

4.3 LVS、Nginx、Haproxy的區別

  LVS效能最好。haproxy nginx   LVS只支援四層轉發 haproxy nginx 都能支援四層和七層的轉發   對節點的健康檢查:haproxy和LVS都是主動檢查,haproxy檢查的方式更豐富 ,nginx只能被動檢查,通過轉發請求是否失敗來判斷   Nginx的優點: ●工作在網路的7層之上,可以針對http應用做一些分流的策略,比如針對域名、目錄結構。Nginx正則規則比HAProxy更為強大和靈活。 ●Nginx對網路穩定性的依賴非常小,理論上能ping通就就能進行負載功能,LVS對網路穩定性依賴比較大,穩定要求相對更高。 ●Nginx安裝和配置、測試比較簡單、方便,有清晰的日誌用於排查和管理,LVS的配置、測試就要花比較長的時間了。 ●可以承擔高負載壓力且穩定,一般能支撐幾萬次的併發量,負載度比LVS相對小些。 ●Nginx可以通過埠檢測到伺服器內部的故障,比如根據伺服器處理網頁返回的狀態碼、超時等等。 ●Nginx不僅僅是一款優秀的負載均衡器/反向代理軟體,它同時也是功能強大的Web應用伺服器。 ●Nginx作為Web反向加速快取越來越成熟了,速度比傳統的Squid伺服器更快,很多場景下都將其作為反向代理加速器。 ●Nginx作為靜態網頁和圖片伺服器,這方面的效能非常優秀,同時第三方模組也很多。   Nginx的缺點: ●Nginx僅能支援http、https和Email協議,這樣就在適用範圍上面小些。 ●對後端伺服器的健康檢查,只支援通過埠來檢測,不支援通過url來檢測。 ●不支援Session的直接保持,需要通過ip_hash和cookie的引導來解決。   LVS的優點: ●抗負載能力強、是工作在網路4層之上僅作分發之用,沒有流量的產生。因此負載均衡軟體裡的效能最強的,對記憶體和cpu資源消耗比較低。 ●LVS工作穩定,因為其本身抗負載能力很強,自身有完整的雙機熱備方案。 ●無流量,LVS只分發請求,而流量並不從它本身出去,這點保證了均衡器IO的效能不會收到大流量的影響。 ●應用範圍較廣,因為LVS工作在4層,所以它幾乎可對所有應用做負載均衡,包括http、資料庫等。   LVS的缺點: ●軟體本身不支援正則表示式處理,不能做動靜分離。相對來說,Nginx/HAProxy+Keepalived則具有明顯的優勢。 ●如果是網站應用比較龐大的話,LVS/DR+Keepalived實施起來就比較複雜了。相對來說,Nginx/HAProxy+Keepalived就簡單多了。   HAProxy的優點: ●HAProxy也是支援虛擬主機的。 ●HAProxy支援8種負載均衡策略。 ●HAProxy的優點能夠補充Nginx的一些缺點,比如支援Session的保持,Cookie的引導,同時支援通過獲取指定的url來檢測後端伺服器的狀態。 ●HAProxy跟LVS類似,本身就只是一款負載均衡軟體,單純從效率上來講HAProxy會比Nginx有更出色的負載均衡速度,在併發處理上也是優於Nginx的。 ●HAProxy支援TCP協議的負載均衡轉發。 五、Haproxy搭建Web群集   Haproxy伺服器:192.168.200.12   Nginx伺服器1:192.168.200.14   Nginx伺服器2:192.168.200.15   客戶端:192.168.200.13 Haproxy伺服器配置

節點伺服器配置

測試

日誌定義

測試