它说:
javac -cp classpath -d wordcount_classes WordCount.java
其中classpath为:
CDH4 - /usr/lib/hadoop/*:/usr/lib/hadoop/client-0.20/* CDH3 - /usr/lib/hadoop-0.20/hadoop-0.20.2-cdh3u4-core.jar
我已经下载了“cloudera-quickstart-demo-vm-4.2.0-vmware”。 以用户cloudera身份运行。
[cloudera@localhost wordcount]$ javac -cp /usr/lib/hadoop/*:/usr/lib/hadoop/client-0.20/* -d wordcount_classes WordCount.java
incorrect classpath: /usr/lib/hadoop/*
incorrect classpath: /usr/lib/hadoop/client-0.20/*
----------
1. ERROR in WordCount.java (at line 8)
import org.apache.hadoop.fs.Path;
^^^^^^^^^^
检查cp文件夹时:。
[cloudera@localhost wordcount]$ ls -l /usr/lib/hadoop
total 3500
drwxr-xr-x. 2 root root 4096 Apr 22 14:37 bin
drwxr-xr-x. 2 root root 4096 Apr 22 14:33 client
drwxr-xr-x. 2 root root 4096 Apr 22 14:33 client-0.20
drwxr-xr-x. 2 root root 4096 Apr 22 14:36 cloudera
drwxr-xr-x. 2 root root 4096 Apr 22 14:30 etc
-rw-r--r--. 1 root root 16536 Feb 15 14:24 hadoop-annotations-2.0.0-cdh4.2.0.jar
lrwxrwxrwx. 1 root root 37 Apr 22 14:30 hadoop-annotations.jar -> hadoop-annotations-2.0.0-cdh4.2.0.jar
-rw-r--r--. 1 root root 46855 Feb 15 14:24 hadoop-auth-2.0.0-cdh4.2.0.jar
lrwxrwxrwx. 1 root root 30 Apr 22 14:30 hadoop-auth.jar -> hadoop-auth-2.0.0-cdh4.2.0.jar
-rw-r--r--. 1 root root 2266171 Feb 15 14:24 hadoop-common-2.0.0-cdh4.2.0.jar
-rw-r--r--. 1 root root 1212163 Feb 15 14:24 hadoop-common-2.0.0-cdh4.2.0-tests.jar
lrwxrwxrwx. 1 root root 32 Apr 22 14:30 hadoop-common.jar -> hadoop-common-2.0.0-cdh4.2.0.jar
drwxr-xr-x. 3 root root 4096 Apr 22 14:36 lib
drwxr-xr-x. 2 root root 4096 Apr 22 14:33 libexec
drwxr-xr-x. 2 root root 4096 Apr 22 14:31 sbin
我做错了什么? 这是直接来自安装了CDH4的Cloudera Quickstart VM。 遵循“Hadoop教程”。 它甚至说
**Prerequisites**
Ensure that CDH is installed, configured, and running. The easiest way to get going quickly is to use a CDH4 QuickStart VM
这与我运行本教程的地方完全相同 - 来自CDH4 QuickStart VM。
我做错了什么?
*更新 版本信息;
[cloudera@localhost cloudera]$ cat cdh_version.properties
# Autogenerated build properties
version=2.0.0-cdh4.2.0
git.hash=8bce4bd28a464e0a92950c50ba01a9deb1d85686
cloudera.hash=8bce4bd28a464e0a92950c50ba01a9deb1d85686
cloudera.base-branch=cdh4-base-2.0.0
cloudera.build-branch=cdh4-2.0.0_4.2.0
cloudera.pkg.version=2.0.0+922
cloudera.pkg.release=1.cdh4.2.0.p0.12
cloudera.cdh.release=cdh4.2.0
cloudera.build.time=2013.02.15-18:39:29GMT
cloudera.pkg.name=hadoop
CLASSPATH ENV:
[cloudera@localhost bin]$ echo $CLASSPATH
:/usr/lib/hadoop/*:/usr/lib/hadoop/client-0.20/*
修改!! 所以我想我明白了。 这可能是Cloudera CD4 VM快速启动VM的新问题: 来自:This Post日期 另一个人遇到了同样的问题。 似乎javac程序在导出的路径上不能正确接受通配符。 我必须做以下事情:
export CLASSPATH=/usr/lib/hadoop/client-0.20/\*:/usr/lib/hadoop/\*
然后 javac -d [没有-cp覆盖]
javac -d wordcount_classes/ WordCount.java
仅显示警告。
我想知道Cloudera是否必须修复他们的快速启动VM。
答案 0 :(得分:2)
如果你想让javac找到它们,你需要有一个包含/ usr / lib / hadoop中那些目录的类路径变量集。您可以按如下方式设置此env var
$: export CLASSPATH=$CLASSPATH:/usr/lib/hadoop/*:/usr/lib/hadoop/client-0.20/*
javac现在将找到这些库。如果您对类路径变量有任何其他抱怨,您可以使用冒号(:)作为分隔符将它们附加到上面的行
您可以将其包含在bash脚本中,但最佳做法是在运行时设置正确的env变量,然后您就能获得所需的内容。在这种情况下,它可能是字数或CDH4 env正在设置它,但最好自己设置它。
答案 1 :(得分:1)
我花了一些时间寻找对同一问题的回复(也使用VM与CDH4),所以我将在这里留下我的解决方案,希望它可以帮助其他人。
不幸的是,上述两种解决方案都不适用于我的情况。
但是,我能够通过关闭终端并打开一个新终端来成功编译该示例。我的问题是之前已经使用教程中提到的'sudo su cloudera'切换到'cloudera'用户。
参考: