presto的動態化應用(一):presto節點的橫向擴展與伸縮

1、presto動態化概述

  近年來,基於hadoop的sql框架層出不窮,presto也是其中的一員.從2012年發展至今,依然保持年輕的活力(版本迭代依然很快),presto的相關介紹,咱們就不贅述了,相信看官多對presto有或多或少的瞭解,詳細的一些說明能夠看官網(https://prestodb.io)的說明.linux

  presto自身功能和思想富有先進性,雖然因爲是內存計算,穩定性方面還有很大提高空間,但總體依然在adhoc方面有很好的競爭力,咱們本次介紹針對咱們團隊對於presto部分應用個性化定製功能的闡述,若是設計不合理或有待改進的方面,請你們多多反饋,咱們共同進步.git

  因爲咱們團隊是圍繞着hadoop相關項目進行,對於大數據的即席查詢的需求是無可避免,最終選用presto和impala兩款即席查詢工具.一款新的開源工具從測試到生產環境,除了必要的覆蓋測試,還要自動部署, 監控, 預警 , 日誌分析 , 異常處理等等功能,還有一些來源業務部門的需求進行調整及改進(主要針對sql和易用性,性能改進,可後續其餘系列文章進行說明).github

咱們針對presto動態開發,主要體現於三個方面:web

  • presto節點的橫向擴展與伸縮(動態資源)sql

  • presto的配置動態化(消除presto本地配置)docker

  • presto動態加載更新插件(不停服務狀況下,自動增長或升級插件)restful

2、資源動態化:充分利用集羣資源,混搭纔是王道

presto從上線到切入業務,一直在獨立hadoop集羣中,聽從不搶佔線上集羣資源,不影響線上核心任務的原則,可是遷入presto的業務方日漸增多,T-1的跨機羣將數據拷貝至獨立presto集羣方式已然沒法知足,咱們作出大膽的決定,即是將presto遷入線上集羣直接使用,因而咱們必須可以對presto的資源管理有完善的把控和管理.網絡

R4(PDEDX~A~QFJPD0(]9W5Y

PrestoSchedule1.0功能點:框架

    1.presto on yarn運維

    2.presto Server(白天100%節點,晚上5%節點)

    3.presto 監控預警系統

    4.presto 權限管理

    5.presto 動態插件管理

    6.presto 分流管理

    7.presto 自動升級(用戶無感知,保證task無失敗)

3、PrestoSchedule1.0模塊

未命名圖片

1.Presto Server

  prestoServer 是PrestoSchedule獨立部署模塊.是包括管理界面,監控,權限管理等功能,提供了自主運維管理後臺,讓管理員能經過頁面來配置、啓停和管理presto集羣, 同時管理presto master與work的節點數,監控每一個節點運行信息,從節點啓動-運行-消亡-刪除啓動包痕跡都有詳細記錄,管理員能夠定製work的啓動時間和中止時間, 同時可以看到每次啓動耗時和結束耗時以及能看到執行成功或者失敗,還會爲保留過去的work的記錄,能夠查看定時歷史啓動記錄.

  除此以外,prestoServer 還兼有管理多集羣映射的職責(爲presto性能考慮,儘可能讓presto使用hadoop block減小網絡傳輸,咱們在每一個hadoop集羣都部署一套對應的presto服務),讓sql用戶對於訪問集羣無任何感知,屏蔽具體master的地址,對master的遷移和 on yarn提供基礎支撐.

presto server

  • 權限,屏蔽鏈接master的直接訪問,同時對於presto訪問者細粒度到人,對於非內部人員或非受權人員禁止訪問,管控presto程序訪問入口如客戶端,jdbc,restful等方式

  • presto代理,甄別多個presto集羣的全部入口方式及權限,用戶無感知的使用presto, 使presto master徹底進入黑盒子,便於動態遷移master, 新建presto集羣,客戶端無需感知或受到影響

  • 分流,監控presto master壓力,可將一部分查詢流量實時切換到另外一presto master,同時支持presto新開發功能的灰色發佈及線上自測

  • 運維管理,支持新建,啓停presto集羣,管理presto work的節點數,能夠經過頁面修改當前的presto work數量,及交互資源(將切換masterA的work轉換爲masterB的work).

  • 監控,包括presto sql分析,presto監控狀況, JMX監控, presto隊列狀況, presto自恢復機制.

2.presto on yarn

  混搭性集羣充分利用集羣資源,一直是咱們深刻研究的主題,對於離線任務與實時任務,導數任務與計算任務應該各司其職,充分榨乾集羣每一寸土地,固然,這是理想的狀況,presto on yarn是咱們對於在離線集羣進行長時間運行(long server)的服務的一次嘗試.

  因咱們有on yarn需求時,社區的presto-yarn項目(https://github.com/prestodb/presto-yarn)纔是第一版,Slider也不是很成熟,測試過程當中也不少不知足咱們需求的地方,因而咱們便開發presto on yarn的項目.

  爲了更好的融入混搭集羣的方向, 咱們須要解決以下幾個問題:

資源:

    1.利用空閒的資源

    2.不能搶佔核心任務的資源

    3.不能影響其餘任務的運行

穩定性:

    1.保證presto在yarn上的穩定性

    2.保證presto master和work的數量

    3.保證用戶查詢不因平臺框架緣由查詢失敗

可伸縮性:

    1.保證隨時可擴展,可縮減的可操做性

易部署:

    1.web頁面一鍵部署,一鍵啓停

    2.兼容運行環境(JDK版本)問題.

權限控制:

    1.表權限級別控制,與公司hadoop/hive權限驗證打通(公司內部erp權限管理,請看hadoop erp權限管理)

定時性:

    1.保證白天100%資源運行,夜間5%資源運行

  針對以上的問題,咱們進行分解,針對問題進行對應涉及工做,其中思路與alluxio on yarn相似, 資源可使用linux container 與 docker container 進行資源隔離.

  穩定性則能夠增長AM 做爲管理節點及ETCD註冊, 經過thrift接收外部請求,增長或減小資源,同時AM與APP又受到prestoServer管理,即使APP或AM失敗或者被意外kill,也能夠重啓任務或監聽重試.

  可伸縮性,經過請求AM執行容器的建立及銷燬工做,同時,對異常關閉(NodeManger異常關閉)的容器進程依然存在, AM按期向presto Master發送反向關閉無效work服務指令,Presto Master對於不在容器內的存活presto work發送關閉命令, presto work執行exit, 反向關閉presto work進程(須要增長presto API).

  易部署,使用on yarn的方式,比較方便的即是部署,可以達到一鍵部署的特徵,可是隨即而來的即是容器環境問題, hadoop JDK版本多爲1.6,1.7, 並無使用JDK1.8, 可是presto對於JDK1.8是強依賴, 咱們解決方式有兩種,其一是使用docker container(公司內部hadoop已支持多種容器模式共存,經過參數選擇container 類型) ,方案二,咱們presto是支持動態插件功能,其中動態插件管理可選擇是否包含JDK啓動,原理是將JDK及備用jar放置HDFS中,經過外部配置(系列二的配置管理系統)決定, 是使用localjdk,仍是使用遠程jdk(如使用遠程,依然會對比本地JDK版本以及是否曾經已下載進行復用),而後啓動presto服務.

  權限控制,除了與公司的權限管理系統貫通併兼容,presto server也做爲全部用戶訪問presto的入口, 對於用戶並不知道訪問的具體hadoop集羣或presto集羣,將用戶sql訪問與presto技術實現鬆和耦合,咱們隨時能夠將用戶sql切換到其餘平臺中運行,如spark sql, hive, impala等.

  定時性,自動化伸縮節點是初期最重要的功能之一, presto性質決定他的用戶多爲白天, hive的跑批腳本多爲在凌晨開始,早晨結束,故此二者時間上能夠進行互補,技術實現相對簡單, 僅僅定時器觸發AM的thrift接口發送伸縮命令便可.

presto_on_yarn

3.presto 服務發現

  服務發現現今使用的是etcd進行,本來有計劃將presto的發現服務,轉移到ETCD中,但開發計劃一直未能展開,故此使得兩個發現服務互補使用.(臨時方案)

84(N]0)N}4IQ`4ZQI9D{O1H

服務發現:

  • presto集羣信息

  • yarn APP/AM 信息

  • hadoop配置信息

  • catalog版本信息

  • catalog配置

  • presto config信息

  • presto 插件版本信息

  • on yarn配置信息

4.presto IDE

  presto的快速查詢使用方式則是多種多樣, 咱們支持presto client, SQL IDE(公司內部web開發工具) JDBC, ODBC, restful接口方式等方式進行sql的查詢工做,從而保證業務方在任何條件下均可以訪問.

4、文章說明

  本文出自本人的一個同事涵總之手,今天在本人的博客上曬一下!

相關文章
相關標籤/搜索