目前,我已经在kubernetes部署了一个hadoop集群。hdfs有三个datanode(statefulset)和一个namenode。我想从外部访问hdfs中的数据。因此,我创建了一个nodeport类型的服务来导出namenode。当我试图下载hdfs中的文件时,namenode将我重定向到datanode。问题是,重定向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
但是,节点端口适用于kubernetes集群中的所有节点,因此上述三个IP都将转到同一个服务,并且可能转到错误的数据节点。
这种情况有什么解决办法吗?无论是从hadoop还是kubernetes的Angular 。像这样强制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创建三个服务。
1条答案
按热度按时间xzv2uavs1#
我建议你试试。
假设您的datanode正在监听端口50000,您可以为每个datanode创建单独的服务,并将其运行的节点的nodeip用作externalip。像这样:
然后可以将这些pod域名解析为它运行的节点ip。