3

在遵循Vespa 关于博客推荐的教程时,我在从命令行调用 Pig 时遇到了连接到本地 Vespa 端点的问题ENDPOINT=$(hostname):8080

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似乎在应用程序未激活时发生(即部署但忘记执行下一步)。

4

2 回答 2

2

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

不那么明显的解决方案(至少一开始......)只是http://在主机名前面添加,使其成为有效的 URIENDPOINT="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

于 2017-10-16T06:22:29.947 回答
2

正确用法是

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

我看到你已经通过重新连接端口来解决它,但使用 -Dvespa.feed.defaultport 会更好地用于生产用例。

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

于 2017-10-16T07:11:53.107 回答