Zeppelin配置ipython Interpreter遇到问题及解决方案

Zeppelin配置ipython Interpreter遇到问题及解决方案

  • 一、说在前面
  • 二、配置过程遇到的问题
    • 2.1 org.apache.zeppelin.interpreter.InterpreterException: Kernel prerequisite is not meet: jupyter-client is not installed.
    • 2.2 java.io.IOException: Fail to setup JVMGateway
    • 2.3 Fail to open JupyterKernelInterpreter: java.io.IOException:Fail to launch Jupyter Kernel as the python process is failed.
  • 三、一切问题终将得到解决

一、说在前面

不同操作系统,不同python环境不太一致。我电脑的环境如下:

操作系统 python环境
mac(Apple M1) python3.9虚拟环境

关于Zeppelin配置ipython是参照官网的IPython Interpreter配置说明。

python3.9虚拟环境是基于conda创建的,所以没有安装jupyter包,里面涉及到关联Zeppelin的安装包如下所示:

包名 版本 说明
grpcio @file… conda install 安装
protobuf 3.20.0 pip install 安装

二、配置过程遇到的问题

⚠️注意事项⚠️:
在使用虚拟环境中的pythonpip命令时。如你python虚拟环境目录为:/Users/temp/py39,那么在使用pythonpip命令时需要使用/Users/temp/py39/bin/pip install jupyter-client。这点大家一定要注意,下面就不再赘述了。

2.1 org.apache.zeppelin.interpreter.InterpreterException: Kernel prerequisite is not meet: jupyter-client is not installed.

提示没有安装jupyter-client,可能是由于两个原因导致的。

  • 原因一:

    在安装jupyter时是使用conda install jupyter命令安装的,而Zeppelin在判断是jupyter-client是否安装、版本号是使用pip frezze命令判断的。

    如果使用pip frezze 命令列出jupyter-client时出现:
    jupyter-client @ file:///tmp/build/80754af9/jupyter_client_1594826976318/work
    说明是使用conda install命令安装的。

    解决方案:
    参考链接

    1. 在conda虚拟环境中使用conda uninstall jupyter-client命令卸载jupyter-client;
    2. 使用pip install jupyter-client命令从新安装jupyter-client。(⚠️注意事项⚠️)

  • 原因二: jupyter-client版本问题

    pip install jupyter-client默认安装的是最高版本。在使用pip freeze列出jupyter-client时,其显示安装的版本为jupyter_client==7.3.5。(⚠️注意事项⚠️)

    注意了: ⚠️⚠️⚠️ jupyter-client VS jupyter_client中间的下划线,一个是-,一个是_。需要注意这个细节,Zeppelin中是通过jupyter-client判断的。这也是明明是安装了jupyter_client却还是报错的原因。

    解决方案:

    1. 使用pip install jupyter-client==7.0.1更改jupyter-client的版本。(⚠️注意事项⚠️)
    2. 也可以使用其他版本进行测试。
    3. 在使用pip freeze列出jupyter-client时,其显示安装的版本为jupyter-client==7.0.1。重启Zeppelin,这个报错完美解决。

2.2 java.io.IOException: Fail to setup JVMGateway

这个没弄清楚具体什么原因导致的,我是参照这篇博客中的方案解决 。可能是jdk路径的问题?

该博客中给出了四个步骤的解决方案:


Zeppelin配置ipython Interpreter遇到问题及解决方案_第1张图片


前三个步骤我都没有修改,我按照第四步骤将common.sh文件进行了修改。这个文件的目录是在Zeppelin安装目录下的bin路径下,修改内容如下,大概是在72行左右。修改内容需要按照自己电脑的java路径修改,没有统一答案。

 68 function check_java_version() {
 69     if [[ -n "${JAVA_HOME+x}" ]]; then
 70         JAVA="$JAVA_HOME/bin/java"
 71     fi
 72      原先为"java"修改此处的JAVA路径为"/opt/modules/jdk1.8.0_202"。需要根据自己电脑的java路径修改。
 java_ver_output=$("${JAVA:-/opt/modules/jdk1.8.0_202}" -version 2>&1)
 73     jvmver=$(echo "$java_ver_output" | grep '[openjdk|java] version' | awk -F'"' 'NR==1 {print $2}' | cut -d\- -f1)
 74     JVM_VERSION=$(echo "$jvmver"|sed -e 's|^\([0-9][0-9]*\)\..*$|\1|')
 75     if [ "$JVM_VERSION" = "1" ]; then
 76         JVM_VERSION=$(echo "$jvmver"|sed -e 's|^1\.\([0-9][0-9]*\)\..*$|\1|')
 77     fi
 78 
 79     if [ "$JVM_VERSION" -lt 8 ] || { [ "$JVM_VERSION" -eq 8 ] && [ "${jvmver#*_}" -lt 151 ]; } ; then
 80         echo "Apache Zeppelin requires either Java 8 update 151 or newer"
 81         exit 1;
 82     fi
 83 }

很不幸在从新安装的时候这个问题又复现了。。。
ImportError: dlopen(/envs/zp39/lib/python3.9/site-packages/grpc/_cython/cyg)

可能是在安装grpcio 使用pip 方式安装,缺少了依赖。

解决方案
使用conda 安装grpcio。

2.3 Fail to open JupyterKernelInterpreter: java.io.IOException:Fail to launch Jupyter Kernel as the python process is failed.

问题叠着问题,在解决了上述两个问题后,又出现这个问题了,具体截图如下。重点看下面圈红的地方。
该问题的根本原因是protobuf package版本过高。


文字内容放到这里,以便检索。
org.apache.zeppelininterpreterInterpreterException:org.apache.zeppelin.interpreter.InterpreterException: Fail to open JupyterKernelInterpreter: java.io.I0Exception: Fail to launch Jupyter Kernel as the python i process is failed. Traceback (most recent call last):

TypeError: Descriptors cannot not be created directly.

If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
If you cannot immediately regenerate your protos, some other pos ssible workarounds are:

  1. Downgrade the protobuf package to 3.20.x or lower. ⚠️
  2. Set PROTOCOLBUFFERS PYTHON_IMPLEMENTATION=python(butthis will use pure-Python parsing and will be much slower)

Zeppelin配置ipython Interpreter遇到问题及解决方案_第2张图片

解决方案:

参照报错中给出的解决方案。

  1. 使用pip install protobuf==3.20.0更改protobuf的版本。(⚠️注意事项⚠️)

三、一切问题终将得到解决

重启Zeppelin,bin/zeppelin-daemon.sh restart进行测试。可以使用ipython interpreter了。在安装配置过程中遇到的问题都记录于此,希望同志们在安装配置过程中遇到同类的问题可以在我的这篇博客中找到解决方案。

%python.ipython

#python help
range?

#timeit
%timeit range(100)

Zeppelin配置ipython Interpreter遇到问题及解决方案_第3张图片

你可能感兴趣的:(ipython,python,ide)