【发布时间】:2019-04-08 12:23:20
【问题描述】:
目前,我已经在 Kubernetes 中部署了一个 Hadoop 集群。 HDFS 有三个数据节点(statefulset)和一个名称节点。
我想从外部访问 HDFS 中的数据。因此,我创建了一个 nodePort 类型的服务来导出名称节点。当我尝试在 HDFS 中下载文件时,namenode 将我重定向到 datanode。问题是,redirect url的域是Kubernetes中的域,如hadoop-hdfs-dn-0.hadoop-hdfs-dn.hadoop.svc.cluster.local:50075,外部无法访问。
我的第一个想法是由客户端自己解析域。喜欢
hadoop-hdfs-dn-0.hadoop-hdfs-dn.hadoop.svc.cluster.local:50075 => IP0:50075
hadoop-hdfs-dn-1.hadoop-hdfs-dn.hadoop.svc.cluster.local:50075 => IP1:50075
hadoop-hdfs-dn-2.hadoop-hdfs-dn.hadoop.svc.cluster.local:50075 => IP2:50075
但是nodePort适用于Kubernetes集群中的所有节点,所以上面三个IP都会去同一个服务,可能会去到错误的datanode。
这种情况有什么解决办法吗? 无论是从 Hadoop 还是 Kubernetes 方面。 像这样强制namenode重定向?
hadoop-hdfs-dn-0.hadoop-hdfs-dn.hadoop.svc.cluster.local:50075 => <node IP>:50001
hadoop-hdfs-dn-1.hadoop-hdfs-dn.hadoop.svc.cluster.local:50075 => <node IP>:50002
hadoop-hdfs-dn-2.hadoop-hdfs-dn.hadoop.svc.cluster.local:50075 => <node IP>:50003
这样我就可以为 statefulset 中的每个 pod 创建三个服务。
【问题讨论】:
标签: hadoop dns kubernetes hdfs