Presto基於MPP架構的部署及使用技術詳解

版權聲明:本套技術專欄是做者(秦凱新)平時工做的總結和昇華,經過從真實商業環境抽取案例進行總結和分享,並給出商業應用的調優建議和集羣環境容量規劃等內容,請持續關注本套博客。版權聲明:禁止轉載,歡迎學習。node

1 安裝配置

安裝presto後,需另建一個文件夾用於存儲日誌、本地元數據等的數據目錄。數據庫

  1. config.properties :Presto 服務配置。
  2. node.properties :環境變量配置,每一個節點特定配置。
  3. jvm.config :Java虛擬機的命令行選項。
  4. log.properties: 容許你根據不一樣的日誌結構設置不一樣的日誌級別。
  5. catalog目錄 :每一個鏈接者配置(data sources)

2 Master(coordinator)節點配置

  • config.properties :運維

    coordinator=true
      node-scheduler.include-coordinator=false
      http-server.http.port=9001
      query.max-memory=50GB
      query.max-memory-per-node=1GB
      discovery-server.enabled=true
      discovery.uri=http://bd-master:9001
    複製代碼

coordinator:指定是否運維Presto實例做爲一個coordinator(接收來自客戶端的查詢情切管理每一個查詢的執行過程) node-scheduler.include-coordinator:是否容許在coordinator服務中進行調度工做 服務發現(心跳)和HTTP服務均使用同一端口jvm

  • node.propertiesoop

    node.environment=test
      node.data-dir=/usr/local/presto/logs
      node.id=bd-master
    複製代碼

node.environment: 集羣名稱, 全部在同一個集羣中的Presto節點必須擁有相同的集羣名稱 node.id: 每一個Presto節點的惟一標示。每一個節點的node.id都必須是惟一的。在Presto進行重啓或者升級過程當中每一個節點的node.id必須保持不變。若是在一個節點上安裝多個Presto實例(例如:在同一臺機器上安裝多個Presto節點),那麼每一個Presto節點必須擁有惟一的node.id node.data-dir: 數據存儲目錄的位置(操做系統上的路徑), Presto將會把日期和數據存儲在這個目錄下學習

  • jvm.configspa

    -server
      -Xmx16G
      -XX:+UseConcMarkSweepGC
      -XX:+ExplicitGCInvokesConcurrent
      -XX:+CMSClassUnloadingEnabled
      -XX:+AggressiveOpts
      -XX:+HeapDumpOnOutOfMemoryError
      -XX:OnOutOfMemoryError=kill -9 %p
      -XX:ReservedCodeCacheSize=150M
      -DHADOOP_USER_NAME=admin
    複製代碼

啓動Java虛擬機所須要的命令行參數,注意集羣中全部節點的jvm配置須一致操作系統

  • log.properties

設置logger的最小日誌級別。 com.facebook.presto=INFO 該設置表示對於使用logger類的com.facebook.presto.server和com.facebook.presto.hive來講,二者的最小日誌級別都是INFO級別。命令行

  • catalog目錄

在該目錄下新建一個文件hive.properties ,內容以下:rest

connector.name=hive-hadoop2
    hive.metastore.uri=thrift://10.44.219.80:9083
    hive.allow-drop-table=true
    hive.allow-rename-table=true
    hive.config.resources=/usr/local/soft/install/hadoop-2.7.6/etc/hadoop/core-site.xml,/usr/local/soft/install/hadoop-2.7.6/etc/hadoop/hdfs-site.xml
    hive.metastore-cache-ttl=0s
    hive.metastore-refresh-interval=1s
複製代碼

hive-hadoop2 爲支持hadoop 2.x版本的鏈接器,鏈接hive元數據庫的uri,端口默認是9083,而且容許刪除和更名錶,還必須在hive.config.resources添加hadoop的配置文件位置。 注意運行presto前,要之後臺的形式打開hive的metastore服務,輸入如下指令:

hive - -service metastore &
複製代碼

3.Worker節點配置

任意Worker節點只需修改config.properties 和node.properties,其他與主節點相同。

  • config.properties :

    coordinator=false
      http-server.http.port=9001
      query.max-memory=50GB
      query.max-memory-per-node=1GB
      discovery.uri=http://bd-master:9001
    複製代碼
  • node.properties

    node.environment=test
      node.data-dir=/usr/local/presto/logs
      node.id=bd-slave1
    複製代碼

    node.id設置爲worker的標誌,其他不變

4 PRESTO啓動

hive --service metastore   --presto啓動須要

$PRESTO_HOME/bin/launcher restart
$PRESTO_HOME/presto --server localhost:9001 --catalog hive --schema default	
複製代碼

5 綜合案例實戰

對分值進行分桶,獲得不一樣區間內的數據 並 union all包含100分的值

width_bucket(x,bound1,bound2,n)
返回x指定的bound1和bound2界限的bin數量以及n個存儲桶的數量

SELECT * from 
(select concat(cast((width_bucket(device_health_score,0,100,10)-1)*10 as VARCHAR),'--',cast(width_bucket(device_health_score,0,100,10)*10-1 as VARCHAR)) 
as score_range, date_time,
COUNT(width_bucket(device_health_score,0,100,10)) as count from device_health_score_fact 
where device_health_score >=0 and device_health_score <100 
group by concat(cast((width_bucket(device_health_score,0,100,10)-1)*10 as VARCHAR ),'--',cast(width_bucket(device_health_score,0,100,10)*10-1 as VARCHAR)),date_time
)
UNION ALL (select cast(device_health_score as VARCHAR)  as score_range,date_time,COUNT(device_health_score)  from device_health_score_fact where device_health_score =100 group by device_health_score,date_time )
複製代碼

總結

秦凱新 於深圳

相關文章
相關標籤/搜索