我试图在minikube上(现在)设置HDFS,然后再在DEV kubernetes集群上设置HDFS,以便可以在Spark上使用它。我希望Spark在我的机器上本地运行,以便我可以在开发过程中以调试模式运行,以便它可以访问K8s上的HDFS。
我已经设置了1个namenode部署和一个datanode statefulset(3个副本),当我从集群中使用HDFS时,这些副本可以正常工作。我正在为数据节点使用无头服务,为名称节点使用cluster-ip服务。
当我尝试公开hdfs时,问题开始了。我当时正在考虑使用一个入口,但这只会将端口80暴露在集群外部,并将路径映射到集群内的其他服务,这不是我想要的。据我了解,我的本地Spark作业(或hdfs客户端)与namenode对话,该namenode为每个数据块提供一个地址。该地址虽然类似于172.17.0.x:50010
,但我的本地计算机当然看不到这些地址。
有什么办法可以使我工作吗?预先感谢!
答案 0 :(得分:3)
我知道这个问题只是关于使其能够在开发环境中运行,但是HDFS在K8上仍处于开发阶段,因此,无论如何我都不会在生产环境中运行它(截至撰写本文时)。要使其在容器编排系统上工作非常棘手,因为:
如果您查看DC/OS,他们就能在其平台上使用它,因此可能会为您提供一些指导。
在K8中,基本上,您需要为所有namenode端口和所有datanode端口创建服务。您的客户端需要能够找到每个名称节点和数据节点,以便它们可以从中读取/写入。另外,某些端口也无法通过入口,因为它们是第4层端口(TCP),例如,名称节点上的IPC端口8020
和数据节点上的50020
。
希望有帮助!