Подключение к hdfs из kubernetes - PullRequest
1 голос
/ 29 января 2020

Я пытаюсь подключиться к кластеру hdfs из Docker образа, развернутого в miniKube. Вот мой Dockerfile:

FROM lrh7
USER root
ARG config_files=configs
ARG pyfiles=pyfiles
ARG HADOOP_PATH="/opt/hadoop"

RUN mkdir -p ${HADOOP_PATH}


RUN yum -y install which java-1.6.0-openjdk.x86_64 krb5-workstation python3

COPY hadoop-2.6.0/etc/hadoop ${HADOOP_PATH}/etc/hadoop
COPY hadoop-2.6.0/share/hadoop/hdfs ${HADOOP_PATH}/share/hadoop/hdfs
COPY hadoop-2.6.0/share/hadoop/common ${HADOOP_PATH}/share/hadoop/common
COPY hadoop-2.6.0/bin ${HADOOP_PATH}/bin
COPY hadoop-2.6.0/libexec ${HADOOP_PATH}/libexec


RUN mkdir -p ${HADOOP_PATH}/work-dir && \
    rm /bin/sh && \
    ln -sv /bin/bash /bin/sh && \
    chgrp root /etc/passwd && chmod ug+rw /etc/passwd

RUN chmod -R 777 ${HADOOP_PATH}

RUN pip3 install flask gunicorn 

ENV HADOOP_HOME=${HADOOP_PATH}

COPY ${config_files}/krb5.conf /etc/krb5.conf
COPY ${config_files}/core-site.xml ${HADOOP_PATH}/etc/hadoop
COPY ${config_files}/hdfs-site.xml ${HADOOP_PATH}/etc/hadoop
COPY ${config_files}/hive-site.xml ${HADOOP_PATH}/etc/hadoop
COPY ${config_files}/krb5cc_0 /tmp



COPY ${pyfiles}/app.py ${HADOOP_PATH}/work-dir 
COPY ${pyfiles}/config.py ${HADOOP_PATH}/work-dir 

ENV JAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk.x86_64
ENV PATH="$HADOOP_HOME/bin:$JAVA_HOME/bin:${PATH}"


WORKDIR ${HADOOP_PATH}/work-dir

ENV PORT 8080

Я могу создать и запустить образ, используя этот Dockerfile. Используя это изображение, я также могу подключиться к hdfs и запускать команды hdfs. Для следующего шага я развернул этот образ в миникубе, используя приведенный ниже deploy.yml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hdfsclient
spec:
  selector:
    matchLabels:
      app: hdfsclient
  replicas: 1
  template:
    metadata:
      labels:
        app: hdfsclient
    spec:
      containers:
      - name: hdfsclient
        image: hdfsclient
        ports:
        - containerPort: 8080

, а в app.py у меня есть:

from flask import Flask
import os
import config
app = Flask(__name__)

filename='tmp2.file'
f = open(filename,'w')
f.write('Hello World!')
f.close()

@app.route("/")
def hello():    
    os.system(f'hdfs dfs -put -f {filename} /tmp/{filename}')
    return "Hello World!"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=config.PORT, debug=config.DEBUG_MODE)

В основном я пишу фиктивный файл в папку hdfs.

Развертывание прошло успешно, и модуль создан. Я также создал сервис. Однако файл не записывается в папку hdfs.

В чем проблема, а также есть ли лучший способ сделать это? Я хочу, чтобы я мог читать и писать в папку hdfs, используя minikube.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...