JAVA API访问HDFS遇到的一些问题

1.缺少jar包依赖

maven依赖需要引入hadoop-common/hadoop-auth/hadoop-hdfs等,我在开发过程中还遇到以上三个jar包使用google的jar包依赖缺少/版本不对的问题,依次引入就好。

2.windows环境下使用开发工具进行远程连接测试,报could not locate executable null\bin\winutils.exe in hadoop binaries

这是本地没有安装hadoop调试环境工具,

(1)下载工具

hadoop2.2版本可以在这里下载https://github.com/srccodes/hadoop-common-2.2.0-bin

hadoop2.6版本可以在这里下载https://github.com/amihalik/hadoop-common-2.6.0-bin

(2)配置环境变量

①增加系统变量HADOOP_HOME,值是下载的zip包解压的目录,我这里解压后将其重命名为hadoop-common-2.6.0

②在系统变量path里增加%HADOOP_HOME%\bin

3.connection refused连接被拒

这个问题的原因有很多,暂且说一下我遇到的,刚开始没有搞清楚java api是通过哪种方式与hdfs建立连接,从hdfs-site.xml配置文件中可以看到,提供了两种连接方式,一种RPC、还有一种HTTP,后者是可以通过界面对hdfs进行查看。java api使用的是RPC通信。


      dfs.namenode.rpc-address.mycluster.nn1
      ydbmaster:8020


      dfs.namenode.rpc-address.mycluster.nn2
      myslave1:8020

一般namenode会配置两个节点nn1和nn2,若使用域名,则需要在服务器端的hosts文件中配置,例如10.0.9.39 ydbmaster,此处配置成域名,无需加前缀hdfs://

URI uri = null;
Configuration conf = null;
FileSystem fs = null;
try {
    uri = new URI("hdfs://10.0.9.39:8020");
    conf = new Configuration();
    fs = FileSystem.get(uri,conf);
    //TODO 
}catch (Exception e){
    //TODO
}

 

你可能感兴趣的:(JAVA API访问HDFS遇到的一些问题)