OpenMLDB 新手寶典 開發者上手必讀

openmldb發表於2023-02-28

OpenMLDB作為分散式系統,模式多樣、客戶端豐富,初次使用可能會遇到安裝部署或者執行使用方面的問題。

本文將從新手使用的角度,為大家講解如何進行診斷除錯,以及如何向OpenMLDB社群技術人員反饋疑問或提供清晰的使用資訊。

建立 OpenMLDB 與連線

首先,我們建議不熟悉分散式多程式管理的新手使用 docker 建立 OpenMLDB,方便快速上手。待熟悉 OpenMLDB 各元件後,再嘗試分散式部署。

docker 建立 OpenMLDB 可見快速上手文件(見文末),請注意文件中有兩個版本,單機版和叢集版。請記住自己建立的版本,不要混合使用,以致錯亂。

啟動成功的標準是可以使用 CLI 連線上 OpenMLDB 服務端(即使用 /work/openmldb/bin/openmldb連線 OpenMLDB,單機或叢集均可以透過 CLI 連線),並且執行  show components;可以看到 OpenMLD B服務端元件的執行情況。

如果 CLI 無法連線 OpenMLDB,請先確認程式是否執行正常,可以透過  ps f|grep bin/openmldb確認 nameserver和tabletserver 程式,叢集版還需要透過  ps f | grep zoo.cfg來確認 zk 服務, ps f | grep TaskManagerServer來確認 taskmanager 程式。

如果所有服務程式都執行中,但 CLI 連線服務端失敗,請確認 CLI 執行的引數。如果仍有問題,請聯絡我們並提供 CLI 的錯誤資訊。

Note

如果我們還需要 OpenMLDB 服務端的配置和日誌,可以使用診斷工具獲取,見下文。

執行 SQL

OpenMLDB 所有命令均為 SQL,如果 SQL 執行失敗或互動有問題(不知道命令是否執行成功),請先確認 SQL 書寫是否有誤,命令並未執行,還是命令進入了執行階段。

例如,下面提示 Syntax error 的是SQL書寫有誤,請參考 sql reference 糾正錯誤。

127.0.0.1:7527/db> create table t1(c1 int;Error: Syntax error: Expected ")" or "," but got ";" [at 1:23]create table t1(c1 int;                      ^

如果是命令進入執行階段,但執行失敗或互動失敗,需要明確以下幾點:

  • OpenMLDB 是單機還是叢集?
  • 執行模式是什麼?CLI 執行命令時可以使用  show variable獲取,但注意單機版的執行模式沒有意義。

我們需要特別注意叢集版的一些使用邏輯。

叢集

離線

如果是叢集離線命令,預設非同步模式下,傳送命令會得到 job id 的返回。可使用 show job <id>來查詢 job 執行情況。

離線 job 如果是 SELECT(並不 INTO 儲存結果),也不會將結果列印在客戶端。需要從日誌中獲得結果,日誌預設在 /work/openmldb/taskmanager/bin/logs/jog_x.log

如果發現 job failed 或者 finished,但不符合你的預期,請查詢日誌。日誌預設在 /work/openmldb/taskmanager/bin/logs/jog_x_error.log(注意有 error 字尾),

日誌地址由 taskmanager.properties 的  job.log.path配置,如果你改變了此配置項,需要到配置的目的地尋找日誌。

Note

  • 如果 taskmanager 是 yarn 模式,而不是 local 模式, job_x_error.log中的資訊會較少,不會有 job 錯誤的詳細資訊。需要透過  job_x_error.log中記錄的 yarn app id,去 yarn 系統中查詢 job 的真正錯誤原因。

線上

叢集版線上模式下,我們通常只推薦使用  DEPLOY建立 deployment 和執行 deployment 做實時特徵計算。在 CLI 或其他客戶端中,直接在線上中進行 SELECT查詢,稱為“線上預覽”。線上預覽有諸多限制,詳情請參考功能邊界-叢集版線上預覽模式,請不要執行不支援的 SQL。

提供復現指令碼

如果你透過自主診斷,無法解決問題,請向我們提供復現指令碼。一個完整的復現指令碼,如下所示:

create database db;use db;-- create youer table
create table xx ();-- offline or onlineset @@execute_mode='';-- load data or online insert-- load data infile '' into table xx;-- insert into xx values (),();-- query / deploy ...

如果你的問題需要資料才能復現,請提供資料。如果是離線資料,離線無法支援 insert,請提供 csv/parquet 資料檔案。如果是線上資料,可以提供資料檔案,也可以直接在指令碼中進行 insert。

這樣的資料指令碼可以透過重定向符號,批次執行 sql 指令碼中的命令。

/work/openmldb/bin/openmldb --host 127.0.0.1 --port 6527 < reproduce.sql/work/openmldb/bin/openmldb --zk_cluster=127.0.0.1:2181 --zk_root_path=/openmldb --role=sql_client < reproduce.sql

請確保在你本地可以使用復現指令碼復現問題,再記錄 issue 或傳送給我們。

!Caution

請注意離線 job 預設為非同步。如果你需要離線匯入再查詢,請設定為同步模式,詳情見配置離線命令同步執行。否則匯入還未完成就進行查詢,是無意義的。

提供配置與日誌

如果你的問題無法透過復現指令碼復現,那麼,就需要你提供客戶端和服務端的配置與日誌,以便我們調查。

docker 或本地的叢集(服務端所有程式都在本地),可以使用診斷工具快速獲取配置、日誌等資訊。

使用 init.sh/start-all.sh 指令碼啟動的 OpenMLDB 服務端,可以使用以下命令進行診斷,分別對應叢集版和單機版。

openmldb_tool --env=onebox --dist_conf=cluster_dist.yml
openmldb_tool --env=onebox --dist_conf=stadnalone_dist.yml

cluster_dist.yml和  stadnalone_dist.yml,可在 docker 容器 /work/diag目錄中找到,或將github目錄中的yml檔案複製下來使用。

如果是分散式的叢集,需要配置 ssh 免密才能順利使用診斷工具,參考文件診斷工具。

如果你的環境無法做到,請手動獲取配置與日誌。

本期 · 相關資料

OpenMLDB 快速上手文件

網址:

瞭解更多

Github 網址:

微信交流群網址:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026745/viewspace-2937338/,如需轉載,請註明出處,否則將追究法律責任。

相關文章