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



我找到了这个如何写入本地文件系统的示例,但是它抛出了这个异常:

Exception in thread "main" java.io.IOException: (null) entry in command string: null chmod 0644 C:temptest.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上做到这一点有什么建议吗?

我也面临这个错误,并在遵循步骤后得到解决。(注意:我使用的是Spark 2.0.2和Hadoop 2.7)

  1. 验证您是否正在获取"java.io. net"。在Hadoop二进制文件中无法找到可执行文件nullbinwinutils.exe "。你可以通过运行"spark-shell"命令来检查。
  2. 我得到了上面提到的错误。这是因为我没有在环境变量中添加"HADOOP_HOME",在添加了"HADOOP_HOME"之后,在我的情况下与"SPARK_HOME"相同,问题解决了。

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

赫尔辛基大学的Lu教授为他的学生发布了一个Hadoop on Windows指南。

下面是我使用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-projecthadoop-commonsrcmainjavaorgapachehadoopionativeioNativeIO.java复制到您的项目中,并从

    修改609行

    return access0(path, desiredAccess.accessRight());

    return true;

解决方案之一如下:

在Project Structure (Intelij)中,在SDK下确保没有引用其他版本的Hadoop。在我的情况下,我之前运行的是Spark,它引用了Hadoop JAR,这导致了访问问题。一旦我删除它们并运行MR作业,它就运行得很好。