我找到了这个如何写入本地文件系统的示例,但是它抛出了这个异常:
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)
- 验证您是否正在获取"java.io. net"。在Hadoop二进制文件中无法找到可执行文件nullbinwinutils.exe "。你可以通过运行"spark-shell"命令来检查。 我得到了上面提到的错误。这是因为我没有在环境变量中添加"HADOOP_HOME",在添加了"HADOOP_HOME"之后,在我的情况下与"SPARK_HOME"相同,问题解决了。
在Windows上仅使用jar运行Hadoop程序需要一些步骤,而不仅仅是引用jar。
赫尔辛基大学的Lu教授为他的学生发布了一个Hadoop on Windows指南。
下面是我使用Windows 10和Hadoop 2.7.3所采取的步骤的概要:
-
下载并解压Hadoop二进制文件到
C:hadoop-2.7.3
. -
从https://github.com/srccodes/hadoop-common-2.2.0-bin/archive/master.zip下载补丁文件并解压缩到您的
%HADOOP_HOME%bin
目录。 -
设置
HADOOP_HOME
环境变量。例如:C:hadoop-2.7.3
. -
下载Hadoop源代码,将
修改609行hadoop-common-projecthadoop-commonsrcmainjavaorgapachehadoopionativeioNativeIO.java
复制到您的项目中,并从return access0(path, desiredAccess.accessRight());
return true;
解决方案之一如下:
在Project Structure (Intelij)中,在SDK下确保没有引用其他版本的Hadoop。在我的情况下,我之前运行的是Spark,它引用了Hadoop JAR,这导致了访问问题。一旦我删除它们并运行MR作业,它就运行得很好。