使用来自 hdfs 的 tfserving 负载模型时出现 hdfsBuilderConnect 错误

hdfsBuilderConnect error while using tfserving load model from hdfs

有我的环境信息:

我想使用 tfserving 从 hdfs 加载模块。

当我构建一个 tensorflow-serving:hadoop docker 图像时,像这样:

FROM tensorflow/serving:2.2.0

RUN apt update && apt install -y openjdk-8-jre
RUN mkdir /opt/hadoop-2.8.2
COPY /hadoop-2.8.2 /opt/hadoop-2.8.2


ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64
ENV HADOOP_HDFS_HOME /opt/hadoop-2.8.2
ENV HADOOP_HOME /opt/hadoop-2.8.2
ENV LD_LIBRARY_PATH 
${LD_LIBRARY_PATH}:${JAVA_HOME}/jre/lib/amd64/server
# ENV PATH $PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
RUN echo '#!/bin/bash \n\n\
CLASSPATH=(${HADOOP_HDFS_HOME}/bin/hadoop classpath --glob) 
tensorflow_model_server --port=8500 --rest_api_port=9000 \
--model_name=${MODEL_NAME} -- 
model_base_path=${MODEL_BASE_PATH}/${MODEL_NAME} \
"@"' > /usr/bin/tf_serving_entrypoint.sh \
&& chmod +x /usr/bin/tf_serving_entrypoint.sh

EXPOSE 8500
EXPOSE 9000
ENTRYPOINT ["/usr/bin/tf_serving_entrypoint.sh"]

然后 运行 :

docker run -p 9001:9000 --name tensorflow-serving-11 -e MODEL_NAME=tfrest -e MODEL_BASE_PATH=hdfs://ip:port/user/cess2_test/workspace/cess/models -t tensorflow_serving:1.14-hadoop-2.8.2

我遇到了这个问题。 ps:i 已经在 hadoop-2.8.2 中修改了 hadoop 配置

hdfsBuilderConnect(forceNewInstance=0, nn=ip:port, port=0, kerbTicketCachePath=(NULL), userName=(NULL)) 
error:(unable to get stack trace for java.lang.NoClassDefFoundError exception: ExceptionUtils::getStackTrace error.)

有什么解决这个问题的建议吗? 谢谢

我通过将 hadoop 绝对路径添加到类路径解决了这个问题。