前几天部门刚来不久的小同学装Hadoop一直失败,报libhadoop加载错误解决不了.过去查看下相关依赖lib都解决了,JAVA_LIBRARY_PATH也指定正确位置了,为啥还会失败呢?

直接强制加载一次nativelib再看发现原来在另外一个目录有人安装了libhadoop,但是版本是错误的,很多依赖都找不到,而HADOOP启动时正加载了这个路径下的libhadoop导致失败的,这是什么原因呢?

查看HADOOPnativelib的加载过程,最后跟踪到classloader的loadLibrary方法发现:

usr_paths = initializePath("java.library.path");
sys_paths = initializePath("sun.boot.library.path");

原来在加载javalib时,classloader是优先加载sys_paths然后才是usr_paths.

我也学习了:)