其實本來想紀錄一下建 Vespa container 的過程,但翻了一下之前的文章 [1],發現其實雖然細節有點不同,但大體上也是大同小異,這篇就簡單寫了,畢竟內容其實就跟 Vespa 的 Github 上寫得差不多 😆。
這篇其實算是個前置作業,目的是因為最近想紀錄一點 Vespa 的實驗數據,不過畢竟不能拿公司的數據放部落格(其實也不是公司不允許,單純只是要申請跟審核感覺很麻煩,我懶得弄 🙈),所以想要用簡單的 Vespa container 來做測試。基於這個原因,需要在自己的電腦準備一個 Vespa 環境,並且需要塞一些合理的測試資料進去。Vespa 團隊在他們的 Github [2] 上有準備一個 e-commerce 的範例,看起來還不錯,所以預計會先拿這個來做初始環境的建置。
Vespa 環境準備
準備的過程可以參考 [2]。首先就是把 repository 下載下來,然後用 docker 啟動。
$ git clone --depth 1 https://github.com/vespa-engine/sample-apps.git $ cd sample-apps/use-case-shopping && mvn clean package $ docker run --detach --name vespa --hostname vespa-container \ --publish 8080:8080 --publish 19071:19071 \ vespaengine/vespa
這裡需要小小注意的地方是,docker run 啟動的單純只是純粹的 Vespa cluster,上面並沒有 application。所以 docker run 完成後,可以透過 http://localhost:19071 來查詢 Vespa cluster 的相關狀態,但無法做其他操作像是塞資料等,這是因為這時還沒有把 Vespa application 佈署上去。所以換言之,上述步驟中用 Maven 打包的東西其實還沒使用到,這是下個步驟會做的事。
$ curl --header Content-Type:application/zip --data-binary @target/application.zip \ localhost:19071/application/v2/tenant/default/prepareandactivate
佈署 application 是一個 curl 指令,把 mvn 打包的東西送上 Vespa 作為一個 tenant。以我的狀況來說,會得到以下的 response:
{ "log": [ { "time": 1644043626140, "level": "WARNING", "message": "'jvmargs' is deprecated and will be removed in Vespa 8. Please merge 'jvmargs' into 'options' or 'gc-options' in 'jvm' element. See https://docs.vespa.ai/en/reference/services-container.html#jvm", "applicationPackage": true }, { "time": 1644043626140, "level": "WARNING", "message": "Invalid or misplaced JVM options in services.xml: -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:8998. See https://docs.vespa.ai/en/reference/services-container.html#jvm", "applicationPackage": true } ], "tenant": "default", "url": "http://localhost:19071/application/v2/tenant/default/application/default/environment/prod/region/default/instance/default", "message": "Session 3 for tenant 'default' prepared and activated.", "configChangeActions": { "restart": [], "refeed": [], "reindex": [] } }
中間有一些 WARNING 是警告使用的某些設定在未來會被 deprecate,不過現在先不理它 😆。如果想確認 application 有沒有成功佈署,可以試著呼叫 http://localhost:8080,如果有成功拿到回覆就表示有成功地佈署,其中回覆的內容會長得有點像 http://localhost:19071/ApplicationStatus 那樣,會列出可用的 handlers。
接下來就是要塞資料進 Vespa 了。
$ curl -L -o vespa-feed-client-cli.zip \ https://search.maven.org/remotecontent?filepath=com/yahoo/vespa/vespa-feed-client-cli/7.527.20/vespa-feed-client-cli-7.527.20-zip.zip $ unzip vespa-feed-client-cli.zip $ gunzip -c meta_sports_20k_sample.json.gz | ./convert_meta.py > feed_items.json $ ./vespa-feed-client-cli/vespa-feed-client \ --verbose --file feed_items.json --endpoint http://localhost:8080 $ gunzip -c reviews_sports_24k_sample.json.gz | ./convert_reviews.py > feed_reviews.json $ ./vespa-feed-client-cli/vespa-feed-client \ --verbose --file feed_reviews.json --endpoint http://localhost:8080
第一段是下載 Vespa 的 feed client,第二、三段是分別把 20K 個商品和評論的資料解壓縮,並且透過 feed client 寫入到 Vespa 中。
更新 Schema
如果要更新 schema 的話,需要做的事情就是更新完以後,用 Maven 重新打包一次,然後再執行一次上述的 prepare and activate 的 API,就可以把更新的 schema 覆蓋上去了。
$ curl --header Content-Type:application/zip --data-binary @target/application.zip \ localhost:19071/application/v2/tenant/default/prepareandactivate
如果這時 schema 有變動的話,就會在 configChangeActions
這裡會顯示出偵測到的變動。
沒有留言:
張貼留言