【趙強老師】大數據分析引擎:Presto

来源:https://www.cnblogs.com/collen7788/archive/2020/04/04/12630662.html
-Advertisement-
Play Games

一、什麼是Presto? 背景知識:Hive的缺點和Presto的背景 Hive使用MapReduce作為底層計算框架,是專為批處理設計的。但隨著數據越來越多,使用Hive進行一個簡單的數據查詢可能要花費幾分到幾小時,顯然不能滿足互動式查詢的需求。Presto是一個分散式SQL查詢引擎,它被設計為用 ...


一、什麼是Presto?

  • 背景知識:Hive的缺點和Presto的背景

Hive使用MapReduce作為底層計算框架,是專為批處理設計的。但隨著數據越來越多,使用Hive進行一個簡單的數據查詢可能要花費幾分到幾小時,顯然不能滿足互動式查詢的需求。Presto是一個分散式SQL查詢引擎,它被設計為用來專門進行高速、實時的數據分析。它支持標準的ANSI SQL,包括複雜查詢、聚合(aggregation)、連接(join)和視窗函數(window functions)。這其中有兩點就值得探究,首先是架構,其次自然是怎麼做到低延遲來支持及時交互。

  • PRESTO是什麼?

Presto是一個開源的分散式SQL查詢引擎,適用於互動式分析查詢,數據量支持GB到PB位元組。Presto的設計和編寫完全是為瞭解決像Facebook這樣規模的商業數據倉庫的互動式分析和處理速度的問題。

  • 它可以做什麼?

Presto支持線上數據查詢,包括Hive, Cassandra, 關係資料庫以及專有數據存儲。 一條Presto查詢可以將多個數據源的數據進行合併,可以跨越整個組織進行分析。Presto以分析師的需求作為目標,他們期望響應時間小於1秒到幾分鐘。 Presto終結了數據分析的兩難選擇,要麼使用速度快的昂貴的商業方案,要麼使用消耗大量硬體的慢速的“免費”方案。

  • 誰在使用它?

Facebook使用Presto進行互動式查詢,用於多個內部數據存儲,包括300PB的數據倉庫。 每天有1000多名Facebook員工使用Presto,執行查詢次數超過30000次,掃描數據總量超過1PB。領先的互聯網公司包括Airbnb和Dropbox都在使用Presto。

二、Presto的體系架構

Presto是一個運行在多台伺服器上的分散式系統。 完整安裝包括一個coordinator和多個worker。 由客戶端提交查詢,從Presto命令行CLI提交到coordinator。 coordinator進行解析,分析並執行查詢計劃,然後分發處理隊列到worker。

 

Presto查詢引擎是一個Master-Slave的架構,由一個Coordinator節點,一個Discovery Server節點,多個Worker節點組成,Discovery Server通常內嵌於Coordinator節點中。Coordinator負責解析SQL語句,生成執行計劃,分發執行任務給Worker節點執行。Worker節點負責實際執行查詢任務。Worker節點啟動後向Discovery Server服務註冊,Coordinator從Discovery Server獲得可以正常工作的Worker節點。如果配置了Hive Connector,需要配置一個Hive MetaStore服務為Presto提供Hive元信息,Worker節點與HDFS交互讀取數據。

三、安裝Presto Server

  • 安裝介質
presto-cli-0.217-executable.jar
presto-server-0.217.tar.gz 
  • 安裝配置Presto Server

  1、解壓安裝包

tar -zxvf presto-server-0.217.tar.gz -C ~/training/

   2、創建etc目錄

cd ~/training/presto-server-0.217/
mkdir etc

  3、需要在etc目錄下包含以下配置文件

Node Properties: 節點的配置信息
JVM Config: 命令行工具的JVM配置參數
Config Properties: Presto Server的配置參數
Catalog Properties: 數據源(Connectors)的配置參數
Log Properties:日誌參數配置
  • 編輯node.properties
#集群名稱。所有在同一個集群中的Presto節點必須擁有相同的集群名稱。
node.environment=production
 
#每個Presto節點的唯一標示。每個節點的node.id都必須是唯一的。在Presto進行重啟或者升級過程中每個節點的node.id必須保持不變。如果在一個節點上安裝多個Presto實例(例如:在同一臺機器上安裝多個Presto節點),那麼每個Presto節點必須擁有唯一的node.id。
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff 
 
# 數據存儲目錄的位置(操作系統上的路徑)。Presto將會把日期和數據存儲在這個目錄下。
node.data-dir=/root/training/presto-server-0.217/data
  • 編輯jvm.config

由於OutOfMemoryError將會導致JVM處於不一致狀態,所以遇到這種錯誤的時候我們一般的處理措施就是收集dump headp中的信息(用於debugging),然後強制終止進程。Presto會將查詢編譯成位元組碼文件,因此Presto會生成很多class,因此我們我們應該增大Perm區的大小(在Perm中主要存儲class)並且要允許Jvm class unloading。

