关于HADOOP_CLASSPATH

今天执行hadoop URLCat hdfs://locahost...的时候总是提示“找不到或无法加主类URLCat",将class文件打包成jar文件就能正常执行,查找资料得知需要设置classpath,于是添加classpath:

1. 打开~/.bash_profile文件,添加一句 “EXPORT HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:.”,当然也可以直接加在hadoop-env.sh中,一样的都是设置环境变量,只是加在hadoop-env.sh中可能要方便一些,不用执行source 指令;

2. 使profile文件生效

source ~/.bash_profile

这样再执行就可以找到了,注意添加的classpath是一个英文点号,代表当前目录,意思就是hadoop执行的时候除了在原有设置的路径下查找外,还会在当前路径下查找类文件,所以可以这样用:

cd

$HADOOP_HOME/bin/hadoop URLCat hfs://localhost...

但是需要注意的是,添加当前目录为classpath只在进入到类文件所在的目录进行操作时有效,也就是先要cd到class文件所在的目录,使用路径直接指定是没有用的;至于为什么java的class文件执行的时候不能使用路径指定class文件,目前还不明白。


例如

bin/hadoop hfs://localhost...是不行的,先记下。


更新补充:

应该是由于java执行类文件的时候需要文件路径名与pakage包名保持一致,比如上边的

$HADOOP_HOME/bin/hadoop URLCat hfs://localhost...在执行的时候程序会去寻找标记了package Users.myAcount....bin的URLCat类,自然是找不到的,但如果在java文件首行添加了这么一句,再编译后执行就是可以的,不过还是不知道为什么要这么干。

贴一段百度搜来的相关解释

新手最容易犯的错误。 

可以在任意目录下执行Java命令。但需要注意: 

1、Java命令的参数是“类的完整类名”,而不是“文件名”。 
所以,不管在任何目录下运行gdgz.lwj.Hello类,都不能简单写作java Hello, 
而需要写成下面形式: 

2、如果类路径不在当前目录下,就需要自己设置classpath参数。 

例如: 
G:\javaTest>java gdgz.lwj.Hello 
或者 
G:\javaTest\gdgz\lwj>java -cp G:\javaTest gdgz.lwj.Hello 
或者 
任意目录下>java -cp G:\javaTest gdgz.lwj.Hello 

---------------------------------------------------------------------------------------------------------------------------------

个人理解:

这里,java可以再命令行中指定路径,但是hadoop指令好像没找到,就需要先cd到G:java Test路径下,然后hadoop gdgz.lwj.Hello


你可能感兴趣的:(hadoop)