【问题标题】:Running JUnit tests with Hadoop 2.2 on Windows 7在 Windows 7 上使用 Hadoop 2.2 运行 JUnit 测试
【发布时间】:2020-08-02 06:26:22
【问题描述】:

我正在尝试使用 Hadoop 2.2 运行一个简单的 JUnit 测试。在我的 Windows 7 机器上。 我在http://grepalex.com/2012/10/20/hadoop-unit-testing-with-minimrcluster/ 有一个示例测试,所以我使用 ClusterMapReduceTestCase 作为基类来启动 MiniDFSCluster。

当我运行测试时(在控制台中):

2013-11-15 11:59:24,636 错误 [main] util.Shell (Shell.java:getWinUtilsPath(303)) - 无法在 hadoop 二进制路径中找到 winutils 二进制文件 java.io.IOException:无法在 Hadoop 二进制文件中找到可执行的 null\bin\winutils.exe。 在 org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:278) 在 org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:300) 在 org.apache.hadoop.util.Shell.(Shell.java:293) 在 org.apache.hadoop.util.StringUtils.(StringUtils.java:76) (...)

在 JUnit 输出中:

java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z 在 org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(本机方法) 在 org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:435) 在 org.apache.hadoop.fs.FileUtil.canWrite(FileUtil.java:996) 在 org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.analyzeStorage(Storage.java:451) 在 org.apache.hadoop.hdfs.server.namenode.FSImage.recoverStorageDirs(FSImage.java:282) 在 org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:200) (...)

我已阅读以下主题:Failed to locate the winutils binary in the hadoop binary pathRunning Apache Hadoop 2.1.0 on Windows 我还查看了http://www.srccodes.com/p/article/38/build-install-configure-run-apache-hadoop-2.2.0-microsoft-windows-oshttp://www.srccodes.com/p/article/39/error-util-shell-failed-locate-winutils-binary-hadoop-binary-path 提供的可能解决方案

不幸的是,这在 JUnit 测试中不起作用。如果我编写 junit 测试,我希望它们独立于开发环境(这样你就可以在每台开发机器上毫无问题地运行)。因此,我使用的是 maven,我不想自己构建所需的库并将它们放在 Hadoop bin 文件夹等中。

有什么建议在这种情况下最好的解决方案是什么?

【问题讨论】:

  • 我已经看过这个问题,但是,这不是我的情况的解决方案。我尝试在我的 JUnit 测试中运行 MiniDFSCluster,并且我正在使用 maven 来管理我的依赖项,因此,我不想安装 hadoop 操作系统。我想在我的 JUnit 测试中嵌入 MiniDFSCluster。
  • 这里有同样的问题 (issues.apache.org/jira/browse/VFS-530)。我真的很想知道为什么迷你集群需要那些原生的东西。在 1.2 天内,来自 cygwin 的 ls.exe 就足够了(即使配置了“所有者”,我猜也可以忽略它)。
  • 您是否解决了问题。请分享。谢谢
  • 不抱歉,没有重新讨论这个话题。看起来它对 HDFS 开发人员没有优先权

标签: java windows hadoop junit


【解决方案1】:

自发布答案以来,Hadoop 3 已经问世。但是,重点仍然放在非 Windows 系统上。基于this 页面,即使是 Microsoft 的分发版也不再适用于 Windows。

虽然测试是另一回事,但其结果是 windows 的测试不太可能受到很多人的喜爱,仍然需要一种解决方法。

This answer,被接受回答一个非常相似的问题,关键步骤:

  1. http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe下载winutils.exe。
  2. 在操作系统级别或以编程方式设置HADOOP_HOME 环境变量:System.setProperty("hadoop.home.dir", "full path to the folder with winutils");

如果这对人们来说仍然是一个重要的话题,请注意在堆栈溢出上发布可能无济于事(如果有更好的解决方案,现在可能已经有人发布了)。相反,我建议他们在 hadoop jira 上记录请求,并在此处的 cmets 中添加指向它的链接以避免重复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2015-03-26
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    相关资源
    最近更新 更多