You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 20.04下Apache Spark 3.1.3的OpenBlas与Lapack无法工作求助

问题分析与解决方案

关于libgfortran5的兼容性

Ubuntu 20.04中libgfortran是虚拟包,无法直接安装,libgfortran5是对应GCC 9系列的官方替代包,完全兼容netlib对Fortran运行库的需求,这不是导致原生BLAS加载失败的根源。

解决update-alternatives报错问题

执行update-alternatives时提示"no alternatives for...",是因为Ubuntu 20.04安装libopenblas-base和libatlas3-base后,不会自动为这些库注册备选项,需要手动添加:

  1. 先确认已安装的BLAS/LAPACK库路径:

    # 查看libblas.so.3的实际指向
    ls -l /usr/lib/x86_64-linux-gnu/libblas.so.3
    # 查看liblapack.so.3的实际指向
    ls -l /usr/lib/x86_64-linux-gnu/liblapack.so.3
    

    正常情况下,libopenblas-base安装后,这两个文件会指向libopenblas.so.0(OpenBLAS已整合LAPACK实现)。

  2. 手动注册备选项(以OpenBLAS作为默认库为例):

    # 注册libblas.so
    sudo update-alternatives --install /usr/lib/x86_64-linux-gnu/libblas.so libblas.so /usr/lib/x86_64-linux-gnu/libopenblas.so.0 100
    # 注册libblas.so.3
    sudo update-alternatives --install /usr/lib/x86_64-linux-gnu/libblas.so.3 libblas.so.3 /usr/lib/x86_64-linux-gnu/libopenblas.so.0 100
    # 注册liblapack.so
    sudo update-alternatives --install /usr/lib/x86_64-linux-gnu/liblapack.so liblapack.so /usr/lib/x86_64-linux-gnu/libopenblas.so.0 100
    # 注册liblapack.so.3
    sudo update-alternatives --install /usr/lib/x86_64-linux-gnu/liblapack.so.3 liblapack.so.3 /usr/lib/x86_64-linux-gnu/libopenblas.so.0 100
    

    完成后再执行update-alternatives --config libblas.so.3,就能正常选择默认BLAS库了。

让Spark正确加载原生BLAS库

  1. 排查依赖版本冲突:Spark 3.1.3默认依赖的netlib版本就是1.1.2,你添加的pom依赖版本匹配,但要注意:

    • 若用sbt打包,确保assembly插件没有排除netlib的原生库依赖;
    • 提交任务时建议用--packages com.github.fommil.netlib:all:1.1.2参数,避免本地依赖与集群环境不一致。
  2. 配置JVM原生库路径:Spark的JVM进程需要能找到系统安装的原生库,可通过两种方式配置:

    • 修改Spark配置文件spark-env.sh,添加:
      export SPARK_JAVA_OPTS="-Djava.library.path=/usr/lib/x86_64-linux-gnu"
      
    • 提交任务时直接指定:
      spark-submit --conf "spark.executor.extraJavaOptions=-Djava.library.path=/usr/lib/x86_64-linux-gnu" \
                   --conf "spark.driver.extraJavaOptions=-Djava.library.path=/usr/lib/x86_64-linux-gnu" \
                   your_application.jar
      
  3. 验证加载结果:重新运行测试代码,若输出变为com.github.fommil.netlib.NativeSystemBLAS或com.github.fommil.netlib.NativeRefBLAS,说明原生库加载成功,Spark日志中的警告也会消失。

额外检查

  • 确保所有Spark Worker节点都安装了libopenblas-base、libgfortran5包,并且配置了相同的java.library.path,Worker节点也需要加载原生库;
  • 查看Worker节点的日志,确认Worker进程能正常找到原生库,避免仅Driver加载成功的情况。

内容的提问来源于stack exchange,提问作者ktzan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 10:54:20