python-3.x - 使用python3客户端通过K3s集群部署的h2o中的“错误:未加载密钥”
问题描述
我可以确认 K3s 内的 3 副本 h2o 集群已正确部署,因为在 Python3 解释器中执行h2o.init(ip="x.x.x.x")
按预期工作。我按照此处所述的说明进行操作:https ://www.h2o.ai/blog/running-h2o-cluster-on-a-kubernetes-cluster/
尽管如此,我不得不修改service.yaml
并注释掉这行clusterIP: None
,因为 K3s 抱怨与无法将 clusterIP 设置为 None 相关的事情。但即便如此,我可以证明它工作正常,并且我能够使用外部 IP 连接到集群。
如果我尝试使用 K3s 集群内的 h2o 集群加载数据集,使用与此处描述的完全相同的步骤http://docs.h2o.ai/h2o/latest-stable/h2o-docs/automl.html,这就是我得到的输出:
>>> train = h2o.import_file("https://s3.amazonaws.com/erin-data/higgs/higgs_train_10k.csv")
...
h2o.exceptions.H2OResponseError: Server error java.lang.IllegalArgumentException:
Error: Key not loaded: Key<Frame> https://s3.amazonaws.com/erin-data/higgs/higgs_train_10k.csv
Request: POST /3/ParseSetup
data: {'check_header': '0', 'source_frames': '["https://s3.amazonaws.com/erin-data/higgs/higgs_train_10k.csv"]'}
如果我使用该h2o.upoad_file("x.csv")
方法,也会发生同样的错误。
关于这里可能发生的事情有一个线索:Key not loaded: Key<Frame> while POSTing source frame through ParseSetup in H2O API call但我没有使用 curl,我找不到任何可以帮助我克服这个问题的参数: http: //docs.h2o.ai/h2o/latest-stable/h2o-py/docs/h2o.html ?highlight=import_file#h2o.import_file
由于不同的技术原因,我需要在同一个 K3s 集群中使用 Python 客户端,因此我无法启动,也无法启动 Flow 或 Firebug 以了解可能发生的情况。
h2o.init()
当我使用本地 Java 实例简单地发出 a 时,我可以确认它工作正常。
更新 1:
我在不同的 K3s 集群中尝试过但没有成功。我将其更改service.yaml
为 NodePort,现在这是错误回溯:
>>> train = h2o.import_file("https://s3.amazonaws.com/erin-data/higgs/higgs_train_10k.csv")
...
h2o.exceptions.H2OResponseError: Server error java.lang.IllegalArgumentException:
Error: Job is missing
Request: GET /3/Jobs/$03010a2a016132d4ffffffff$_a2366be93ec99a78d7bc161de8c54d67
更新 2:
我尝试过使用不同的服务(NodePort、LoadBalancer、ClusterIP),但它们都不起作用。我也尝试过使用Minikube
官方图像和我制作的自定义图像,但没有成功。我怀疑这与 h2o 本身或 pod 之间的集群有关。我会继续挖掘,让我们认为里面会有一些金子。
更新 3:
我还发现关于在 Docker 中运行 H2O 的帖子确实过时了https://www.h2o.ai/blog/h2o-docker/也没有在 GitHub 上工作 Dockerfile(我将其更改为取消注释 ENTRYPOINT 部分但没有成功): https://github.com/h2oai/h2o-3/blob/master/Dockerfile
尽管如此,我还是尝试了为 h2o-k8s 构建的自定义镜像,它在纯 Docker 中无缝运行。我想知道为什么它仍然无法在 K8s 中工作......
更新 4:
我尝试修改调用的环境变量H2O_KUBERNETES_SERVICE_DNS
但没有成功。
与此同时,集群开始不可用,即readinessProbe
's 不会成功完成。无论我现在改变什么,它都不起作用。
我在本地启动了一个 K3d 集群以查看发生了什么,令人惊讶readinessProbe
的是,使用v3.30.0.6
. 但现在我开始用 R 而不是 Python 来测试它。我很高兴我尝试过,因为我可能已经查明出了什么问题。客户端和服务器之间存在版本不匹配。所以我相应地将图像更新为v3.30.0.1
.
但现在又一次,readinessProbe
在我的 k3d 集群中不起作用,所以我无法测试它。
解决方案
看来它现在正在工作。R 客户端版本3.30.0.1
与服务器版本3.30.0.1
。还尝试了 Python 版本3.30.0.7
和服务器版本3.30.0.7
,它开始工作。奇妙。该问题是由客户端和服务器之间的版本不匹配引起的,因为 python 客户端已更新3.30.0.7
为 docker 的最新服务器为3.30.0.6
.
推荐阅读
- function - 使用 AutoHotKey 打开任何应用程序的功能错误
- file - Ant 可以从两个目录中删除 _identical_ 文件吗?
- flask - 如何运行 websockets 服务器以及为 HTML 页面提供服务的烧瓶服务器?
- windows - 如何使用融合样式禁用焦点边框和背景 QTreeWidget?
- c - 二进制到十进制转换 C 代码 - 满足特定测试用例的问题
- android - Android MediaPlayer 发布问题(bug?)
- .htaccess - htaccess 重定向将回到家而不是新位置
- c# - 可空的 int 文化特定于 toString()
- asp.net - Identity Server 不调用 BackChannelLogout url
- django - 更新表单时如何在下拉列表中显示已选择的选项