日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

Presto 分布式SQL查询引擎

發(fā)布時(shí)間:2024/1/18 数据库 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Presto 分布式SQL查询引擎 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

          • Presto的介紹
          • Presto的數(shù)據(jù)模型
          • 通過(guò)Presto客戶(hù)端查詢(xún)Presto命令
          • Presto的架構(gòu)
          • Java程序訪問(wèn)Presto
          • Presto注意點(diǎn)

Presto的介紹
  • Presto是Facebook開(kāi)發(fā)的分布式SQL查詢(xún)引擎,用來(lái)進(jìn)行高效、實(shí)時(shí)的數(shù)據(jù)分析;
  • Presto可以連接Hive、Mysql、Kafka等多種數(shù)據(jù)源,最常用的是通過(guò)Presto連接Hive數(shù)據(jù)源,可以解決Hive的MapReduce查詢(xún)耗時(shí)太慢的問(wèn)題;
  • Presto是一個(gè)基于內(nèi)存的計(jì)算引擎,它本身不存儲(chǔ)數(shù)據(jù),通過(guò)豐富的Connector獲取第三方服務(wù)的數(shù)據(jù),例如可以獲取Hive數(shù)據(jù)源保存在HDFS上的數(shù)據(jù),將數(shù)據(jù)加載到內(nèi)存進(jìn)行計(jì)算,查詢(xún)數(shù)據(jù)很快。
  • Presto的數(shù)據(jù)模型
  • Catalog:數(shù)據(jù)源,例如Hive、Mysql都是數(shù)據(jù)源,Presto可以連接多個(gè)Hive和多個(gè)Mysql;
  • Schema:類(lèi)似于DataBase,一個(gè)Catalog下有多個(gè)Schema;
  • Table:數(shù)據(jù)表,一個(gè)Schema下有多個(gè)數(shù)據(jù)表。
  • Presto查詢(xún)語(yǔ)句示例:

    # 連接多個(gè)數(shù)據(jù)源進(jìn)行查詢(xún) select * from hive.testdb.tableA a join mysql.testdb.tableB where a.id = b.id # 查看Presto支持的所有數(shù)據(jù)源 show catalogs # 查看所有Schema show schemas
    通過(guò)Presto客戶(hù)端查詢(xún)Presto命令
    # 端口號(hào)默認(rèn)是7670 --catalog指定連接的數(shù)據(jù)源 --schema指定連接的數(shù)據(jù)庫(kù) ./presto-cli-0.212-executable.jar ip:端口號(hào) --catalog hive --schema default
    Presto的架構(gòu)

    Presto也是主從架構(gòu),由三部分組成:一個(gè)Coordinator節(jié)點(diǎn)、一個(gè)Discovery Server節(jié)點(diǎn),多個(gè)Worker節(jié)點(diǎn);

    Coordinator為主節(jié)點(diǎn),負(fù)責(zé)解析SQL語(yǔ)句,生成查詢(xún)計(jì)劃,分發(fā)執(zhí)行任務(wù);

    Discovery Server負(fù)責(zé)維護(hù)Coordinator和Worker的關(guān)系,通常內(nèi)嵌于Coordinator節(jié)點(diǎn);

    Worker節(jié)點(diǎn)負(fù)責(zé)執(zhí)行查詢(xún)?nèi)蝿?wù)以及與數(shù)據(jù)源進(jìn)行交互讀取數(shù)據(jù)。

    Presto連接Hive數(shù)據(jù)源的架構(gòu)圖:

    工作原理:Presto Coordinator接收Presto客戶(hù)端發(fā)送的SQL語(yǔ)句,根據(jù)Hive的元數(shù)據(jù)信息,解析SQL語(yǔ)句,生成查詢(xún)計(jì)劃,并將任務(wù)分發(fā)給多個(gè)Worker節(jié)點(diǎn),Worker節(jié)點(diǎn)會(huì)讀取HDFS上的數(shù)據(jù)到內(nèi)存中來(lái)進(jìn)行計(jì)算,并將結(jié)果返回給Coordinator節(jié)點(diǎn),Coordinator節(jié)點(diǎn)再將數(shù)據(jù)返回給Presto客戶(hù)端。

    Presto連接多數(shù)據(jù)源的架構(gòu)圖:

    Java程序訪問(wèn)Presto

    Java程序中,是通過(guò)JDBC的方式訪問(wèn)Presto的,就類(lèi)似于通過(guò)JDBC訪問(wèn)Mysql數(shù)據(jù)庫(kù)一樣,舉例如下:

    <!--導(dǎo)入依賴(lài)--> <dependency><groupId>com.facebook.presto</groupId><artifactId>presto-jdbc</artifactId><version>0.212</version> </dependency> public static void main(String[] args) throws SQLException {// 注冊(cè)presto驅(qū)動(dòng)try {Class.forName("com.facebook.presto.jdbc.PrestoDriver");} catch (ClassNotFoundException e) {e.printStackTrace();}// 獲取presto連接(指定url、用戶(hù)名、密碼)Connection connection = DriverManager.getConnection("jdbc:presto://192.168.110.112:7670/hive/default", "root", "123456");// 執(zhí)行SQL查詢(xún)Statement statement = connection.createStatement();ResultSet res = statement.executeQuery("show tables");while (res.next()) {System.out.println(res.getString(1));}res.close();// 假設(shè)表tableA有兩個(gè)字段ResultSet resultSet = statement.executeQuery("select * from tableA");while (res.next()) {System.out.println(resultSet.getString(1) + "---" + resultSet.getString(2));}resultSet.close();connection.close(); }
    Presto注意點(diǎn)

    一般來(lái)說(shuō),使用Presto操作Hive等數(shù)據(jù)源是為了加快查詢(xún)速度,并不支持通過(guò)Presto去更新Hive等數(shù)據(jù)源,例如通過(guò)Presto去操作Hive添加分區(qū)會(huì)失敗。

    總結(jié)

    以上是生活随笔為你收集整理的Presto 分布式SQL查询引擎的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。