遇到的问题

  1. 文件上传,没有报错,但是文件却没有上传成功
    最开始考虑的问题可能是电脑防火墙没有关闭

同时需要检查上传文件的相关参数是否配置
Configuration conf = new Configuration();
conf.set(“fs.defaultFS”, “hdfs://nameservice1”);
conf.set(“dfs.nameservices”, “nameservice1”);
conf.set(“dfs.ha.namenodes.nameservice1”, “nn1,nn2”);
conf.set(“dfs.namenode.rpc-address.nameservice1.nn1”,这里是HDFS地址);
conf.set(“dfs.namenode.rpc-address.nameservice1.nn2”, 这里是HDFS地址);
conf.set(“dfs.client.failover.proxy.provider.nameservice1”,
上述为配置方式示例

2、关闭防火墙,上传文件依然失败,fs.copyFromLocalFile(newPath, p)方法报空指针异常 和InvocationTargetException
出现这样异常的原因 (转载)
①远程代码ip加端口获取远程跨服拒绝连接和服务器未启动所导致的,是由调用方法或构造方法所抛出异常的受检查的异常.
②有可能web项目下的jar包缺失导致,详细检查控制台报出的异常日志信息,再对应查找相关jar包.或重复包
③在本机电脑测试出没有问题,打出war包确在war包运行服上报此异常, 请检查tomcat服务器版本,做好一致,或者war包服高于本服.
④开发jdk和部署jdk版本不一致,导致InvocationTargetException异常信息返回一个空值,调用不上重写的方法
这里出现fs.copyFromLocalFile(newPath, p)方法抛出异常,上传失败。
public String upFileToHDFS(String localPath, String targetPath) {
String message = “ok”;
String rootPath = HDFSUrl;
System.setProperty(“HADOOP_USER_NAME”, hiveUser);
Path newPath = new Path(localPath);
String fileString = newPath.getName();
if (fileString.contains("."))
fileString = fileString.split("\.")[0];
Path p = new Path(rootPath + targetPath + “/” + fileString);
//出现上传失败的原因,可能这里参数未设置,考虑第一步参数设置
Configuration conf = new Configuration();
FileSystem fs;
try {
fs = p.getFileSystem(conf);
if (!fs.exists§)
fs.mkdirs§;
String targetFilePathString = p.toString() + “/”
+ newPath.getName();
Path targetFilePath = new Path(targetFilePathString);
boolean is = fs.exists(targetFilePath);
if (is) {
message = “exist”;
return message;
}
try {
//如果这里出现无法读取文件的问题,抛出异常,那么请考虑上面配置参数是否已经设置
fs.copyFromLocalFile(newPath, p);
} catch (IOException e) {
System.out.println(" 上传文件 “+e.getMessage());
e.printStackTrace();
}
fs.close();
} catch (IOException e) {
System.out.println(” 上传文件 "+e.getMessage());
e.printStackTrace();
}

return message;

}

这里换了一种方式,使用IO流上传,同样提示上传成功,文件未上传。也没有报任何错误
private void uploadFile(String inURL、, String outURL) throws Exception{
try {
/** 省略部分不重要逻辑 包括访问用户名等**/
/** 配置相关 **/
Configuration conf = new Configuration();
conf.set(“fs.defaultFS”, “hdfs://nameservice1”);
conf.set(“dfs.nameservices”, “nameservice1”);
conf.set(“dfs.ha.namenodes.nameservice1”, “nn1,nn2”);
conf.set(“dfs.namenode.rpc-address.nameservice1.nn1”,这里是HDFS地址);
conf.set(“dfs.namenode.rpc-address.nameservice1.nn2”, 这里是HDFS地址);
conf.set(“dfs.client.failover.proxy.provider.nameservice1”,
“org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider”);

    /** hdfs 常见的获取文件系统 **/FileSystem fs = null;fs= FileSystem.get(conf);/** 查看目的路径是否存在 **/if(!(fs.exists(new Path(directory)))) {/** 如果路径不存在,则创建路径 **/fs.mkdirs(new Path(directory));}

/** 文件输入流**/
FileInputStream in = new FileInputStream(new File(outURL));
/** 获取文件输出流,配置文件输出地址 /
OutputStream out = fs.create(new Path(outURL), new Progressable() {
@Override
public void progress() {
System.out.println(“上传完一个文件”);
}
});
/
复制文件 **/
IOUtils.copyBytes(in,out,4096,true); //上传文件

    in.close();out.close();
} catch (IOException e) {e.printStackTrace();
} catch (IllegalArgumentException e) {e.printStackTrace();
}

}

最终解决方案,jar导入错误问题,需要用到的jar包,同时需要保证参数配置

部分Jar包导入的maven依赖

<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.2.0-transwarp</version>
</dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>2.2.0-transwarp</version>
</dependency>

上述添加jar包后,测试上传文件成功。

遇到的文件从本地上传HDFS失败相关推荐

  1. java上传HDFS失败问题File could only be written to 0 of the 1 minReplication nodes.

    服务器上HDFS上传文件正常,使用客户端上传文件报错 org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /user/ro ...

  2. hdfs 小文件服务器,服务器远程上传hdfs文件大小

    服务器远程上传hdfs文件大小 内容精选 换一换 您需要提前准备好符合条件的镜像文件,并了解操作系统的已知问题(参见已知问题).表1中,文件系统.网络.驱动相关的配置需要在虚拟机内部完成,强烈建议您在 ...

  3. hdfs复制文件夹_Hadoop框架:HDFS简介与Shell管理命令

    一.HDFS基本概述 1.HDFS描述 大数据领域一直面对的两大核心模块:数据存储,数据计算,HDFS作为最重要的大数据存储技术,具有高度的容错能力,稳定而且可靠.HDFS(Hadoop-Distri ...

  4. ftp服务器批量上传文件,bat批量上传ftp文件到服务器

    bat批量上传ftp文件到服务器 内容精选 换一换 CDM支持周期性自动将新增文件上传到OBS,不需要写代码,也不需要用户频繁手动上传即可使用OBS的海量存储能力进行文件备份.这里以CDM周期性备份F ...

  5. Atittit HDFS hadoop 大数据文件系统java使用总结 目录 1. 操作系统,进行操作 1 2. Hdfs 类似nfs ftp远程分布式文件服务 2 3. 启动hdfs服务start

    Atittit HDFS hadoop 大数据文件系统java使用总结 目录 1. 操作系统,进行操作 1 2. Hdfs 类似nfs ftp远程分布式文件服务 2 3. 启动hdfs服务start- ...

  6. 用ftp上传到服务器视频文件夹,ftp 上传文件夹到服务器

    ftp 上传文件夹到服务器 内容精选 换一换 上传的文件和上传的文件夹中包含的文件支持的格式请参见支持的文件格式.文件上传:从本地上传:在Projects Explorer视图中选中一个文件夹,依次单 ...

  7. html web上传文件原理,Web上传文件的原理及实现

    本文为原创,如需转载,请注明作者和出处,谢谢! 现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于java的Commons FileUpload.还有Struts1.x和Stru ...

  8. php webuploader大文件,web uploader 上传大文件总结

    由于业务需要,需要上传大文件,已有的版本无法处理IE版本,经过调研,百度的 webuploader 支持 IE 浏览器,而且支持计算MD5值,进而可以实现秒传的功能. 大文件上传主要分为三部分,预上传 ...

  9. xftp不能上传文件到服务器,xftp传文件到云服务器

    xftp传文件到云服务器 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分别安装数 ...

最新文章

  1. Set集合常用方法 遍历Set集合的方法
  2. 13款基于jQuery Mobile的布局插件和示例
  3. C++11中正則表達式測试
  4. 《动手学深度学习 PyTorch版》学习笔记(三):线性回归
  5. ImageMagick还是GraphicsMagick?
  6. 深入Atlas系列:探究序列化与反序列化能力(下) - JavaScriptSerializer
  7. 我的世界启动器java_我的世界最新启动器 无需安装JAVA
  8. linux安装vim不成功,centos安装vim失败解决
  9. SPSS实战:多因素方差分析(以随机区组设计为例)
  10. 面试官看到一定会打我---软件测试工程师面试套路和暗语灵魂解密
  11. android 投屏 版本号,Android开源投屏软件——Scrcpy
  12. Windows快捷键盘
  13. php函数大小写转化,php大小写转换函数(strtolower、strtoupper)用法介绍
  14. 建立自己的数据集 并用Tensorflow object detection API进行训练
  15. Excel VBA高级编程 -自动去除重复项 自动求和
  16. 什么是计算机嵌套分类汇总,Excel中插入分类汇总的嵌套级别的方法图解详细教程...
  17. GBK编码和UTF-8编码的区别
  18. 计算机科学与运用 未来,计算机科学与技术的应用现状与未来趋势分析
  19. unable to infer tagged configuration编译报错
  20. Andriod设计简易计算器

热门文章

  1. 【原创】2012年3月24日 单骑至大峪 日志
  2. 【Redis】Redis 哈希 Hash 键值对集合操作 ( 哈希 Hash 键值对集合简介 | 查询操作 | 增加操作 | 修改操作 )
  3. Error creating bean with name ‘sqlSessionFactory‘ defined in class path reso...报错的解决方法
  4. linux中如何看文件换行符,linux下的换行符
  5. matlab 图片倒影_ai怎么做水倒影效果?ai制作图案倒影水汶效果教程
  6. excel从右边查找字符并截取
  7. 【进程线程】1. 概念和区别
  8. HTML5系列代码:使用三种方法插入图像
  9. 论文阅读《Visual Measurement Integrity Monitoring for UAV Localization》
  10. 安装SeisMix计算跨密度混合面