无法在本地文件系统

时间:2016-09-21 00:16:06

标签: java hadoop

I found this example如何写入本地文件系统,但它抛出了这个异常:

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上执行此操作的任何建议吗?

3 个答案:

答案 0 :(得分:4)

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

  1. 验证您是否收到&#34; java.io.IOException:无法在Hadoop二进制文件中找到可执行的null \ bin \ winutils.exe。&#34;。你可以通过运行&#34; spark-shell&#34;来检查它。命令。
  2. 我得到了上面提到的错误。之所以发生是因为我没有添加&#34; HADOOP_HOME&#34;在环境变量。添加&#34; HADOOP_HOME&#34;,在我的情况下与&#34; SPARK_HOME&#34;相同,问题已解决。

答案 1 :(得分:3)

在Windows上仅使用jar运行Hadoop程序需要几步,而不仅仅是引用jar。

感谢赫尔辛基大学Professor Lu为他的学生发布Hadoop on Windows guide

以下是使用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 access0(path, desiredAccess.accessRight());

    return true;

答案 2 :(得分:0)

其中一个解决方案如下。

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