在win10 下 运行 hadoop api 代码,下载代码的时候报错
爆了这个错误
NativeIO$Windows.createFileWithMode0(Ljava/lang/String;JJJI)Ljava/io/FileDes
/**
* 拷贝HDFS文件到本地:下载
*/
@Test
public void copyToLocalFile() throws Exception {
Path src = new Path("/hdfsapi/test/d.txt");
Path dst = new Path("C:\\Users\\10737\\Desktop\\mingpian\\");
fileSystem.copyToLocalFile(src, dst);
}
其余执行方法,比如创建目录啊,上传啊,重命名 那些基本都没有问题。就是这里执行错误了
百度很多都说是 删除 hadoop.dll 文件。。。 试过了 完全无用。
解决办法
1. 改变执行方法
改为
fileSystem.copyToLocalFile(false,src,dst,true);
2. 以上虽然解决了,但是
fileSystem.copyToLocalFile(src, dst); 如果解决才可以?
在请教了大神之后 下面的是大神解决办法:
Hadoop版本:hadoop-2.6.0-cdh5.16.2.tar
下载地址:https://archive.cloudera.com/cdh5/cdh/5/
系统:Windows 10
Bug:java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)V
解决方式
1、以管理员身份启动WinRAR 解压 hadoop-2.6.0-cdh5.16.2.tar 解压到指定目录 D:\WorkTools\Hadoop
2、HADOOP_HOME=D:\WorkTools\Hadoop
3、path=%HADOOP_HOME%/bin
4、添加winutils
下载页面:https://github.com/steveloughran/winutils
建议采用 git clone git@github.com:steveloughran/winutils.git
第一次我选择的是2.6.0的,但是没有解决问题,
第二次选择3.0.0的。
5、复制hadoop-3.0.0/bin中的全部文件去替换%HADOOP_HOME%/bin中的文件
6、在要运行的类中添加静态代码块。
static {
try {
System.load("D:/WorkTools/Hadoop/bin/hadoop.dll");//建议采用绝对地址。
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load.\n" + e);
System.exit(1);
}
}
7、运行程序,成功。
我试了一下, 添加的代码块还需要改动一下:
static {
try {
//建议采用绝对地址。
// System.load("D:/cloud/hadoop/hadoopDohome/hadoop2/bin/hadoop.dll");
//如果上面的路径保存,就使用下面的
System.load("D:\\cloud\\hadoop\\hadoopDohome\\hadoop26\\bin\\hadoop.dll");
} catch (UnsatisfiedLinkError e) {
e.printStackTrace();
System.err.println("Native code library failed to load.\n" + e);
System.exit(1);
}
}
以上的方式,我觉得 如果就算出现了 其他 hadoop 版本 在win10 系统配置不对的而产生的都问题,都是可以参考解决的。
参考 https://blog.csdn.net/muyingmiao/article/details/100101584
https://blog.csdn.net/tanhaodi2012/article/details/96754432