天天看點

[Presto]部署運作Presto

1. 安裝Presto

下載下傳Presto server tarball,presto-server-0.100.tar.gz,将它解壓。 它包含一個頂級目錄, presto-server-0.100,我們叫它安裝目錄。Presto需要一個用于存儲日志、本地中繼資料等的資料目錄。 建議在安裝目錄的外面建立一個資料目錄。這樣友善Presto進行更新。

下載下傳位址:

https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.100/presto-server-0.100.tar.gz
2. 配置Presto

在安裝目錄中建立一個etc目錄。 在這個etc目錄中放入以下配置資訊:

(1)節點屬性:每個節點的環境配置資訊

(2)JVM 配置:JVM的指令行選項

(3)配置屬性:Presto server的配置資訊

(4)Catalog屬性:configuration forConnectors(資料源)的配置資訊

配置後結構圖:

2.1 節點配置

節點屬性配置檔案:etc/node.properties包含針對于每個節點的特定的配置資訊。 一個節點就是在一台機器上安裝的Presto執行個體。 這份配置檔案一般情況下是在Presto第一次安裝的時候,由部署系統建立的。 一個etc/node.properties配置檔案至少包含如下配置資訊:

node.environment=presto-cluster
node.id= 10001
node.data-dir=/home/xiaosi/data/presto      

針對上面的配置資訊描述如下:

(1)node.environment: 叢集名稱,所有在同一個叢集中的Presto節點必須擁有相同的叢集名稱。

(2)node.id: 每個Presto節點的唯一标示。每個節點的node.id都必須是唯一的。在Presto進行重新開機或者更新過程中每個節點的node.id必須保持不變。如果在一個節點上安裝多個Presto執行個體(例如:在同一台機器上安裝多個Presto節點),那麼每個Presto節點必須擁有唯一的node.id。

(3)node.data-dir: 資料存儲目錄的位置(作業系統上的路徑)。Presto将會把日期和資料存儲在這個目錄下。

2.2 JVM配置

JVM配置檔案,etc/jvm.config, 包含一系列在啟動JVM的時候需要使用的指令行選項。這份配置檔案的格式是:一系列的選項,每行配置一個單獨的選項。由于這些選項不在shell指令中使用。 是以即使将每個選項通過空格或者其他的分隔符分開,java程式也不會将這些選項分開,而是作為一個指令行選項處理。(就想下面例子中的OnOutOfMemoryError選項)。

-server
-Xmx16G
-XX:+UseConcMarkSweepGC
-XX:+ExplicitGCInvokesConcurrent
-XX:+CMSClassUnloadingEnabled
-XX:+AggressiveOpts
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
-XX:ReservedCodeCacheSize=150M      

由于OutOfMemoryError将會導緻JVM處于不一緻狀态,是以遇到這種錯誤的時候我們一般的處理措施就是将dump headp中的資訊(用于debugging),然後強制終止程序。Presto會将查詢編譯成位元組碼檔案,是以Presto會生成很多class,是以我們我們應該增大Perm區的大小(在Perm中主要存儲class)并且要允許Jvm class unloading。

2.3 Config Properties

Presto的配置檔案:etc/config.properties包含了Presto server的所有配置資訊。 每個Presto server既是一個coordinator也是一個worker。 但是在大型叢集中,處于性能考慮,建議單獨用一台機器作為 coordinator。一個coordinator的etc/config.properties應該至少包含以下資訊:

coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
task.max-memory=1GB
discovery-server.enabled=true
discovery.uri=http://example.net:8080      

以下是最基本的worker配置:

coordinator=false
http-server.http.port=8080
task.max-memory=1GB
discovery.uri=http://example.net:8080      

但是如果你用一台機器進行測試,那麼這一台機器将會即作為coordinator,也作為worker。配置檔案将會如下所示:

coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
task.max-memory=1GB
discovery-server.enabled=true
discovery.uri=http://example.net:8080      

對配置項解釋如下:

(1)coordinator:指定是否運維Presto執行個體作為一個coordinator(接收來自用戶端的查詢,并且管理每個查詢的執行過程)。

