菠蘿大資料夢工廠(Free World)
1. 概述
Presto是一個分散式SQL查詢引擎,用於查詢分佈在一個或多個不同資料來源中的大資料集。
Presto通過使用分散式查詢,可以快速高效的完成海量資料的查詢。如果你需要處理TB或者PB級別的資料,那麼你可能更希望藉助於Hadoop和HDFS來完成這些資料的處理。作為Hive和Pig(Hive和Pig都是通過MapReduce的管道流來完成HDFS資料的查詢)的替代者,Presto不僅可以訪問HDFS,也可以操作不同的資料來源,包括:RDBMS和其他的資料來源(例如:Cassandra)。
Presto被設計為資料倉庫和資料分析產品:資料分析、大規模資料聚集和生成報表。這些工作經常通常被認為是線上分析處理操作。
Presto是FaceBook開源的一個開源專案。Presto在FaceBook誕生,並且由FaceBook內部工程師和開源社群的工程師公共維護和改進。
2. 部署Presto
下載安裝:
下載Presto server tarball, presto-server-0.152.tar.gz,將它解壓。它包含一個頂級目錄,presto-server-0.152,我們叫它安裝目錄。
Presto需要一個用於儲存日誌、本地元資料等的資料目錄。建議在安裝目錄的外面建立一個數據目錄。這樣方便Presto進行升級。
配置Presto:
在安裝目錄中建立一個etc目錄。在這個etc目錄中放入以下配置資訊:
l
l JVM 配置:JVM的命令列選項
l 配置屬性:Presto server的配置資訊
l Catalog屬性:configuration for Connectors(資料來源)的配置資訊
節點屬性:
節點屬性配置檔案:etc/node.properties包含針對於每個節點的特定的配置資訊。一個節點就是在一臺機器上安裝的Presto例項。這份配置檔案一般情況下是在Presto第一次安裝的時候,由部署系統建立的。一個etc/node.properties配置檔案至少包含如下配置資訊:
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/var/lib/kylin/prestodata
針對上面的配置資訊描述如下:
node.environment:叢集名稱。所有在同一個叢集中的Presto節點必須擁有相同的叢集名稱。
node.id:每個Presto節點的唯一標示。每個節點的node.id都必須是唯一的。在Presto進行重啟或者升級過程中每個節點的node.id必須保持不變。如果在一個節點上安裝多個Presto例項(例如:在同一臺機器上安裝多個Presto節點),那麼每個Presto節點必須擁有唯一的node.id。
node.data-dir:資料儲存目錄的位置(作業系統上的路徑)。Presto將會把日期和資料儲存在這個目錄下。
JVM配置:
JVM配置檔案,etc/jvm.config,包含一系列在啟動JVM的時候需要使用的命令列選項。這份配置檔案的格式是:一系列的選項,每行配置一個單獨的選項。由於這些選項不在shell命令中使用。因此即使將每個選項通過空格或者其他的分隔符分開,java程式也不會將這些選項分開,而是作為一個命令列選項處理。(就想下面例子中的OnOutOfMemoryError選項)。
一個典型的etc/jvm.config配置檔案如下:
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
由於OutOfMemoryError將會導致JVM處於不一致狀態,所以遇到這種錯誤的時候我們一般的處理措施就是記錄下dump headp中的資訊(用於debugging),然後強制終止程序。
Presto會將查詢編譯成位元組碼檔案,因此Presto會生成很多class,因此我們我們應該增大Perm區的大小(在Perm中主要儲存class)並且要允許Jvm class unloading。
配置屬性:
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
query.max-memory=50GB
query.max-memory-per-node=1GB
discovery-server.enabled=true
discovery.uri=http://example.net:8080
以下是最基本的worker配置:
coordinator=false
http-server.http.port=8080
query.max-memory=50GB
query.max-memory-per-node=1GB
discovery.uri=http://example.net:8080
但是如果你用一臺機器進行測試,那麼這一臺機器將會即作為coordinator,也作為worker。配置檔案將會如下所示:
coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB
discovery-server.enabled=true
discovery.uri=http://example.net:8080
對配置項解釋如下:
- coordinator:指定是否允許Presto例項作為一個coordinator(接收來自客戶端的查詢請求,管理每個查詢的執行過程)。
- node-scheduler.include-coordinator:是否允許在coordinator服務中進行排程工作。對於大型的叢集,在一個節點上的Presto server即作為coordinator又作為worker將會降低查詢效能。因為如果一個伺服器作為worker使用,大部分的資源都會被worker佔用,那麼就不會有足夠的資源進行關鍵任務排程、管理和監控查詢執行。
- http-server.http.port:指定HTTP server的埠。Presto 使用 HTTP進行內部和外部的所有通訊。
- query.max-memory=50GB:一個單獨的查詢任務使用的最大記憶體 (一個查詢計劃的某個執行部分會在一個特定的節點上執行)。 這個配置引數限制的GROUP BY語句中的Group的數目、JOIN關聯中的右關聯表的大小、ORDER BY語句中的行數和一個視窗函式中處理的行數。 該引數應該根據併發查詢的數量和查詢的複雜度進行調整。如果該引數設定的太低,很多查詢將不能執行;但是如果設定的太高將會導致JVM把記憶體耗光。
- query.max-memory-per-node=1GB:一個單獨的查詢任務使用任何一個節點的最大記憶體。
- discovery-server.enabled:Presto 通過Discovery 服務來找到叢集中所有的節點。為了能夠找到叢集中所有的節點,每一個Presto例項都會在啟動的時候將自己註冊到discovery服務。Presto為了簡化部署,並且也不想再增加一個新的服務程序,Presto coordinator 可以執行一個內嵌在coordinator 裡面的Discovery 服務。這個內嵌的Discovery 服務和Presto共享HTTP server並且使用同樣的埠。
- discovery.uri:Discovery server的URI。由於啟用了Presto coordinator內嵌的Discovery 服務,因此這個uri就是Presto coordinator的uri。修改example.net:8080,根據你的實際環境設定該URI。注意:這個URI一定不能以“/“結尾。
日誌級別:
日誌配置檔案:etc/log.properties。在這個配置檔案中允許你根據不同的日誌結構設定不同的日誌級別。每個logger都有一個名字(通常是使用logger的類的全標示類名).Loggers通過名字中的“.“來表示層級和整合關係。 (像java裡面的包). 如下面的log配置資訊:
com.facebook.presto=INFO
這個將為com.facebook.presto.server和com.facebook.presto.hive設定最小的級別為INFO。一共有四個級別為:DEBUG, INFO, WARN和ERROR。
Catalog屬性:
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上掛載一個jmx connector:
connector.name=jmx
下面介紹一下我的環境搭建的資訊:
CDH 5.7.0整合環境,其中:
Hadoop:2.6.0
Hive:1.1.0
Presto版本:presto-server-0.152
我們這裡演示Presto讀取Hive中的表資料。
Presto部署的叢集節點:
10.20.18.25 SZB-L0023778
10.20.18.28 SZB-L0023779
10.20.18.24 SZB-L0023780
SZB-L0023780節點作為coordinator節點,其餘兩個節點為Worker節點。
SZB-L0023780的配置檔案內容為:
coordinator節點(SZB-L0023780)的配置為:
etc/config.properties檔案內容為:
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
query.max-memory=8GB
query.max-memory-per-node=1GB
discovery-server.enabled=true
discovery.uri=http://SZB-L0023780:8080
etc/jvm.config檔案內容為:
-server
-Xmx8G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
etc/node.properties檔案內容為:
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/var/lib/kylin/prestodata
etc/catalog/hive.properties檔案內容為:
connector.name=hive-cdh5
hive.metastore.uri=thrift://SZB-L0023778:9083
hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml
Worker節點(SZB-L0023778,SZB-L0023779)的配置為:
etc/config.properties檔案內容為:
coordinator=false
http-server.http.port=8080
query.max-memory=8GB
query.max-memory-per-node=1GB
discovery.uri=http://SZB-L0023780:8080
etc/node.properties檔案內容為(節點:SZB-L0023778):
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-gggggggggggg
node.data-dir=/var/lib/kylin/prestodata
etc/node.properties檔案內容為(節點:SZB-L0023778):
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-hhhhhhhhhhhh
node.data-dir=/var/lib/kylin/prestodata
etc/jvm.config檔案內容為:
-server
-Xmx8G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
etc/catalog/hive.properties檔案內容為:
connector.name=hive-cdh5
hive.metastore.uri=thrift://SZB-L0023778:9083
hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml
3. 執行Presto
在安裝目錄的bin/launcher檔案,就是啟動指令碼。Presto可以使用如下命令作為一個後臺程序啟動:
bin/launcher start
另外,也可以在前臺執行,日誌和相關輸出將會寫入stdout/stderr(可以使用類似daemontools的工具捕捉這兩個資料流):
bin/launcher run
執行bin/launcher --help,Presto將會列出支援的命令和命令列選項。另外可以通過執行時使用—verbose引數,來除錯安裝是否正確。
啟動完之後,日誌將會寫在node.data-dir 配置目錄的子目錄var/log下,該目錄下有如下檔案:
launcher.log:這個日誌檔案由launcher建立,並且server的stdout和stderr都被重定向到了這個日誌檔案中。這份日誌檔案中只會有很少的資訊,包括:在server日誌系統初始化的時候產生的日誌和JVM產生的診斷和測試資訊。
server.log:這個是Presto使用的主要日誌檔案。一般情況下,該檔案中將會包括server初始化失敗時產生的相關資訊。這份檔案會被自動輪轉和壓縮。
http-request.log:這是HTTP請求的日誌檔案,包括server收到的每個HTTP請求資訊,這份檔案會被自動輪轉和壓縮。
4. 命令列介面訪問Presto
Presto CLI為使用者提供了一個用於查詢的可互動終端視窗。CLI是一個 可執行 JAR檔案, 這也就意味著你可以像UNIX終端視窗一樣來使用CLI。
./presto --server example.net:8080 --catalog hive --schema default
使用--help選項執行CLI,可以看到可用的選項。
預設情況下,查詢的結果是分頁的。而這種分頁的實現不需要你去編寫什麼程式碼,而是通過配置一系列的配置資訊來實現的。你也可以通過將環境變數:PRESTO_PAGER 設定為你自己的程式名稱(比如less,more)來自己實現分頁或者也可以PRESTO_PAGER 的值設定為空,從而禁止分頁。
示例如下:
presto --server SZB-L0023780:8080 --catalog hive--schema default
presto:default>use zy_af_db;
presto: zy_af_db>select count(1) from ps_of_all;
_col0
-----------
256656293
(1 row)
Query20160907_030802_00014_kr9n9, FINISHED, 2 nodes
Splits:828 total, 828 done (100.00%)
0:03 [257M rows, 55GB] [78.7M rows/s, 16.9GB/s]
5. JDBC驅動訪問Presto
通過使用JDBC驅動,可以訪問Presto。下載presto-jdbc-0.152.jar並將這個jar檔案新增到你的java應用程式的classpath中,Presto支援的URL格式如下:
jdbc:presto://host:port
jdbc:presto://host:port/catalog
jdbc:presto://host:port/catalog/schema
例如,可以使用下面的URL來連線執行在example.net伺服器8080埠上的Presto的hive catalog中的sales schema:
jdbc:presto://example.net:8080/hive/sales
6. Presto校驗器
我們可以使用Presto Verifier 來將Presto與其他的資料庫(例如:MySql)進行對比測試或者將兩個Presto叢集相互進行對比測試。如果我們需要對Presto進行二次開發,那麼我們將會使用Presto Verifier不間斷的與Presto的前一版本進行對比測試。
第一步:建立一個MySQL資料庫,並且在資料庫中用如下語句建立一個表:
CREATE TABLE verifier_queries(
id INT NOT NULL AUTO_INCREMENT,
suite VARCHAR(256) NOT NULL,
name VARCHAR(256),
test_catalog VARCHAR(256) NOT NULL,
test_schema VARCHAR(256) NOT NULL,
test_prequeries TEXT,
test_query TEXT NOT NULL,
test_postqueries TEXT,
test_username VARCHAR(256) NOT NULL default 'verifier-test',
test_password VARCHAR(256),
control_catalog VARCHAR(256) NOT NULL,
control_schema VARCHAR(256) NOT NULL,
control_prequeries TEXT,
control_query TEXT NOT NULL,
control_postqueries TEXT,
control_username VARCHAR(256) NOT NULL default 'verifier-test',
control_password VARCHAR(256),
session_properties_json VARCHAR(256),
PRIMARY KEY (id)
);
第二步,建立一個屬性檔案,通過該屬性檔案來配置校驗器:
suite=my_suite
query-database=jdbc:mysql://localhost:3306/my_database?user=my_username&password=my_password
control.gateway=jdbc:presto://localhost:8080
test.gateway=jdbc:presto://localhost:8081
thread-count=1
./verifier config.properties
7. 管理Presto
7.1 Web介面
Presto提供了一個Web介面用於監控和管理查詢。這個Web介面可以在Presto coordinator上通過HTTP訪問,使用在etc/config.properties中配置的HTTP埠號。
相關推薦
菠蘿大資料夢工廠(Free World)
1. 概述Presto是一個分散式SQL查詢引擎,用於查詢分佈在一個或多個不同資料來源中的大資料集。Presto通過使用分散式查詢,可以快速高效的完成海量資料的查詢。如果你需要處理TB或者PB級別的資料,那麼你可能更希望藉助於Hadoop和HDFS來完成這些資料的處
王家林親授《DT大資料夢工廠》大資料實戰視訊 Scala 深入淺出實戰經典
王家林老師親授《DT大資料夢工廠》大資料實戰視訊 Scala 深入淺出實戰經典(1-71講)完整視訊、PPT、程式碼下載: 百度雲盤:http://pan.baidu.com/s/1c0noOt6 騰訊微雲:http://url.cn/TnGbdC 360雲盤:ht
大資料開發----Hive(入門篇)
前言 本篇介紹Hive的一些常用知識。要說和網上其他manual的區別,那就是這是筆者寫的一套成體系的文件,不是隨心所欲而作。 本文所用的環境為: CentOS 6.5 64位 Hive 2.1.1 Java 1.8 Hive Arc
大資料開發----Fabric(入門篇)
一 前言 本篇介紹Fabric的一些常用知識。要說和網上其他manual的區別,那就是這是筆者寫的一套成體系的文件,不是隨心所欲而作。 二 安裝 Fabric現在支援Python2和Python3,安裝: pip install fabric pip i
FMI-人工智慧&大資料高峰論壇(深圳站)
科技的大潮正風生水起,人工智慧、大資料發展如火如荼,在這個洶湧的時代裡,我們不能止步於看客。 今天,FMI人工智慧與大資料高峰論壇以接續和創新的精神,旨在幫助更多的人站上市場的風口,走向成功。通過不斷結合課程教學和知識分享,努力提供理論支援;洞察企業核心需求,推動企業競爭力重塑;聚焦人才培養與轉型發
法狗狗人工智慧技術總監龐雨穠:文字智慧的演進 | 2018FMI人工智慧與大資料高峰論壇(深圳站)
10月28日FMI-2018人工智慧與大資料高峰論壇深圳場圓滿落幕,法狗狗人工智慧技術總監龐雨穠以文字智慧的演進為主題進行了精彩的分享。 法狗狗人工智慧技術總監 龐雨穠 以下是龐雨穠演講內容,飛馬網根據現場速記進行了不改變原意的編輯(有刪減):
支付寶技術專家李戰斌:安防視訊行為分析系統的技術演進及應用場景 | 2018FMI人工智慧與大資料高峰論壇(深圳站)
10月28日FMI 2018人工智慧與大資料高峰論壇深圳場圓滿落幕,支付寶技術專家李戰斌以安防視訊行為分析系統的技術演進及應用場景為主題進行了精彩的分享。 支付寶技術專家李戰斌 以下是李戰斌的演講內容,飛馬網根據現場速記進行了不改變原意的編輯(有刪減
平安科技高階演算法工程師瞿曉陽:雲端終端雙場景的AI加速研究 | 2018FMI人工智慧與大資料高峰論壇(深圳站)
10月28日FMI2018人工智慧與大資料高峰論壇深圳場圓滿落幕,平安科技高階演算法工程師瞿曉陽就雲端終端雙場景的AI加速研究進行了精彩的分享。 平安科技高階演算法工程師瞿曉陽 以下是瞿曉陽演講全部內容,飛馬網根據現場速記進行了不改變原意的編輯(有刪
貨拉拉大資料總監劉幸:大資料&智慧化體系的建立 | 2018FMI人工智慧與大資料高峰論壇(深圳站)
10月28日FMI 2018人工智慧與大資料高峰論壇深圳場圓滿落幕,貨拉拉大資料總監劉幸以大資料&智慧化體系的建立為主題進行了精彩的分享。 貨拉拉大資料總監 劉幸 以下是劉幸演講內容,飛馬網根據現場速記進行了不改變原意的編輯(有刪減):
我們不做看客,只做時代的賦能者 —FMI2018人工智慧與大資料高峰論壇(深圳站)圓滿落幕
科技大潮風生水起,人工智慧、大資料發展如火如荼,在這個洶湧的時代,沒有人能止步於看客。十七年風雨征程,光環國際大步邁進人工智慧、大資料領域,旗下FMI飛馬網也一直致力於成為“人工智慧時代的人才入口”。 主持人陳健 10月28日,由光環國際舉辦的“20
大資料學習計劃(不斷改善)
我為什麼要學習大資料:因為我不喜歡現在國企的工作氛圍,不看好這個行業,另外我通過多方渠道瞭解到,其中包括李笑來、凱文凱利、和各種新聞及文章,現在我們正處於大資料時代,我是一個不安於現狀、喜歡探索順應時代發展趨勢學習新東西的人,希望通過努力來改變自己生活狀態渴望成功的人,我喜歡與朝氣蓬勃奮發向上的人一起活在
大資料每日默寫(面試題)整理(持續更新)
2018.10.22 1.抽象類與介面的區別? 1.語法層面上的區別 1)抽象類可以提供成員方法的實現細節,而介面中只能存在public abstract 方法; 2)抽象類中的成員變數可以是各種型別的,而介面中的成員變數只能是public static final型別的; 3)
大資料平臺搭建(hadoop+spark)
一.基本資訊 1. 伺服器基本資訊 主機名 ip地址 安裝服務 spark-master 172.16.200.81 jdk、hadoop、spark、scala spark-slave01 172.16.200.82 jd
大資料學習筆記(十四)-- hadoop
Table of Contents HDFS 儲存模型 架構模型 副本佈置 總結 Hadoop簡介 HDFS 儲存模型 解釋 : 已上傳的Block大小不可改變的原因是每個Block大小一致,改變一個其他也會跟著改變
D001.5 Docker搭建大資料叢集環境(基礎篇)
0x00 教程內容 0x01 Docker的安裝 1. 2. 3. 0x02 Docker的簡單操作 1. 2. 3. 0x03 Docker資料卷 Docker的資料卷與Centos的
Memcache儲存大資料的問題(大於1m)
轉自:https://blog.csdn.net/u011386690/article/details/9316545 感謝原作者 Memcached儲存單個item最大資料是在1MB內,如果資料超過1M,存取set和get是都是返回false,而且引起效
大資料WEB階段(十五)JavaEE三大核心技術之過濾器
Filter過濾器 一、Filter 過濾器概述 Filter是JavaEE三大核心技術(Servlet 、 Filter 、 Listener)之一 FIlter作用是攔截對資源的訪問 , 攔截下來後可以控制是否允許通過 , 或者在允許通過前後做
醫療保健研究報告-生物大資料的時代(附下載)
醫藥行業的大資料時代即將到來,未來十年,將會逐漸對行業內產業鏈各個環節產生深遠影響。 “大資料”這一名詞 2012 年在奧巴馬國情諮文中被重點提及,從此為大眾所知,近幾年來發展迅猛,已經在很多行業得到體現,國內比較經典的案例是阿里巴巴利用大資料分析作網路精準營銷,顛覆了
大資料處理之(top k)
top k 簡介:在大量資料中找出重複次數最多的前K個。 問題分析: 聽起來這個問題十分簡單,只需對這些資料進行一次排序即可得到前K個。如果這樣的話,首先得定義一個數據結構來儲存這些資料,大量的資料會消耗過大的程序資源,甚至“耗盡”程序的資源。還有一
中國信通院:2018年大資料安全白皮書(附下載)
報告下載:新增199IT官方微信【i199it】,回覆關鍵詞【2018年大資料安全白皮書】即可! 《2018年大資料安全白皮書》首先從大資料帶來的變革出發,探討了大資料安全區別於傳統安全的特殊內涵;然後聚焦技術領域,給出大資料安全技術總體檢視,分別從平臺安全、資料安全和個人隱私安全三個方面梳理了大資料環境下