我最近下载并构建了Spark2.3.1。我使用这些命令下载并选择2.3.1版本
git clone https://github.com/apache/spark.git
cd spark
git checkout tags/v2.3.1我希望提高我的应用程序的性能,并看到一些文章建议更新OpenBLAS的分布式版本,因此在构建spark时,我使用-Pnetlib-lgpl选项安装netlib-java。
这是我使用的命令。
build/mvn -Pyarn -Phive -Phive-thriftserver -DskipTests -Pnetlib-lgpl clean package我如何知道/确保spark现在使用的是与上述命令一起安装的netlib-java中的OpenBLAS,而不是与Ubuntu一起发布的?另外,这是更新OpenBLAS的正确方式,还是我错过了什么?
PS
我运行了以下命令,以确定它是否正确安装
import com.github.fommil.netlib.BLAS
println(BLAS.getInstance().getClass().getName())结果:
com.github.fommil.netlib.NativeSystemBLAS我使用了下面的链接
sudo update-alternatives --display liblapack.so
sudo update-alternatives --install /usr/lib64/libblas.so libblas.so /usr/lib64/atlas/libtatlas.so.3 1000
sudo update-alternatives --install /usr/lib64/libblas.so.3 libblas.so.3 /usr/lib64/atlas/libtatlas.so.3 1000
sudo update-alternatives --install /usr/lib64/liblapack.so liblapack.so /usr/lib64/atlas/libtatlas.so.3 1000
sudo update-alternatives --install /usr/lib64/liblapack.so.3 liblapack.so.3 /usr/lib64/atlas/libtatlas.so.3 1000我在用Ubuntu
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial发布于 2019-09-17 14:12:26
既然您已经确认Spark使用了本机BLAS库,那么使用lsof来找出承载工作人员的JVM进程到底加载了哪一个。加载的库在lsof输出中显示为内存映射的常规文件。下面是使用Intel MKL的星火示例:
$ lsof -n -p 10202
...
java 10202 ubuntu mem REG 8,1 70211598 519025 /opt/intel/compilers_and_libraries_2019.3.199/linux/mkl/lib/intel64_lin/libmkl_core.so
java 10202 ubuntu mem REG 8,1 902768 521066 /opt/intel/compilers_and_libraries_2019.3.199/linux/mkl/wrapper/mkl_wrapper.so
...10202是JVM进程的PID。输出包含每个打开的文件的完整路径,因此您可以很容易地判断是否使用了正确的库。
https://stackoverflow.com/questions/57970566
复制相似问题