基于maven生成的源代码运行hadoop

基于maven生成的源代码运行hadoop,hadoop,Hadoop,我正在尝试对hadoop框架进行一些更改,但在设置开发环境时遇到了障碍。我已经从git克隆了hadoop,并生成了所有java项目,以便使用maven导入eclipse,如下所述。在eclipse中导入所有项目后,我生成了一个正常的java项目,该项目应该在hadoop中运行一个作业,我在项目的构建路径上为hadoop common和hadoop mapreduce client core设置了两个项目依赖项,所有依赖项都得到了解决 当我运行这个项目时,我得到了一个错误 2013-05-23 1

我正在尝试对hadoop框架进行一些更改,但在设置开发环境时遇到了障碍。我已经从git克隆了hadoop,并生成了所有java项目,以便使用maven导入eclipse,如下所述。在eclipse中导入所有项目后,我生成了一个正常的java项目,该项目应该在hadoop中运行一个作业,我在项目的构建路径上为hadoop common和hadoop mapreduce client core设置了两个项目依赖项,所有依赖项都得到了解决

当我运行这个项目时,我得到了一个错误

2013-05-23 12:58:01,531 ERROR util.Shell (Shell.java:checkHadoopHome(230)) - Failed to     detect a valid hadoop home directory
java.io.IOException: HADOOP_HOME or hadoop.home.dir are not set.
    at org.apache.hadoop.util.Shell.checkHadoopHome(Shell.java:213)
    at org.apache.hadoop.util.Shell.<clinit>(Shell.java:236)
    at org.apache.hadoop.util.PlatformName.<clinit>(PlatformName.java:36)
    at org.apache.hadoop.security.UserGroupInformation.getOSLoginModuleName(UserGroupInformation.java:314)
    at org.apache.hadoop.security.UserGroupInformation.<clinit>(UserGroupInformation.java:359)
    at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:2512)
    at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:2504)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2371)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:352)
    at org.apache.hadoop.fs.FileSystem.getLocal(FileSystem.java:323)
    at WordCount.main(WordCount.java:86)
2013-05-23 12:58:01,546 INFO  util.Shell (Shell.java:isSetsidSupported(311)) - setsid exited with exit code 0
2013-05-23 12:58:01,730 WARN  util.NativeCodeLoader (NativeCodeLoader.java:<clinit>(62)) - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2013-05-23 12:58:02,065 ERROR security.UserGroupInformation (UserGroupInformation.java:doAs(1492)) - PriviledgedActionException as:elma (auth:SIMPLE) cause:java.io.IOException: Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name and the correspond server addresses.
Exception in thread "main" java.io.IOException: Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name and the correspond server addresses.
    at org.apache.hadoop.mapreduce.Cluster.initialize(Cluster.java:119)
    at org.apache.hadoop.mapreduce.Cluster.<init>(Cluster.java:81)
    at org.apache.hadoop.mapreduce.Cluster.<init>(Cluster.java:74)
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1229)
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:416)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1489)
    at org.apache.hadoop.mapreduce.Job.connect(Job.java:1225)
    at org.apache.hadoop.mapreduce.Job.submit(Job.java:1253)
    at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1277)
    at WordCount.main(WordCount.java:100)
2013-05-23 12:58:01531错误util.Shell(Shell.java:checkHadoopHome(230))-未能检测到有效的hadoop主目录
java.io.IOException:未设置HADOOP_HOME或HADOOP.HOME.dir。
位于org.apache.hadoop.util.Shell.checkHadoopHome(Shell.java:213)
位于org.apache.hadoop.util.Shell(Shell.java:236)
位于org.apache.hadoop.util.PlatformName.(PlatformName.java:36)
位于org.apache.hadoop.security.UserGroupInformation.getOSLoginModuleName(UserGroupInformation.java:314)
位于org.apache.hadoop.security.UserGroupInformation。(UserGroupInformation.java:359)
位于org.apache.hadoop.fs.FileSystem$Cache$Key.(FileSystem.java:2512)
位于org.apache.hadoop.fs.FileSystem$Cache$Key.(FileSystem.java:2504)
位于org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2371)
位于org.apache.hadoop.fs.FileSystem.get(FileSystem.java:352)
位于org.apache.hadoop.fs.FileSystem.getLocal(FileSystem.java:323)
在WordCount.main(WordCount.java:86)
2013-05-23 12:58:01546 INFO util.Shell(Shell.java:isSetsidSupported(311))-setId已退出,退出代码为0
2013-05-23 12:58:01730警告util.NativeCodeLoader(NativeCodeLoader.java:(62))-无法为您的平台加载本机hadoop库。。。在适用的情况下使用内置java类
2013-05-23 12:58:02065错误security.UserGroupInformation(UserGroupInformation.java:doAs(1492))-PriviledgedActionException as:elma(auth:SIMPLE)原因:java.io.IOException:无法初始化集群。请检查您的配置以获取mapreduce.framework.name和相应的服务器地址。
线程“main”java.io.IOException中出现异常:无法初始化群集。请检查您的配置以获取mapreduce.framework.name和相应的服务器地址。
位于org.apache.hadoop.mapreduce.Cluster.initialize(Cluster.java:119)
位于org.apache.hadoop.mapreduce.Cluster.(Cluster.java:81)
位于org.apache.hadoop.mapreduce.Cluster.(Cluster.java:74)
位于org.apache.hadoop.mapreduce.Job$10.run(Job.java:1229)
位于org.apache.hadoop.mapreduce.Job$10.run(Job.java:1)
位于java.security.AccessController.doPrivileged(本机方法)
位于javax.security.auth.Subject.doAs(Subject.java:416)
位于org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1489)
位于org.apache.hadoop.mapreduce.Job.connect(Job.java:1225)
位于org.apache.hadoop.mapreduce.Job.submit(Job.java:1253)
位于org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1277)
在WordCount.main(WordCount.java:100)

那么,我如何才能使新的java项目基于我在eclipse中的hadoop源代码项目运行呢?

既然您的问题是“如何基于maven生成的源代码运行hadoop?”,我将假设您已经能够成功运行vanilla hadoop。如果有,那么您只需要复制自己的JAR(通过eclipse或在命令行中使用maven生成)并替换vanilla Hadoop发行版(相同版本)中的JAR。这应该可以做到这一点,并节省您处理配置问题的时间。

哦,我的意思是相反的。我使用eclipse,现在所有的hadoop项目都在我的工作区中。现在是否可以运行hadoop而不生成JAR来替换原来的JAR,而是直接在eclipse中运行它。因此,我可以测试对代码所做的每一项更改,并在控制台中查看错误,而无需生成JAR、复制JAR和查看日志;)啊,明白了。我从来没有这样做过,所以我不能给你任何建议去做你想做的事情。