3

我正在关注本教程: http ://www.cloudera.com/content/cloudera-content/cloudera-docs/HadoopTutorial/CDH4/Hadoop-Tutorial/ht_topic_5_2.html

它说:

javac -cp 类路径 -d wordcount_classes WordCount.java

其中类路径是:

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

类路径环境:

[cloudera@localhost bin]$ echo $CLASSPATH
:/usr/lib/hadoop/*:/usr/lib/hadoop/client-0.20/*

编辑!!所以我想我想通了。这可能是 Cloudera CD4 VM 快速入门 VM 的一个新问题:来自:昨天发布的这篇文章另一个人遇到了完全相同的问题。 似乎 javac 程序在导出的路径上不正确接受通配符。我必须执行以下操作:

export CLASSPATH=/usr/lib/hadoop/client-0.20/\*:/usr/lib/hadoop/\*

然后 javac -d [没有 -cp 覆盖]

javac -d wordcount_classes/ WordCount.java

只会出现警告。

我想知道 Cloudera 是否必须修复他们的快速启动 VM。

4

2 回答 2

2

如果您希望 javac 找到它们,您需要有一个类路径变量集,其中包括 /usr/lib/hadoop 中的这些目录。您可以按如下方式设置此环境变量

$: export CLASSPATH=$CLASSPATH:/usr/lib/hadoop/*:/usr/lib/hadoop/client-0.20/*

javac 现在将找到这些库。如果您对类路径变量有任何其他抱怨,您可以使用冒号 (:) 作为分隔符将它们附加到上述行

您可以将其包含在 bash 脚本中,但最佳做法是在运行时设置正确的 env 变量,然后您就可以得到您想要的。在这种情况下,它可能是字数统计或 CDH4 环境正在设置它,但最好自己设置它。

于 2013-05-15T16:20:34.783 回答
1

我花了一些时间寻找对同一问题的响应(也使用带有 CDH4 的 VM),所以我将把我的解决方案留在这里,希望它可以帮助其他人。

不幸的是,上述解决方案都不适用于我的情况。

但是,我能够通过关闭终端并打开一个新终端来成功编译该示例。如教程中所述,我的问题是之前使用“sudo su cloudera”切换到“cloudera”用户。

参考:

http://community.cloudera.com/t5/Apache-Hadoop-Concepts-and/Classpath-Problem-on-WordCount-Tutorial-QuickStart-VM-4-4-0-1/td-p/3613

于 2013-12-24T22:49:41.710 回答