无法在本地文件系统上创建Hadoop序列文件

4

我发现了这个例子,讲解如何在本地文件系统中写入内容,但这个例子会抛出以下异常:

Exception in thread "main" java.io.IOException: (null) entry in command string: null chmod 0644 C:\temp\test.seq
    at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:770)
    at org.apache.hadoop.util.Shell.execCommand(Shell.java:866)
    at org.apache.hadoop.util.Shell.execCommand(Shell.java:849)
    at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:733)
    at org.apache.hadoop.fs.RawLocalFileSystem$LocalFSFileOutputStream.<init>(RawLocalFileSystem.java:225)
    at org.apache.hadoop.fs.RawLocalFileSystem$LocalFSFileOutputStream.<init>(RawLocalFileSystem.java:209)
    at org.apache.hadoop.fs.RawLocalFileSystem.createOutputStreamWithMode(RawLocalFileSystem.java:307)
    at org.apache.hadoop.fs.RawLocalFileSystem.create(RawLocalFileSystem.java:296)
    at org.apache.hadoop.fs.RawLocalFileSystem.create(RawLocalFileSystem.java:328)
    at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSOutputSummer.<init>(ChecksumFileSystem.java:398)
    at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:461)
    at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:440)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:911)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:892)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:789)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:778)
    at org.apache.hadoop.io.SequenceFile$Writer.<init>(SequenceFile.java:1168)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)

在Windows 10上运行。我甚至尝试使用msys git bash shell,以为这样可以帮助JVM模拟chmod操作。但没有改变任何东西。有什么关于如何在Windows上进行此操作的建议吗?


Hadoop的JAR包应该在Hadoop MR程序的类路径中,并且可以访问HDFS。但是如何在独立的Java程序中运行这些JAR包呢? - mangusta
3个回答

4

我也遇到了这个错误,按照以下步骤后问题得到解决。(注意:我使用的是Spark 2.0.2和Hadoop 2.7)

  1. 确认是否收到“java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.”的报错信息。您可以通过运行“spark-shell”命令来检查。
  2. 我遇到了上述错误。这是因为我没有在环境变量中添加“HADOOP_HOME”。在我的情况下,“HADOOP_HOME”与“SPARK_HOME”相同,添加后问题被解决。

3

在Windows上仅使用JAR文件运行Hadoop程序需要除了引用JAR文件之外的几个步骤。

感谢赫尔辛基大学陆教授发布的Windows上的Hadoop指南,供他的学生参考。

以下是我在Windows 10和Hadoop 2.7.3上必须执行的步骤概述:

  1. 下载并解压Hadoop二进制文件到某个位置,例如C:\hadoop-2.7.3

  2. https://github.com/srccodes/hadoop-common-2.2.0-bin/archive/master.zip下载补丁文件,并将其解压缩到%HADOOP_HOME%\bin目录中。

  3. 设置HADOOP_HOME环境变量。例如,C:\hadoop-2.7.3

  4. 下载Hadoop源代码,将hadoop-common-project\hadoop-common\src\main\java\org\apache\hadoop\io\nativeio\NativeIO.java复制到您的项目中,并将第609行修改为:

    return true;


0

其中一种解决方案如下。

在项目结构(Intelij)中,确保SDK下没有引用其他版本的Hadoop。在我的情况下 - 我之前运行了Spark,并且它正在引用Hadoop JAR文件,这导致了访问问题。一旦我删除了它们并运行MR作业,它就可以正常运行了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接