目的:
presto官方版Github上面沒有oracle的插件,發現社區版有,社區版沒有編譯好的,需要自己本地編譯。
略有坑,記錄下,供大家參考。
環境:
win10、idea2020 1.1、centos-release-7-5.1804.el7.centos.x86_64、presto社區版337-SNAPSHOT
jdk-11.0.7_windows-x64_bin、jdk-11.0.7_linux-x64_bin.tar.gz
所有的文件分享:
鏈接:https://pan.baidu.com/s/1K3Sy6fOKCeBT9tdyQxk34g
提取碼:0lb6
編譯過程:
presto官方版Github地址:
社區版Github地址:
下載社區版
https://github.com/prestosql/presto.git
idea打開,等待maven下載依賴。編譯的命令是:mvn clean install -DskipTests
問題1:
Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce (default) on project presto-root: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed.
這裏是jdk版本不對。因爲一開始沒看官方的說明。
- Open the File menu and select Project Structure
- In the SDKs section, ensure that JDK 11 is selected (create one if none exist)
- In the Project section, ensure the Project language level is set to 8 (Presto does not yet use Java 11 language features)
這裏要求安裝jdk11,直接去oracle官網下載安裝即可,配置一下環境變量。
然後在idea項目裏面配置下jdk和語言等級
問題2:
Failed to execute goal pl.project13.maven:git-commit-id-plugin:4.0.0:revisio。。。
這裏可能是jar包沒下載下來,直接注掉引用即可。
問題3:
prestoFailed to execute goal org.skife.maven:really-executable-jar-maven-plugin:1.0.5:really-executable-jar (default) on project presto-cli: FAILURE!
這裏同問題2.直接注掉所有的依賴引用。涉及到的模塊比較多,因此就不一一截圖了。搜下,引用到的都注掉。
問題4:
最後還是maven依賴的問題。看下圖箭頭,注掉好像沒什麼作用,還會報錯,因此看了一下,presto-docs模塊是presto的介紹說明模塊,沒什麼用,因此直接在root下的pom.xml註釋掉該模塊即可。不將其打包在項目裏。
後面沒有遇到什麼問題。直接打包成功。
這裏注意:!!!docs模塊裏面有關於presto後面部署的一些說明,可以直接打開來看。
部署過程:
1、需要把presto--server放到服務器,這裏使用centos。下圖tar.gz包
2、另外還需要cli,客戶端包,下圖executable.jar包
3、另外還有centos的jdk11。
4、presto解壓後改名presto-337,和jdk放同一目錄下
5、在presto-337創建目錄 etc 和data。data裏面是空的,presto啓動後會寫入日誌。etc放置presto的配置文件。
presto-337中 bin lib NOTICE plugin README.TXT都是解壓後自帶的。etc和data是我們創建的。
6、寫入配置
#進入etc
cd etc
#寫入配置(四行),端口自己定。這裏是單節點部署presto
vim config.properties
coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=18086
discovery-server.enabled=true
discovery.uri=http://127.0.0.1:18086
#保存
#寫入配置(9行),
vim jvm.config
-server
-Xmx16G
-XX:-UseBiasedLocking
-XX:+UseG1GC
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+UseGCOverheadLimit
-XX:+ExitOnOutOfMemoryError
-XX:ReservedCodeCacheSize=512M
#保存
#寫入配置(1行),
vim log.properties
com.facebook.presto=INFO
#保存
#寫入配置(3行),data是我們在presto創建的文件夾
vim node.properties
node.environment=presto
node.id=ffffffff-ffff-ffff-ffff-fffffffff222
node.data-dir=/home/hii/soft/presto-337/data
#保存
在etc下創建數據庫配置。這裏創建了三個 mysql postgresql oracle 都曬出來
#在etc下創建目錄
cd etc
mkdir catalog
cd catalog
#mysql,寫入四行
vim mysql.properties
connector.name=mysql
connection-url=jdbc:mysql://127.0.0.1:3306?useSSL=false&serverTimezone=Asia/Shanghai
connection-user=root
connection-password=root
#保存
#postgresql,寫入四行
vim postgresql.properties
connector.name=postgresql
connection-url=jdbc:postgresql://127.0.0.1:5432/postgres
connection-user=root
connection-password=root
#保存
#oracle,寫入四行
vim oracle.properties
connector.name=oracle
connection-url=jdbc:oracle:thin:@127.0.0.1:1521:test
connection-user=root
connection-password=root
#保存
7、將客戶端放入presto-337目錄下的bin中 ,改名presto
mv presto-cli-337-SNAPSHOT-executable.jar presto
8、指定presto的運行java環境
因爲用戶的環境變量是jdk8,而且不想把用戶的環境變成jdk11,因此需要爲presto運行單獨指定jdk
進入 presto-337\bin
vim launcher
在exec "$(dirname "$0")/launcher.py" "$@"的上面加入兩行。jdk-11.0.7是我們解壓的java11.
PATH=/home/hii/soft/jdk-11.0.7/bin/:$PATH
java -version
exec "$(dirname "$0")/launcher.py" "$@"
如下圖
9、運行presto
cd presto-337/bin
./launcher run
使用run命令可以直接在控制檯打印出日誌,以便看部署是否成功。其他命令還有下面幾個。使用help可以獲得幫助。
./launcher stop
./launcher start
./launcher status
./launcher help
日誌可以在presto-337/data/var/log看到
tail -100f presto-337/data/var/log/server.log
看到三個數據庫連接,沒有報error,表示成功。
10、使用cli客戶端測試連接。
cd presto-337/bin
./presto --server 127.0.0.1:18086 --catalog mysql
注意上面的命令執行在手動指定jdk版本的時候有問題。正確的查詢方式是下面這個
/home/hii/soft/jdk-11.0.7/bin/java -jar presto --server 127.0.0.1:18086 --catalog mysql
需要指定jdk的bin來啓動 /home/hii/soft/jdk-11.0.7/bin/java -jar
注意::下面的異常可能是catalog裏面的配置寫的有問題。有空格或者什麼原因。從別人那裏複製過來出現了這個異常,從官網複製沒有。其他人也有這個問題。具體原因不清楚。提個醒吧。
java.lang.IllegalArgumentException: No factory for connector mysql。。。。
上面就完成了所有的編譯和部署。並且可以查詢數據。
至於怎麼在idea編譯+運行+調試,暫時沒有研究。