其實本來想紀錄一下建 Vespa container 的過程,但翻了一下之前的文章 [1],發現其實雖然細節有點不同,但大體上也是大同小異,這篇就簡單寫了,畢竟內容其實就跟 Vespa 的 Github 上寫得差不多 😆。
這篇其實算是個前置作業,目的是因為最近想紀錄一點 Vespa 的實驗數據,不過畢竟不能拿公司的數據放部落格(其實也不是公司不允許,單純只是要申請跟審核感覺很麻煩,我懶得弄 🙈),所以想要用簡單的 Vespa container 來做測試。基於這個原因,需要在自己的電腦準備一個 Vespa 環境,並且需要塞一些合理的測試資料進去。Vespa 團隊在他們的 Github [2] 上有準備一個 e-commerce 的範例,看起來還不錯,所以預計會先拿這個來做初始環境的建置。
Vespa 環境準備
準備的過程可以參考 [2]。首先就是把 repository 下載下來,然後用 docker 啟動。
1 2 3 4 5 |
$ 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 打包的東西其實還沒使用到,這是下個步驟會做的事。
1 2 |
$ curl --header Content-Type:application /zip --data-binary @target /application .zip \ localhost:19071 /application/v2/tenant/default/prepareandactivate |
佈署 application 是一個 curl 指令,把 mvn 打包的東西送上 Vespa 作為一個 tenant。以我的狀況來說,會得到以下的 response:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
{ "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" , "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 了。
1 2 3 4 5 6 7 8 9 10 11 |
$ 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 覆蓋上去了。
1 2 |
$ curl --header Content-Type:application /zip --data-binary @target /application .zip \ localhost:19071 /application/v2/tenant/default/prepareandactivate |
如果這時 schema 有變動的話,就會在 configChangeActions
這裡會顯示出偵測到的變動。
沒有留言:
張貼留言