通过HDFSAPI在Eclipse上编写程序将本地文件上传到HDFS分布式文件系统中异常怎么办-成都快上网建站

通过HDFSAPI在Eclipse上编写程序将本地文件上传到HDFS分布式文件系统中异常怎么办

这篇文章将为大家详细讲解有关通过HDFS API在Eclipse上编写程序将本地文件上传到HDFS分布式文件系统中异常怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

创新互联公司技术团队十余年来致力于为客户提供网站建设、成都网站设计、高端网站设计全网营销推广、搜索引擎SEO优化等服务。经过多年发展,公司拥有经验丰富的技术团队,先后服务、推广了成百上千网站,包括各类中小企业、企事单位、高校等机构单位。

1、将本地文件上传到HDFS中,遇到问题:


七月 03, 2014 4:44:36 下午 org.apache.hadoop.ipc.Client$Connection handleConnectionFailure
INFO: Retrying connect to server: master/192.168.232.134:8020. Already tried 0 time(s).

Call to master/192.168.232.134:8020 failed on connection exception: java.net.ConnectException: Connection refused: no further information

解决方法:

问题所在:路径错误

最开始我路径写为:

String dst = "hdfs://master/opt/file06.txt";

String dst = "hdfs://192.168.232.134/opt/file06.txt";

String dst = "hdfs://master:9001/opt/file06.txt";

String dst = "hdfs://master/opt/file06.txt";

这几种写法都是不对的,正确路径为:

String dst = "hdfs://master:9000/opt/file06.txt";

注意:

事实上,“INFO: Retrying connect to server: master/192.168.232.134:8020. Already tried 0 time(s).”这儿显示无法连接端口8020,是因为我们在程序中未明确指定端口9000,然而“fs.default.name”配置项指定的“namenode RPC交互端口“默认为8020,但是我们在hdfs-site.xml文件中指定fs.default.name的端口为9000,所以在程序中,连接8020端口失效,正确写法为”hdfs://192.168.232.134:9000/opt/file06.txt“或”hdfs://master:9000/opt/file06.txt“

1)、在这儿,如果我们win上配置了master,那么,我们使用master是可以的,在这儿master等价于192.168.232.134

2)、重要的是端口要写正确,这儿端口应该为9000

所以,String dst = "hdfs://master:9000/opt/file06.txt";和String dst = "hdfs://192.168.232.134:9000/opt/file06.txt";两种写法都正确

但是,String dst = "hdfs://master:9001/opt/file06.txt";和String dst = "hdfs://192.168.232.134:9001/opt/file06.txt";两种写法都不正确

2、Cannot create file/opt/file02.txt. Name node is in safe mode.

在hadoop中,经常遇到safe mode这个问题,虽然网上解决办法都可以解决问题,但是,一直没有明白究竟是什么意思。

其实,它处于安全模式的时候,我们只需要再等等,它可以自动离开安全模式的。我们没有必要去执行命令强制退出安全模式。

强制退出安全模式的命令:bin/hadoop dfsadmin -safemode leave

关于安全模式的相关介绍可参见文章《Hadoop 解除 "Name node is in safe mode"》

附:

1)、编写程序操作HDFS文件系统的相关代码可参见链接:《如何使用Java API读写HDFS》

2)、将采用JAVA API将本地文件复制到hadoop文件系统

package com.langgo.hadoop3;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;
/**
 * @author hadoop
 *将本地文件复制到hadoop文件系统
 */
public class FileCopyWithProgress {
 public static void main(String[] args) throws IOException {
  
  String localSrc = "/home/wqj/opt/140702152709log.txt";
  String dst = "hdfs://master:9000/opt/file06.txt";
  
  FileCopyWithProgress.fileCopy(localSrc, dst);
 }
 
 public static void fileCopy(String localSrc, String dst) throws IOException{
  
  InputStream in = new BufferedInputStream(new FileInputStream(localSrc));
  
  Configuration conf = new Configuration();
  FileSystem fs = FileSystem.get(URI.create(dst), conf);
  
  OutputStream out = fs.create(new Path(dst), new Progressable() {
   
   @Override
   public void progress() {
    System.out.println(".");
    
   }
  });
  
  IOUtils.copyBytes(in, out, 4096, true);
 }
}

关于“通过HDFS API在Eclipse上编写程序将本地文件上传到HDFS分布式文件系统中异常怎么办”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。


分享标题:通过HDFSAPI在Eclipse上编写程序将本地文件上传到HDFS分布式文件系统中异常怎么办
网站地址:http://kswjz.com/article/ipsghe.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流