本文主要参考了Hadoop HDFS文件系统通过java FileSystem 实现上传下载等,并实际的做了一下验证。代码与引用的文章差别不大,现列出来作为备忘。


import java.io.*;
import java.net.URI;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;
import org.junit.Test;public class HdfsDemo {private static String SOURCE_PATH = "C:\\settings.jar";private static String DEST_PATH = "/hbase/upload/settings.jar";private static String MASTER_URI = "hdfs://192.168.209.129:9000";/*** 测试上传文件* 如果下述代码抛出异常:* org.apache.hadoop.security.AccessControlException: Permission denied: user=xxx, access=WRITE。* 则表明上传文件的用户没有权限。解决方式如下:* 1.配置环境变量HADOOP_USER_NAME, 并设置值为有访问hadoop集群有权限的用户,比如:hadoop。源码调试发现hadoop会首先从环境变量中去查找上传文件的用户名。查找不到会议pc的名字作为用户名。* 2.赋予hdfs上的文件夹/hbase/upload/读写权限。 命令是:hadoop fs -chmod 777  /hbase/upload。这样,可以保证上传文件到该目录成功,但上传到其他目录依然无权限。** @throws Exception* @author lihong10 2017年12月9日 上午10:42:30*/@Testpublic void testUpload() throws Exception {Configuration conf = new Configuration();FileSystem fs = FileSystem.get(new URI(MASTER_URI), conf);InputStream in = new FileInputStream(SOURCE_PATH);OutputStream out = fs.create(new Path(DEST_PATH), new Progressable() {@Overridepublic void progress() {System.out.println("上传完一个设定缓存区大小容量的文件!");}});IOUtils.copyBytes(in, out, conf);/*byte[] buffer = new byte[1024];int len = 0;while((len=in.read(buffer))>0){out.write(buffer, 0, len);} out.flush();in.close();out.close();*/}/*** 测试下载文件* @throws Exception*/@Testpublic void testDownload() throws Exception {Configuration conf = new Configuration();FileSystem fs = FileSystem.get(new URI(MASTER_URI), conf);
//      InputStream in = new FileInputStream("e:\\hadoop.avi");
//      OutputStream out = fs.create(new Path("/demo/b.avi"));InputStream in = fs.open(new Path(DEST_PATH));OutputStream out = new FileOutputStream("E:\\XXXX.jar");IOUtils.copyBytes(in, out, conf);/*byte[] buffer = new byte[1024];int len = 0;while((len=in.read(buffer))>0){out.write(buffer, 0, len);} out.flush();in.close();out.close();*/}/*** 复制文件到远程文件系统,也可以看做是上传* @param conf* @param uri* @param local* @param remote* @throws IOException*/public static void copyFile(Configuration conf, String uri, String local, String remote) throws IOException {FileSystem fs = FileSystem.get(URI.create(uri), conf);fs.copyFromLocalFile(new Path(local), new Path(remote));System.out.println("copy from: " + local + " to " + remote);fs.close();}@Testpublic void testCopyFile() throws IOException {// 使用命令:hadoop fs -ls  /hbase/upload, 可以查看复制到/hbase/upload目录下的文件copyFile(new Configuration(), MASTER_URI, SOURCE_PATH, "/hbase/upload/settings01.jar");}/*** 在hdfs文件系统下创建目录* @param conf* @param uri* @param remoteFile* @throws IOException*/public static void makeDir(Configuration conf, String uri, String remoteFile) throws IOException {FileSystem fs = FileSystem.get(URI.create(uri), conf);Path path = new Path(remoteFile);fs.mkdirs(path);System.out.println("创建文件夹" + remoteFile);}@Testpublic void testMakeDir() throws IOException {//可以通过:hadoop fs -ls  /hbase/upload。   查看创建的目录subdir01makeDir(new Configuration(), MASTER_URI, "/hbase/upload/subdir01");}/*** 删除文件* @param conf* @param uri* @param filePath* @throws IOException*/public static void delete(Configuration conf, String uri, String filePath) throws IOException {Path path = new Path(filePath);FileSystem fs = FileSystem.get(URI.create(uri), conf);fs.deleteOnExit(path);System.out.println("Delete: " + filePath);fs.close();}@Testpublic void testDelete() throws IOException {delete(new Configuration(), MASTER_URI, "/hbase/upload/settings01.jar");}/*** 查看文件内容* @param conf* @param uri* @param remoteFile* @throws IOException*/public static void cat(Configuration conf, String uri, String remoteFile) throws IOException {Path path = new Path(remoteFile);FileSystem fs = FileSystem.get(URI.create(uri), conf);FSDataInputStream fsdis = null;System.out.println("cat: " + remoteFile);try {fsdis = fs.open(path);IOUtils.copyBytes(fsdis, System.out, 4096, false);} finally {IOUtils.closeStream(fsdis);fs.close();}}@Testpublic void testCat() throws IOException {//hbase/hbase.version 这个文件已经存在cat(new Configuration(), MASTER_URI, "/hbase/hbase.version");}/*** 查看目录下面的文件* @param conf* @param uri* @param folder* @throws IOException*/public static void ls(Configuration conf, String uri, String folder) throws IOException {Path path = new Path(folder);FileSystem fs = FileSystem.get(URI.create(uri), conf);FileStatus[] list = fs.listStatus(path);System.out.println("ls: " + folder);System.out.println("==========================================================");for (FileStatus f : list) {System.out.printf("name: %s, folder: %s, size: %d\n", f.getPath(), f.isDirectory(), f.getLen());}System.out.println("==========================================================");fs.close();}@Testpublic void testLs() throws IOException {ls(new Configuration(), MASTER_URI, "/hbase/upload");}}

java操作hadoop hdfs,实现文件上传下载demo相关推荐

  1. Java实现FTP批量大文件上传下载

    用Java实现FTP批量大文件上传下载 <iframe id="I0_1416224567509" style="margin: 0px; padding: 0px ...

  2. IO 操作 (二进制流文件上传下载)

    后台 二进制流 -> 前台blob对象 ->生成 dateUrl->前台 file->dataUrl -blob ->FormData ->后台 java 后台返回 ...

  3. Java 使用 FTP 实现大文件上传下载

    Java 上传下载 1G 以上的文件可以通过 http 协议或 ftp 实现,但是 http 协议对文件上传大小有限制,而且还不稳定,因此这里使用 ftp 上传. ftp 上传方式有两种: 一.ASC ...

  4. JAVA中使用FTPClient实现文件上传下载

    在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件 ...

  5. java ftp 大文件_用Java实现FTP批量大文件上传下载(二)

    2上传下载 文件的上传可以分成多线程及单线程,在单线程情况下比较简单,而在多线程的情况下,要处理的事情要多点,同时也要小心很多.下面是net.sf.jftp.net.FtpConnection的上传h ...

  6. java操作文件_java操作FTP,实现文件上传下载删除操作

    上传文件到FTP服务器: /** * Description: 向FTP服务器上传文件 * @param url FTP服务器hostname * @param port FTP服务器端口,如果默认端 ...

  7. java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息...

    1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...

  8. java jsch下载文件,JSch使用sftp协议实现服务器文件上传下载操作

    Jsch是什么? JSch 是SSH2的一个纯Java实现.它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等.你可以将它的功能集成到你自己的 程序中.同时该项目也提供一个J2 ...

  9. 文件上传 java web_JavaWeb 文件上传下载

    1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下 ...

最新文章

  1. WGAN的提出背景以及解决方案
  2. [云炬创业基础笔记]第十一章创业计划书测试5
  3. boost::hana::any用法的测试程序
  4. 经典C语言程序100例之四九
  5. 解密Arm Neoverse V1 和 Neoverse N2 平台 为下一代基础设施带来计算变革
  6. LeetCode C语言刷题——day1
  7. OneNote 2013 快捷键
  8. Linux文件系统IO:直接IO原理与实现:缓存I/O、直接I/O
  9. js:基于原生js的上啦下啦刷新功能
  10. JZOJ 1385. 直角三角形
  11. Yii Framework2.0开发教程(2)使用表单Form
  12. cad菜单栏快捷键_教你如何用富怡服装CAD画男衬衫的结构设计
  13. hysys动态模拟教程_(转载)HYSYS-过程模拟软件-稳态模拟-第一部分(一)
  14. 重拾C语言-摄氏度与华氏度相互转换
  15. 南清北复交北航哈工大中科院华科保研记
  16. 基于android的lbs技术,基于Android的LBS系统研究
  17. moment常用函数
  18. GEE实战 | 各种指数分析(植被、水体、建筑)
  19. html边框颜色线性渐变,css3设置边框颜色渐变的方法有哪些
  20. 2020-10-18大二第七周

热门文章

  1. 20210521-cmd-7zip压缩和解压
  2. 物理机搭建黑群晖DSM6.2
  3. 【例10.6】在磁盘文件上存有10个学生的数据。要求将第1,3,5,7,9个学生数据输入计算机,并在屏幕上显示出来。
  4. 深度学习可解释性-可视化技术
  5. 浏览器控制台 console 引入 js 文件
  6. 南山中学2021级2班高考成绩查询,四川省绵阳南山中学2021年排名
  7. 电影购票APP实现(2)-Servlet
  8. 二代征信已经来了,这些常识你还不懂么
  9. 音画同行 像犹新生——三星2021 电视新品震撼再升级
  10. Linux fciv 生成md5,cmd下md5值计算命令