libhdfs.so并没有直接与hadoop与hdfs直接交互,而是通过jni调用hadoop客户端jar包完成于hadoop的交互(不知这样说是否严禁)。所以如果调用libhdfs,
必须将所有jar包添加到CLASSPATH。然而并不确定其具体依赖哪个jar包,一个一个找确实很费劲,因为hadoop的jar包实在太多。因此,干脆将所有jar包都添加到
CLASSPATH。手动添加太费劲,使用bash脚本添加,脚本如下:
#!/bin/bash
echo $CLASSPATH
JARS=`find $HADOOP_HOME/share | grep jar`
for j in $JARS
do
#echo $j
CLASSPATH=$CLASSPATH:$j
done
#echo $CLASSPATH
export CLASSPATH=$CLASSPATH
注意,不要试图将改脚本编译成可执行脚本,然后通过./script.sh的方式执行改变$CLASSPATH,因为那样改变的$CLASSPATH仅在script.sh中生效,等到./script.sh
退出后,$CLASSPATH仍为原值,而应将改脚本保存为资源文件script,然后执行source script来改变环境变量。