小编在win10下进行简单的hadoop开发,没有在eclipse安装插件的情况下出现了不能依赖本地windos系统库而引发的异常。
代码如下:
* @liukang
*
*/
public class HDFSClientDemo
{
FileSystem fileSystem = null;
Configuration conf = null;
@Before
public void init() throws Exception
{
conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://mini1:9000");
// 拿到一个文件系统操作的客户端实例对象
fileSystem = FileSystem.get(conf);
// 可以直接传入 uri和用户身份
//fileSystem = FileSystem.get(new URI("hdfs://master:9000"), conf, "hadoop"); // 最后一个参数为用户名
}
@Test
public void uploadFile() throws IllegalArgumentException, IOException
{
fileSystem.copyFromLocalFile(new Path("c:/activemq.log"), new Path("/activemq.log"));
fileSystem.close();
}
@Test
public void testDownload() throws Exception
{
fileSystem.copyToLocalFile(new Path("/activemq.log"), new Path("d:/"));
// 不用原始的文件系统(不用原生的文件系统),调用java自带的IO流
// fileSystem.copyToLocalFile(false, new Path("/activemq.log"), new Path("d:/"), false);
fileSystem.close();
}
}
在测试完文件上传时,没有问题,只要指明文件源和namenode所在的主机,没有问题
在测试文件下载时,出现异常:
java.lang.NullPointerException
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1010)
at org.apache.hadoop.util.Shell.runCommand(Shell.java:482)
at org.apache.hadoop.util.Shell.run(Shell.java:455)
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:715)
at org.apache.hadoop.util.Shell.execCommand(Shell.java:808)
at org.apache.hadoop.util.Shell.execCommand(Shell.java:791)
at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:659)
at org.apache.hadoop.fs.FilterFileSystem.setPermission(FilterFileSystem.java:490)
at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:462)
at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:428)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:908)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:889)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:786)
分析:
下载Hadoop2以上版本时,在Hadoop2的bin目录下没有winutils.exe
解决:
1.下载https://codeload.github.com/srccodes/hadoop-common-2.2.0-bin/zip/master下载hadoop-common-2.2.0-bin-master.zip,然后解压后,把hadoop-common-2.2.0-bin-master下的bin全部复制放到我们下载的Hadoop2的binHadoop2/bin目录下。如图所示:
在环境变量中配置hadoop
重启机器,问题得到解决。
文件下载成功!!!