Vespa 教程——Pig 无法连接到本地 Vespa 端点:URISyntaxException

Vespa Tutorial – Pig Failing to connect to local Vespa endpoint: URISyntaxException

当跟随 Vespa's tutorial about blog recommendation 时,我 运行 在使用 ENDPOINT=$(hostname):8080 从命令行调用 Pig 时遇到连接到本地 Vespa 端点的问题:

ERROR org.apache.pig.PigServer - exception during parsing: Error during parsing. Pig script failed to parse: 
<file tutorial_feed_content_and_tensor_vespa.pig, line 131, column 0> pig script failed to validate:
  java.lang.IllegalArgumentException: 
  java.net.URISyntaxException: Relative path in absolute URI: localhost:8080

这对于不熟悉 Pig 的人来说有点令人沮丧,因为他们会逐步遵循教程。

已接受的答案可用于获取正确的端口集。 Problem with Handshake flying-otter.local:8080 仍然是一个问题,但可能无关。

编辑添加,如果它有用的话:Problem with Handshake 似乎是在应用程序未激活时发生的(即已部署但忘记执行下一步)。

据我了解,由于 Pig 检查该字符串是否为正确的 URI,因此失败。

不太明显的解决方案(至少一开始是这样……)是简单地在主机名前面添加 http://,使其成为有效的 URI ENDPOINT="http://localhost:8080"

因此,对 Pig 的完整调用变为:

pig -x local -f tutorial_feed_content_and_tensor_vespa.pig \
    -param VESPA_HADOOP_JAR=vespa-hadoop.jar \
    -param DATA_PATH=trainPosts.json \
    -param TEST_INDICES=blog-job/training_and_test_indices/testing_set_ids \
    -param BLOG_POST_FACTORS=blog-job/user_item_cf/product_features \
    -param USER_FACTORS=blog-job/user_item_cf/user_features \
    -param ENDPOINT=http://$(hostname):8080

编辑:好吧,在 运行 一段时间(很长一段时间)之后,问题现在变成了,所以当 URI 被验证时,pig 似乎还是添加了默认端口。

 com.yahoo.vespa.http.client.core.communication.IOThread cycle
     INFO: Problem with Handshake localhost:8080:4080 ssl=false

此时我只是使用 socat 将 4080 端口重新连接到 8080 以避免需要重新启动 docker vm :/ socat tcp-listen:4080,reuseaddr,fork tcp:localhost:8080

正确的用法是

-param ENDPOINT=$(hostname) -D vespa.feed.defaultport=8080 

我看到你已经通过重新连接端口绕过了它,但是使用 -Dvespa.feed.defaultport 对生产用例来说会更好。

https://github.com/vespa-engine/vespa/pull/3576