Внешний доступ Hadoop HDFS развернут в Куберне - PullRequest
0 голосов
/ 05 ноября 2018

В настоящее время я развернул кластер Hadoop в Kubernetes. Есть три датода (statefulset) и наменод для HDFS. Я хочу получить доступ к данным в HDFS извне. Таким образом, я создал сервис с типом nodePort для экспорта наменода. Когда я попытался загрузить файл в HDFS, наменод перенаправил меня в датодан. Проблема в том, что домен перенаправления 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-адреса перейдут к одной и той же службе и могут перейти к неверному датоду.

Есть ли решение для этой ситуации? Либо с точки зрения 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

Чтобы я мог создать три службы для каждого модуля в наборе состояний.

1 Ответ

0 голосов
/ 05 ноября 2018

Я бы посоветовал вам попробовать externalIP.

предположим, что ваша дата-станция прослушивает порт 50000, вы можете создать отдельную службу для каждой датоды и использовать nodeip узла, на котором она работает, в качестве externalIP. как то так:

apiVersion: v1
kind: Service
metadata:
  name: datanode-1
spec:
  externalIPs:
  - node1-ip
  ports:
  - name: datanode
    port: 50000
  selector:
    app: datanode
    id: "1"
---
apiVersion: v1
kind: Service
metadata:
  name: datanode-2
spec:
  externalIPs:
  - node2-ip
  ports:
  - name: datanode
    port: 50000
  selector:
    app: datanode
    id: "2"
---
apiVersion: v1
kind: Service
metadata:
  name: datanode-3
spec:
  externalIPs:
  - node3-ip
  ports:
  - name: datanode
    port: 50000
  selector:
    app: datanode
    id: "3"

Затем вы можете преобразовать эти имена доменов pod в узел ip, на котором он запущен.

...