-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
  • 編輯config.properties

    coordinator的配置

coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://192.168.157.226:8080

    workers的配置

coordinator=false
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery.uri=http://192.168.157.226: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
query.max-total-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://192.168.157.226:8080

    參數說明:

  • 編輯log.properties

    配置日誌級別。

com.facebook.presto=INFO
  • 配置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的註冊。 如果要創建hive數據源的連接器,可以創建一個etc/catalog/hive.properties文件,文件中的內容如下,完成在hivecatalog上掛載一個hiveconnector。

#註明hadoop的版本
connector.name=hive-hadoop2
 
#hive-site中配置的地址
hive.metastore.uri=thrift://192.168.157.226:9083
 
#hadoop的配置文件路徑
hive.config.resources=/root/training/hadoop-2.7.3/etc/hadoop/core-site.xml,/root/training/hadoop-2.7.3/etc/hadoop/hdfs-site.xml

 註意:要訪問Hive的話,需要將Hive的MetaStore啟動:hive --service metastore

四、啟動Presto Server

./launcher start

五、運行presto-cli

  • 下載:presto-cli-0.217-executable.jar
  • 重命名jar包,並增加執行許可權
cp presto-cli-0.217-executable.jar presto 
chmod a+x presto
  • 連接Presto Server
./presto --server localhost:8080 --catalog hive --schema default

六、使用Presto

  • 使用Presto操作Hive
  • 使用Presto的Web Console:埠:8080

  • 使用JDBC操作Presto

    1、需要包含的Maven依賴

<dependency>
	<groupId>com.facebook.presto</groupId>
	<artifactId>presto-jdbc</artifactId>
	<version>0.217</version>
</dependency>

    2、JDBC代碼

*******************************************************************************************

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • HTTP Method 較為簡單,我們常用的習慣如下: 一般查詢我們都會使用 GET 方法, 創建新的記錄使用 POST 方法 更新已有數據使用 PUT 方法 更新已有數據部分屬性使用 PATCH 方法 刪除已有數據使用 DELETE 方法 下麵來詳細介紹一下常用的 HTTP 狀態碼 1xx 1xx ...
  • 最近是真的比較閑,花了點時間算是把我自己的微博庫的 nuget 包的坑填上了(https://github.com/h82258652/HN.Social.Weibo 歡迎大佬來 Star)。dino 大佬也一直忽悠我弄動畫,可惜我沒啥藝術細胞而且 Composition API 也不太熟悉,就只能 ...
  • Xamarin.Forms客戶端第一版 作為TerminalMACS的一個子進程模塊,目前完成第一版:讀取展示手機基本信息、聯繫人信息、應用程式本地化。 1. 功能簡介 2. 詳細功能說明 3. 關於TerminalMACS 1. 功能簡介 1.1. 讀取手機基本信息 主要使用Xamarin.Ess ...
  • 通過VPN訪問Google時,Google仍舊無法打開,但是能訪問部分網站。這是什麼情況? 顯然能夠訪問部分網站,說明網路是正常的,經過不停的測試,我發現只要是支持HTTPS協議的網站都無法訪問,腦袋靈機一動,是不是跟HTTPS的埠443有關,檢查之後,發現果真VPN服務端的443埠沒有在防火牆 ...
  • Shell腳本殺掉除自己外的舊進程 在寫後臺Shell腳本的時候,這是比較常見的一個需求。比如之前運行了一個叫做a.sh的腳本在後臺運行,後來更新了a.sh腳本想重新運行,但卻不想手動殺掉已經存在的後臺a.sh進程。 命令其實非常簡單: 其中 是篩選出除腳本自己之外的舊進程的PID。 這裡的 做了些 ...
  • Oracle的存儲結構分為:物理存儲結構和邏輯存儲結構。 一、物理存儲結構:指硬碟上存在的文件 數據文件(data file) 一個資料庫可以由多個數據文件組成的,數據文件是真正存放資料庫數據的。一個數據文件就是一個操作系統文件。資料庫的對象(表和索引)物理上是被存放在數據文件中的。當我們要查詢一個 ...
  • 在做開發過程中經常會接觸資料庫索引,不只是DBA才需要知道索引知識,瞭解索引可以讓我們寫出更高質量代碼。簡單介紹索引的概述,聚集索引,非聚集索引,唯一索引,複合索引,篩選索引使用及註意事項 ...
  • 一、 資料庫的分類 1、SQL Server 資料庫 2、Oracle 資料庫 3、mysql 資料庫 4、DB2 5、informix 以上是比較流行的資料庫,這裡沒有一一介紹,而是展示出來以便瞭解。 二、MySQL資料庫的安裝和配置 1、如果你已經安裝了mysql ,先要卸載,再安裝。 2、先停 ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...