(2)node-scheduler.include-coordinator:是否允許在coordinator服務中進行排程工作。對于大型的叢集,在一個節點上的Presto server即作為coordinator又作為worke将會降低查詢性能。因為如果一個伺服器作為worker使用,那麼大部分的資源都會被worker占用,那麼就不會有足夠的資源進行關鍵任務排程、管理和監控查詢執行。

(3)http-server.http.port:指定HTTP server的端口。Presto 使用 HTTP進行内部和外部的所有通訊。

(4)task.max-memory=1GB:一個單獨的任務使用的最大記憶體 (一個查詢計劃的某個執行部分會在一個特定的節點上執行)。 這個配置參數限制的GROUP BY語句中的Group的數目、JOIN關聯中的右關聯表的大小、ORDER BY語句中的行數和一個視窗函數中處理的行數。 該參數應該根據并發查詢的數量和查詢的複雜度進行調整。如果該參數設定的太低,很多查詢将不能執行;但是如果設定的太高将會導緻JVM把記憶體耗光。

(5)discovery-server.enabled:Presto 通過Discovery 服務來找到叢集中所有的節點。為了能夠找到叢集中所有的節點,每一個Presto執行個體都會在啟動的時候将自己注冊到discovery服務。Presto為了簡化部署,并且也不想再增加一個新的服務程序,Presto coordinator 可以運作一個内嵌在coordinator 裡面的Discovery 服務。這個内嵌的Discovery 服務和Presto共享HTTP server并且使用同樣的端口。

(6)discovery.uri:Discovery server的URI。由于啟用了Presto coordinator内嵌的Discovery 服務,是以這個uri就是Presto coordinator的uri。修改example.net:8080,根據你的實際環境設定該URI。注意:這個URI一定不能以“/“結尾。

2.4 日志級别

日志配置檔案:etc/log.properties。在這個配置檔案中允許你根據不同的日志結構設定不同的日志級别。每個logger都有一個名字(通常是使用logger的類的全标示類名). Loggers通過名字中的“.“來表示層級和內建關系。 (像java裡面的包). 如下面的log配置資訊:

com.sjf.presto=INFO      

2.5 Catalog Properties

Presto通過connectors通路資料。這些connectors挂載在catalogs上。 connector 可以提供一個catalog中所有的schema和表。 例如: Hive connector 将每個hive的database都映射成為一個schema, 是以如果hive connector挂載到了名為hive的catalog, 并且在hive的web有一張名為clicks的表, 那麼在Presto中可以通過hive.web.clicks來通路這張表。

通過在etc/catalog目錄下建立catalog屬性檔案來完成catalogs的注冊。 例如:可以先建立一個etc/catalog/jmx.properties檔案,檔案中的内容如下,完成在jmxcatalog上挂載一個jmxconnector:

connector.name=jmx      
3. 運作Presto

在安裝目錄的bin/launcher檔案,就是啟動腳本。Presto可以使用如下指令作為一個背景程序啟動:

xiaosi@Qunar:/opt/presto-server-0.100$ bin/launcher start
Started as 28987
      

另外,也可以在前台運作, 日志和相關輸出将會寫入stdout/stderr(可以使用類似daemontools的工具捕捉這兩個資料流):

bin/launcher run      

運作bin/launcher–help,Presto将會列出支援的指令和指令行選項。 另外可以通過運作bin/launcher–verbose指令,來調試安裝是否正确。

啟動完之後,日志将會寫在var/log目錄下,該目錄下有如下檔案:

(1)launcher.log: 這個日志檔案由launcher建立,并且server的stdout和stderr都被重定向到了這個日志檔案中。 這份日志檔案中隻會有很少的資訊,包括:在server日志系統初始化的時候産生的日志和JVM産生的診斷和測試資訊。

(2)server.log: 這個是Presto使用的主要日志檔案。一般情況下,該檔案中将會包括server初始化失敗時産生的相關資訊。這份檔案會被自動輪轉和壓縮。

(3)http-request.log: 這是HTTP請求的日志檔案,包括server收到的每個HTTP請求資訊,這份檔案會被自動輪轉和壓縮。