zoukankan      html  css  js  c++  java
  • maven hadoop 3.x HADOOP_HOME and hadoop.home.dir are unset Not implemented by the WebHdfsFileSystem FileSystem implementation

    具体异常如下:

    解决方案:

    删除pom文件中的hadoop-core的依赖,原因:hadoop-core是1.x的产物,在2.x之后已经被hadoop-common取代,我配置的时候同时使用了这两个依赖导致jar包冲突.

    附上我测试上传用的代码

     1 /**
     2  * 上传文件到hdfs
     3  * @author tele
     4  *
     5  */
     6 public class Demo1 {
     7     public static void main(String[] args) throws Exception {
     8         Configuration conf = new Configuration();
     9         FileSystem fs = FileSystem.get(new URI("hdfs://hadoop002:9000"), conf,"tele");
    10         fs.copyFromLocalFile(new Path("f:/test.sql"),new Path("/111.sql"));
    11         fs.close();
    12         System.out.println("上传完毕");
    13     }
    14 }

    如果下载的过程中出现了 HADOOP_HOME and hadoop.home.dir are unset,那么就说明你没有配置windows本地的hadoop环境变量.你可能会想我是远程调用linux下的hadoop,与我本地的hadoop有什么关系?如果你的操作只对远程的hadoop生效,如上传,创建目录,文件改名(写)等那么你是不需要在windows本地配置hadoop的,可一旦涉及到下载(读),hadoop内部的缓存机制要求本地也必须有hadoop,于是也会出现HADOOP_HOME and hadoop.home.dir are unset,解决办法配置HADOOP_HOME并加入%HADOOP_HOME%in到PATH中,之后测试下hadoop version命令,有效的话重启你的eclipse/myeclipse,但这还不够,windows下的hadoop还需要winutils.exe,否则会报Could not locate Hadoop executable: xxxxwinutils.exe 

    测试下载的代码如下

     1    static FileSystem fs;
     2     static {
     3         Configuration conf = new Configuration();
     4         try {
     5             fs = FileSystem.get(new URI("hdfs://hadoop002:9000"), conf,"tele");
     6         } catch (IOException e) {
     7             // TODO Auto-generated catch block
     8             e.printStackTrace();
     9         } catch (InterruptedException e) {
    10             // TODO Auto-generated catch block
    11             e.printStackTrace();
    12         } catch (URISyntaxException e) {
    13             // TODO Auto-generated catch block
    14             e.printStackTrace();
    15         }
    16     }
    17     
    18     //下载文件
    19     @Test
    20     public void downLoadFile() throws Exception{
    21         //如果为null,重启myeclipse/eclipse即可
    22         System.out.println(System.getenv("HADOOP_HOME"));
    23         fs.copyToLocalFile(new Path("/hello2.sql"),new  Path("C:/a.sql"));
    24         fs.close();
    25         System.out.println("下载完毕");
    26     }
  • 相关阅读:
    第六章 函数、谓词、CASE表达式 6-3 CASE表达式
    第六章 函数、谓词、CASE表达式 6-2 谓词
    第六章 函数、谓词、CASE表达式 6-1 各种各样的函数
    第五章 复杂查询 5-3 关联子查询
    第五章 复杂查询 5-2 子查询
    第五章 复杂查询 5-1 视图
    第四章 数据更新 4-3 事务
    第四章 数据库和SQL 4-3 数据的更新(UPDATE语句的使用方法)
    面向对象进阶
    多态
  • 原文地址:https://www.cnblogs.com/tele-share/p/9531595.html
Copyright © 2011-2022 走看看