Вам необходимо установить связь как с libhdfs, так и с libjvm!
Полагаю, лучший способ помочь - показать вам рабочую настройку. Вот мои «LIBS» в моем Makefile:
LIBS=-L/usr/hdp/2.6.4.0-91/usr/lib/ -lhdfs -L/usr/jdk64/jdk1.8.0_112/jre/lib/amd64/server/ -ljvm -Wl,-rpath=/usr/hdp/2.6.4.091/usr/lib/:/usr/jdk64/jdk1.8.0_112/jre/lib/amd64/server/
Вы хотите использовать "-Wl, -rpath", поэтому вам не нужно использовать LD_LIBRARY_PATH. И вот результат ldd после связывания. Вы хотите убедиться, что все библиотеки разрешены:
[my-prompt]$ ldd myprogram
linux-vdso.so.1 => (0x00007ffcf7048000)
libhdfs.so.0.0.0 => /usr/hdp/2.6.4.0-91/usr/lib/libhdfs.so.0.0.0 (0x00007fd120723000)
libjvm.so => /usr/jdk64/jdk1.8.0_112/jre/lib/amd64/server/libjvm.so (0x00007fd11f730000)
libc.so.6 => /lib64/libc.so.6 (0x000000390be00000)
libdl.so.2 => /lib64/libdl.so.2 (0x000000390c600000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x000000390ca00000)
/lib64/ld-linux-x86-64.so.2 (0x000000390ba00000)
libm.so.6 => /lib64/libm.so.6 (0x000000390c200000)
Когда вы запускаете его, так как он в конечном итоге запускает Java-байт-код, вам также нужно установить CLASSPATH. Вот что вы можете сделать:
export CLASSPATH=`hadoop classpath --glob`
./your-program
Это поздний ответ, но я надеюсь, что он может спасти других людей от некоторых проблем.