【问题标题】:Is it possible to run Hadoop jobs (like the WordCount sample) in the local mode on Windows without Cygwin?是否可以在没有 Cygwin 的 Windows 上以本地模式运行 Hadoop 作业(如 WordCount 示例)?
【发布时间】:2014-12-18 11:00:19
【问题描述】:

我有 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?

附: Hadoop依赖如下:

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.2.0</version>
    <scope>provided</scope>
</dependency>

【问题讨论】:

    标签: maven hadoop


    【解决方案1】:
    1. 下载为 Windows 编译的 Hadoop 2.6.02.7.1
    2. 创建指向解压目录的 HADOOP_HOME 环境变量
    3. 将 %HADOOP_HOME%\bin 添加到 PATH 环境变量

    来源:https://stackoverflow.com/a/27394808/543836

    【讨论】:

    • 我发现这个解决方案比上面的解决方案更容易:)
    【解决方案2】:

    Hadoop 可以在 Windows 上运行,这是可能的,但如果你试图自己动手,你会长出白头发。

    首先,Windows Hadoop 中的所有文件系统操作都通过 NativeIO(如果可用)或通过 winutils(如果 NativeIO 未加载)进行路由。在您的情况下,它采用了 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。但即使在那之后,你仍然需要 wintils 来启动容器。 winutils.exe 将位于同一位置(hadoop-common 目标/bin),但代码会根据 %HADOOP_HOME% 查找它,因此您必须定义 that。它会从那里走上坡路。我故意省略了如何配置所有这些的细节,因为我认为你不应该这样做,或者更准确地说,只有在你了解如何去做的情况下你才应该这样做。

    如果您使用适用于 Windows 的现成 Hadoop 发行版,这将容易得多,其中正好有一个:HDP from Hortonworks,下载、安装、配置,然后针对“集群”运行'。

    【讨论】:

    • 这还不错,只要将libwinutils.lib / winutils.exe 放入C:\hadoop\bin 就足够了。您不需要与 Eclipse 中的 lib 路径混在一起。编译一次二进制文件很困难 ;-)
    • mvn clean install -DskipTests 应该可以很好地构建它们...前提是安装了 VS2010 或 VS2012 或 Win SDK(其中之一)。但是,当然,这需要在 branch-2.2 的 github.com/apache/hadoop 的 git 克隆。太糟糕了,它们无法通过 mvn 分发获得......
    • 顺便说一句,Win SDK无法安装的情况有很多。
    猜你喜欢
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 2012-05-05
    • 2018-04-02
    相关资源
    最近更新 更多