一、首先自然是导包

   $HADOOP_HOME/share/hadoop/common/*.jar
   $HADOOP_HOME/share/hadoop/common/lib/*.jar
   $HADOOP_HOME/share/hadoop/hdfs/*.jar
   $HADOOP_HOME/share/hadoop/hdfs/lib/*.jar


二、代码如下

package com.stu.hdfs;
/*** * @author ysw28* HDFS的API操作*/import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.util.Arrays;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.apache.hadoop.io.IOUtils;
import org.junit.Test;public class TestDemo319 {@Test// 创建目录public void mkDir() {try {// 连接HDFS,设置副本数Configuration conf = new Configuration();conf.set("dfs.replication", "1");// 创建一个客户端FileSystem client = FileSystem.get(new URI("hdfs://HP110:9000"), conf, "root");// 创建目录Path path = new Path("/Demo319");client.mkdirs(path);// 关闭客户端client.close();System.out.println("创建目录成功");} catch (Exception e) {e.printStackTrace();System.out.println("创建目录失败");}}@Test// 删除目录,删除文件同理public void delDir() {try {// 连接HDFSConfiguration conf = new Configuration();// 创建客户端FileSystem client = FileSystem.get(new URI("hdfs://HP110:9000"), conf, "root");// 删除目录Path path = new Path("/Demo319");if (client.exists(path)) {client.delete(path, true);// 关闭客户端client.close();System.out.println("删除目录成功");} else {System.out.println("没有这个文件");}} catch (Exception e) {e.printStackTrace();System.out.println("删除目录失败");}}@Test// 上传文件public void copyFromLocal() {try {// 连接HDFS,指定副本数Configuration conf = new Configuration();conf.set("dfs.replication", "1");// 创建客户端FileSystem client = FileSystem.get(new URI("hdfs://Hp110:9000"), conf, "root");// 上传文件client.copyFromLocalFile(new Path("C:\\Users\\ysw28\\Desktop\\hadoop-2.8.5.tar.gz"), new Path("/Demo319"));// 关闭客户端client.close();System.out.println("上传文件成功");} catch (Exception e) {e.printStackTrace();System.out.println("上传文件失败");}}@Test// 下载文件public void copyToFrom() {try {// 连接HDFSConfiguration conf = new Configuration();// 创建客户端FileSystem client = FileSystem.get(new URI("hdfs://HP110:9000"), conf, "root");// 下载文件client.copyToLocalFile(true, new Path("/Demo319/hadoop-2.8.5.tar.gz"), new Path("E://"), true);// 关闭客户端client.close();System.out.println("上传文件成功");} catch (Exception e) {e.printStackTrace();System.out.println("上传文件失败");}}@Test// 使用HDFS的IO流上传文件public void putFileToHdfs() {try {// 连接HDFS,指定副本数Configuration conf = new Configuration();conf.set("dfs.replication", "1");// 创建客户端FileSystem client = FileSystem.get(new URI("hdfs://HP110:9000"), conf, "root");// 上传文件,构造一个输入流InputStream input = new FileInputStream("E:\\hadoop-2.8.5.tar.gz");// 构造一个输出流OutputStream output = client.create(new Path("/Demo319/hadoop.tar.gz"));// 构造一个缓存区byte buffer[] = new byte[1024];// 指定长度int len = 0;// 读取数据while ((len = input.read(buffer)) > 0) {// 写入数据output.write(buffer, 0, len);}// 刷新output.flush();// 关闭流output.close();input.close();// 关闭客户端client.close();System.out.println("通过HDFS的IO流上传文件成功");} catch (Exception e) {e.printStackTrace();System.out.println("通过HDFS的IO流上传文件失败");}}@Test// 使用HDFS的IO流下载文件public void getFileFromHdfs() {try {// 连接HDFSConfiguration conf = new Configuration();// 创建客户端FileSystem client = FileSystem.get(new URI("hdfs://HP110:9000"), conf, "root");// 下载文件,构造一个输入流InputStream input = client.open(new Path("/Demo319/hadoop.tar.gz"));// 构造一个输出流OutputStream output = new FileOutputStream("E://1.tar.gz");// 使用工具类IOUtils.copyBytes(input, output, 1024);// 关闭客户端client.close();System.out.println("通过HDFS的IO流下载文件成功");} catch (Exception e) {e.printStackTrace();System.out.println("通过HDFS的IO流下载文件失败");}}@Test// 更改文件名,更改目录名同理public void reName() {try {// 连接HDFSConfiguration conf = new Configuration();// 创建客户端FileSystem client = FileSystem.get(new URI("hdfs://HP110:9000"), conf, "root");// 更改文件名Path oldpath = new Path("/Demo319/1.txt");Path newPath = new Path("/Demo319/2.txt");client.rename(oldpath, newPath);// 关闭客户端client.close();System.out.println("更改文件名成功");} catch (Exception e) {e.printStackTrace();System.out.println("更改文件名失败");}}@Test// 写入数据public void writeFile() {try {// 连接HDFS,配置副本数Configuration conf = new Configuration();conf.set("dfs.replication", "1");// 创建客户端FileSystem client = FileSystem.get(new URI("hdfs://HP110:9000"), conf, "root");// 写入数据FSDataOutputStream output = client.create(new Path("/Demo319/3.txt"));output.writeUTF("我喜欢大数据");// 关闭流output.close();// 关闭客户端client.close();System.out.println("写入文件成功");} catch (Exception e) {e.printStackTrace();System.out.println("写入文件失败");}}@Test// 读取文件public void readFile() {try {// 连接HDFSConfiguration conf = new Configuration();// 创建客户端FileSystem client = FileSystem.get(new URI("hdfs://HP110:9000"), conf, "root");// 读取文件Path path = new Path("/Demo319/3.txt");if (client.exists(path)) {InputStream input = client.open(path);// 构造一个缓存区byte buffer[] = new byte[1024];int foot = 0;// 指定数组的下标int temp = 0;// 指定接受每次读取的字节数据while ((temp = input.read()) != -1) {buffer[foot++] = (byte) temp;}System.out.println(new String(buffer, 0, foot));// 关闭流input.close();// 关闭客户端client.close();System.out.println("读取文件成功");} else {System.out.println("没有这个文件");}} catch (Exception e) {e.printStackTrace();System.out.println("读取文件失败");}}@Test// 判断HDFS上是否存在某文件public void hdfsFileExists() {try {// 连接HDFS// 指定当前使用的用户是rootSystem.setProperty("HADOOP_USER_NAME", "root");// 配置参数,指定NameNode地址Configuration conf = new Configuration();conf.set("fs.defaultFS", "hdfs://HP110:9000");// 创建一个客户端FileSystem client = FileSystem.get(conf);// 判断是否存在某文件if (client.exists(new Path("/Demo/1.txt"))) {System.out.println("存在文件1.txt");} else {System.out.println("不存在文件1.txt");}System.out.println("没有出现错误");} catch (Exception e) {e.printStackTrace();System.out.println("出现错误");}}@Test// 查看文件信息public void getFileInfo() {try {// 连接HDFSConfiguration conf = new Configuration();// 创建客户端FileSystem client = FileSystem.get(new URI("hdfs://HP110:9000"), conf, "root");// 查看文件信息Path path = new Path("/");RemoteIterator<LocatedFileStatus> listFiles = client.listFiles(path, true);while (listFiles.hasNext()) {LocatedFileStatus status = listFiles.next();System.out.println(status.getPath().getName()); // 获取文件名System.out.println(status.getGroup()); // 获取所在组System.out.println(status.getLen());// 文件大小System.out.println(status.getPermission());// 获取权限// 获取数据块信息BlockLocation[] blockLocations = status.getBlockLocations();for (BlockLocation blockLocation : blockLocations) {// 数据块所在主机名String[] hosts = blockLocation.getHosts();for (String host : hosts) {System.out.println(host);}// 数据块所在主机IPString[] names = blockLocation.getNames();for (String name : names) {System.out.println(name);}}System.out.println("这是一个分割线-----------------------------");}System.out.println("查看文件信息成功");} catch (Exception e) {e.printStackTrace();System.out.println("查看文件信息失败");}}@Test// 获取数据块信息public void getBlockInfo() {try {// 连接HDFS// 指定使用的用户是rootSystem.setProperty("HADOOP_USER_NAME", "root");// 配置参数,指明NameNode的地址Configuration conf = new Configuration();conf.set("fs.defaultFS", "hdfs://HP110:9000");// 创建一个客户端FileSystem client = FileSystem.get(conf);// 获取文件status信息FileStatus fileStatus = client.getFileStatus(new Path("/Demo/100.txt"));// 获取文件的数据块信息BlockLocation locaktions[] = client.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());/** 将数组转换为字符串 语法:Arrays.toString(数组名);*/for (BlockLocation blockLocation : locaktions) {System.out.println(Arrays.toString(blockLocation.getHosts()) + "\t" + Arrays.toString(blockLocation.getNames()));System.out.println(fileStatus);}// 关闭客户端client.close();System.out.println("获取数据块信息成功");} catch (Exception e) {e.printStackTrace();System.out.println("获取数据块信息失败");}}@Test// 查看HDFS中所有的文件和内容,想看具体的话就在/后面累加文件的名字public void getListFileInfo() {try {// 连接HDFS// 指定当前用户是rootSystem.setProperty("HADOOP_USER_NAME", "root");// 配置参数,指定NameNode地址Configuration conf = new Configuration();conf.set("fs.defaultFS", "hdfs://HP110:9000");// 创建一个客户端FileSystem client = FileSystem.get(conf);// 指定查看地址Path path = new Path("/Demo/100.txt");FileStatus list[] = client.listStatus(path);for (FileStatus fileStatus : list) {System.out.println(fileStatus);}System.out.println("查看文件成功");} catch (Exception e) {e.printStackTrace();System.out.println("查看文件失败");}}}

HDFS使用JavaAPI操作上传特定副本到datanode相关推荐

  1. Hadoop环境下用java代码实现hdfs远程文件的上传和下载

    Hadoop环境下用java代码实现hdfs远程文件的上传和下载 文章目录 Hadoop环境下用java代码实现hdfs远程文件的上传和下载 一.新建maven工程 二.文件的上传 三.文件的下载 四 ...

  2. php 禁止修改文件名,WordPress教程:简单修改代码禁止用户上传特定类型的文件!...

    再多站点.网站开放注册投稿的时候,并且没有限制投稿者上传文件,那将是很危险的事情,所以,限制上传类型是必须的!今天逍遥乐就带大家,如何从WordPress默认允许上传的文件类型中,禁止上传某些特定类型 ...

  3. java操作hadoop hdfs,实现文件上传下载demo

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

  4. HDFS的javaAPI操作(10)

    在之前的博客<HDFS的shell常用命令大全>中,小菌为大家分享的是在linux系统的命令行上通过shell命令操作HDFS.而本篇博客,小菌为大家带来的则是在java的环境下,用Jav ...

  5. 【博学谷学习记录】超强总结,用心分享 | 狂野大数据HDFS的JavaAPI操作~个人学习复习记录~PART-03

    一.配置 需要先在Windows配置对应版本的hadoop环境 二.涉及的主要类 Configuration:该类的对象封装了客户端或服务器的配置 FileSystem:该类的对象是一个文件系统对象, ...

  6. java 移动页面中的图片上传_移动端图片操作——上传

    上传我们一般都是用"input[type=file]"控件.当你用此控件时,你就授权了网页和服务器访问对应的文件,就可以得到File对象. 友情提示在,在Android手机webv ...

  7. [转]文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1

    转自:http://blog.csdn.net/soarheaven/archive/2008/12/08/3474152.aspx 最近项目需要对FTP服务器进行操作,现把实现总结如下: 打算分2篇 ...

  8. hdfs深入:10、hdfs的javaAPI操作

    /** * 递归遍历hdfs中所有的文件路径 */ @Test public void getAllHdfsFilePath() throws URISyntaxException, IOExcept ...

  9. Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1...

    相关文章导航 Sql Server2005 Transact-SQL 新兵器学习总结之-总结 Flex,Fms3相关文章索引 FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统 ...

最新文章

  1. Windows Live Messenger  正式版已经发布
  2. 从传统GAN到improved WGAN
  3. java 自定义注释_带有自定义注释的Java注释教程
  4. 记自己在spring中使用redis遇到的两个坑
  5. LeetCode MySQL 597. 好友申请 I :总体通过率
  6. 动态链接库的隐式动态链接和显示动态链接
  7. k8s学习笔记-环境搭建篇
  8. 计算机网络传媒介,2.3 网络传输媒介 - 第2章 计算机网络硬件基础 - 《计算机网络技术与应用》 - 倾心驿站 - 恰教程网...
  9. 原版windows下载地址
  10. PDF417二维条码详解
  11. [UE5] 部署 Rider For Unreal Engine 编辑器
  12. 本地IDEA连接服务器的Redis报错处理
  13. linux 监控微信通知,Prometheus + Altermanager实现告警微信通知
  14. 学习方法论与相关建议
  15. window系统 实现FFmpeg 录制音视频
  16. SpringBoot集成文件 - 如何基于POI-tl和word模板导出庞大的Word文件?
  17. python斐波那契数列
  18. Cephx认证及rbd的使用
  19. Androidstudio音乐播放器
  20. 30行Python代码,抓取全网实时热点,获取最新资讯

热门文章

  1. AOE网与关键路径简介
  2. ansible: Linux批量管理神器
  3. 减治求有重复元素的全排列
  4. php中socket的使用
  5. 开源 免费 java CMS - FreeCMS2.1 菜单管理
  6. 面向对象的相关面试题
  7. Study on Android【五】--自定义ContentProvider的语义
  8. gis里创建要素面板怎么打开_周末技术流 | GIS三维热力图分析
  9. 三年java经验应该会什么?
  10. Linux Mysql 安装方法