我有Windows 7,Java 8,Maven和Eclipse。 我创建了一个Maven项目,并使用了与here几乎完全相同的代码。
它只是一个简单的字数"样品。 我尝试启动"驱动程序"来自Eclipse的程序,我提供命令行参数(输入文件和输出目录)并得到以下错误:
Exception in thread "main" java.lang.NullPointerException at
java.lang.ProcessBuilder.start(ProcessBuilder.java:1012) at
org.apache.hadoop.util.Shell.runCommand(Shell.java:404) at
org.apache.hadoop.util.Shell.run(Shell.java:379) at
org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:589) at
org.apache.hadoop.util.Shell.execCommand(Shell.java:678) at
org.apache.hadoop.util.Shell.execCommand(Shell.java:661) at
org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:639) at
org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:435) at
org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:277) at
org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:125) at
org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:344) at
org.apache.hadoop.mapreduce.Job$10.run(Job.java:1268) at
org.apache.hadoop.mapreduce.Job$10.run(Job.java:1265) at
java.security.AccessController.doPrivileged(Native Method) at
javax.security.auth.Subject.doAs(Subject.java:422) at
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491) at
org.apache.hadoop.mapreduce.Job.submit(Job.java:1265) at
org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1286) at
misc.projects.hadoop.exercises.WordCountDriverApp.main(WordCountDriverApp.java:29)
失败的行(WordCountDriverApp.java:29)包含启动作业的命令:
job.waitForCompletion(true)
我想让它发挥作用,因此我想了解一些事情:
我是否必须提供任何hdfs-site.xml,yarn-site.xml,...这一切,如果我只想要本地模式(没有任何群集)? 我现在没有这些XML配置文件。据我所知,本地模式的默认值都可以,也许我错了。
在Windows下完全可以(无论是启动任何Hadoop作业)还是整个Hadoop都只支持Linux?
P.S .: Hadoop依赖关系如下:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.2.0</version>
<scope>provided</scope>
</dependency>
答案 0 :(得分:5)
答案 1 :(得分:4)
Hadoop在Windows上运行,这是可能的,但是如果你试图自己把它拉下来,你就会长出白发。
首先,Windows Hadoop中的所有文件系统操作都通过NativeIO(如果可用)路由,或者如果未加载NativeIO,则通过winutils路由。在你的情况下,它采取了winutils路径。如果您指示Eclipse在哪里找到它,您可以使NativeIO可用。请参阅How to add native library to “java.library.path” with Eclipse launch (instead of overriding it),您需要添加hadoop-common-project项目目标的bin的位置,您可以在其中找到承载NativeIO的hadoop.dll。但即使在那之后,你仍然需要用于集装箱发射的绞盘。 winutils.exe将位于同一位置(hadoop-common target / bin),但代码会根据%HADOOP_HOME%查找它,因此您必须定义 。它会从那里走上坡路。我故意省略了如何来配置所有这些,因为我认为你不应该这样做,或者更准确地说,只有当你明白如何去做时才应该这样做。
如果你为Windows采用现成的Hadoop发行版会更容易,其中只有一个:HDP from Hortonworks,下载它,安装它,配置它然后运行'簇'。