【问题标题】:Remote access to HDFS on Kubernetes远程访问 Kubernetes 上的 HDFS
【发布时间】:2019-04-07 14:29:24
【问题描述】:

我正在尝试在 minikube(现在)上设置 HDFS,稍后在 DEV kubernetes 集群上设置,以便可以将它与 Spark 一起使用。我希望 Spark 在我的机器上本地运行,这样我就可以在开发期间以调试模式运行,因此它应该可以访问我在 K8s 上的 HDFS。

我已经设置了 1 个 namenode 部署和一个 datanode statefulset(3 个副本),当我在集群中使用 HDFS 时,它们工作正常。我为数据节点使用无头服务,为名称节点使用集群 IP 服务。

当我尝试公开 hdfs 时,问题就开始了。我正在考虑为此使用入口,但这只会将端口 80 暴露在集群外部,并将路径映射到集群内的不同服务,这不是我想要的。据我了解,我的本地 spark 作业(或 hdfs 客户端)与 namenode 对话,namenode 回复每个数据块的地址。该地址虽然类似于172.17.0.x:50010,但我的本地计算机当然看不到这些。

我有什么方法可以完成这项工作吗?提前致谢!

【问题讨论】:

  • 如果您将dfs.client.use.datanode.hostname 设置为true,可能会有所帮助。那么你至少可能会得到一个命名的 pod 地址,而不是一些浮动 IP
  • 已经设置好了,但我仍然获得了集群外部的 IP。但即使我得到了主机名,知道如何在集群之外使用它吗?我仍然无法访问hostname:50010
  • 您需要一些入口/负载均衡器代理,并设置外部客户端以了解如何解析内部 pod 地址。这不是一个 Hadoop 问题

标签: hadoop kubernetes hdfs


【解决方案1】:

我知道这个问题只是让它在开发环境中运行,但 HDFS 在 K8s 上是一项正在进行的工作,所以我绝不会在生产环境中运行它(在撰写本文时)。让它在容器编排系统上运行非常棘手,因为:

  1. 您说的是大量数据和大量节点(namenodes/datanodes),它们并不打算在集群的不同位置启动/停止。
  2. 如果您没有将 namenodes/datanodes 固定到 K8s 节点(这违背了拥有容器编排系统的目的),您将面临集群持续不平衡的风险
  3. 如果您在 HA 模式下运行名称节点并且由于任何原因您的名称节点死亡并重新启动,您将面临损坏名称节点元数据的风险,这会使您丢失所有数据。如果您只有一个节点并且不将其固定到 K8s 节点,这也是有风险的。
  4. 如果不在不平衡的集群中运行,您将无法轻松扩展和缩减。运行不平衡的集群会破坏 HDFS 的主要用途之一。

如果您查看DC/OS,他们能够使其在他们的平台上运行,因此可能会给您一些指导。

在 K8s 中,您基本上需要为所有名称节点端口和所有数据节点端口创建服务。您的客户端需要能够找到每个名称节点和数据节点,以便它可以读取/写入它们。此外,某些端口无法通过 Ingress,因为它们是第 4 层端口 (TCP),例如名称节点上的 IPC 端口 8020 和数据节点上的 50020

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 2019-03-21
    • 2022-06-27
    相关资源
    最近更新 更多