前文

hdfsdemo通过HDFS上传下载文件

HDFS_CRUD

windows环境下需要使用uitls.exe

可从github下载,并且要设置环境变量 HADOOP_HOME=Location 【安装解压的位置】 PATH添加:%HADOOP_HOME%\bin 和 %HADOOP_HOME%\sbin

Hadoop集群是3.3,建议pom.xml的hadoop依赖包也是3.3

为pom.xml增加依赖

  1. <!-- hadoop依赖库-->
  2. <dependency>
  3. <groupId>org.apache.hadoop</groupId>
  4. <artifactId>hadoop-common</artifactId>
  5. <version>3.3.1</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.apache.hadoop</groupId>
  9. <artifactId>hadoop-hdfs</artifactId>
  10. <version>3.3.1</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.apache.hadoop</groupId>
  14. <artifactId>hadoop-client</artifactId>
  15. <version>3.3.1</version>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.apache.hadoop</groupId>
  19. <artifactId>hadoop-mapreduce-client-core</artifactId>
  20. <version>3.3.1</version>
  21. </dependency>

新建java文件HDFS_CRUD

  1. /**
  2. * @author LEHOSO
  3. * @date 2021/10/18
  4. * @apinote
  5. */
  6. public class HDFS_CRUD {
  7. FileSystem fs = null;
  8. //初始化客户端对象
  9. @Before
  10. public void init() throws Exception {
  11. //构造一个配置参数对象,设置一个参数:要访问的HDFS的URI
  12. Configuration conf = new Configuration();
  13. //这里指定使用的是HDFS
  14. conf.set("fs.defaultFS", "hdfs://192.168.142.10:9000");
  15. //通过如下的方式进行客户端身份的设置
  16. System.setProperty("HADOOP_USER_NAME", "root");
  17. //通过FileSystem的静态方法获取文件系统客户端对象
  18. fs = FileSystem.get(conf);
  19. }
  20. //上传文件到HDFS
  21. @Test
  22. public void testAddFileToHdfs() throws IOException {
  23. //要上传的文件所在本地路径
  24. Path src = new Path("D:/test.txt");
  25. //要上传到HDFS目标路径
  26. Path dst = new Path("/testFile");
  27. //上传文件方法调用
  28. fs.copyFromLocalFile(src, dst);
  29. //关闭资源
  30. fs.close();
  31. }
  32. //从HDFS中复制文件到本地系统
  33. @Test
  34. public void testDownloadFileToLocal() throws IllegalArgumentException, IOException {
  35. //下载文件
  36. /**
  37. * 在windows平台开发HDFS项目时候,不设置Hadoop开发环境,会报错
  38. * 安装hadoop环境,需要重启IDEA或者重启电脑才能生效
  39. * 需要相关依赖:winuitls.exe、winutis.pdb、hadoop.dll
  40. */
  41. fs.copyToLocalFile(false,
  42. new Path("/testFile"),
  43. new Path("E:/x.txt"),
  44. true);
  45. /**
  46. * delSrc参数设置为False
  47. * useRawLocalFileSystem参数设置为true
  48. * 下载的文件就没有 带.crc的校验文件
  49. */
  50. fs.close();
  51. }
  52. //创建、删除、重命名文件
  53. @Test
  54. public void testMkdirAndDeleteAndRename() throws Exception {
  55. //创建项目
  56. fs.mkdirs(new Path("/a/b/c"));
  57. fs.mkdirs(new Path("/a2/b2/c2"));
  58. //重命名文件或文件夹
  59. fs.rename(new Path("/a"), new Path("/a3"));
  60. //删除文件夹,如果是非空文件夹,参数2【recurisive】值必须true
  61. fs.delete(new Path("/a2"), true);
  62. }
  63. //查看目录信息,只显示文件
  64. @Test
  65. public void testListFiles() throws FileNotFoundException, IllegalArgumentException, IOException {
  66. //获取迭代器对象
  67. /**ListFile方法
  68. * param pathstring:为路径
  69. * param recursive:为是否为递归查询
  70. */
  71. RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);
  72. while (listFiles.hasNext()) {
  73. LocatedFileStatus fileStatus = listFiles.next();
  74. //打印当前文件名
  75. System.out.println(fileStatus.getPath().getName());
  76. ///打印当前块大小
  77. System.out.println(fileStatus.getBlockSize());
  78. //打印当前文件权限
  79. System.out.println(fileStatus.getPermission());
  80. //打印当前文件内容长度
  81. System.out.println(fileStatus.getLen());
  82. //获取该文件块信息(包含长度,数据块,datanode的信息)
  83. BlockLocation[] blockLocations = fileStatus.getBlockLocations();
  84. for (BlockLocation bl : blockLocations) {
  85. System.out.println("block-length:" + bl.getLength() + "--" + "block-offset:" + bl.getOffset());
  86. String[] hosts = bl.getHosts();
  87. for (String host : hosts) {
  88. System.out.println(host);
  89. }
  90. }
  91. System.out.println("---------分割线---------");
  92. //若测试显示信息太多,可以删除或者禁用log4j
  93. }
  94. }
  95. // 查看文件及文件夹信息
  96. @Test
  97. public void testListAll() throws FileNotFoundException, IllegalArgumentException, IOException {
  98. // 获取HDFS系统中文件和目录的元数据等信息
  99. FileStatus[] listStatus = fs.listStatus(new Path("/"));
  100. String flag = "d-- ";
  101. for (FileStatus fstatus : listStatus) {
  102. // 判断是文件还是文件夹
  103. if (fstatus.isFile())
  104. flag = "f-- ";
  105. System.out.println(flag + fstatus.getPath().getName());
  106. }
  107. }
  108. }

GitHub下载地址

(HadoopDemo

二、JAVA API实现HDFS的更多相关文章

  1. 使用Java API操作HDFS文件系统

    使用Junit封装HFDS import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org ...

  2. 使用Java Api 操作HDFS

    如题 我就是一个标题党  就是使用JavaApi操作HDFS,使用的是MAVEN,操作的环境是Linux 首先要配置好Maven环境,我使用的是已经有的仓库,如果你下载的jar包 速度慢,可以改变Ma ...

  3. JAVA API连接HDFS HA集群

    使用JAVA API连接HDFS时我们需要使用NameNode的地址,开启HA后,两个NameNode可能会主备切换,如果连接的那台主机NameNode挂掉了,连接就会失败. HDFS提供了names ...

  4. JAVA API 实现hdfs文件操作

    java api 实现hdfs 文件操作会出现错误提示: Permission denied: user=hp, access=WRITE, inode="/":hdfs:supe ...

  5. 使用JAVA API读取HDFS的文件数据出现乱码的解决方案

    使用JAVA api读取HDFS文件乱码踩坑 想写一个读取HFDS上的部分文件数据做预览的接口,根据网上的博客实现后,发现有时读取信息会出现乱码,例如读取一个csv时,字符串之间被逗号分割 英文字符串 ...

  6. Java API 读取HDFS的单文件

    HDFS上的单文件: -bash-3.2$ hadoop fs -ls /user/pms/ouyangyewei/data/input/combineorder/repeat_rec_categor ...

  7. hadoop学习笔记(五):java api 操作hdfs

    HDFS的Java访问接口 1)org.apache.hadoop.fs.FileSystem 是一个通用的文件系统API,提供了不同文件系统的统一访问方式. 2)org.apache.hadoop. ...

  8. 使用java api操作HDFS文件

    实现的代码如下: import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import ...

  9. Hadoop Java API操作HDFS文件系统(Mac)

    1.下载Hadoop的压缩包 tar.gz   https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/stable/ 2.关联jar包 在 ...

随机推荐

  1. NOIP2012提高组初赛NB题

    本题中,我们约定布尔表达式只能包含 p, q, r 三个布尔变量,以及"与"(∧)."或"(∨)."非"(¬)三种布尔运算.如果无论 p, ...

  2. 【Docker】(10)---详细说说 Dockerfile文件

    一.基础概念 1.基本概念 Dockerfile 是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建.有了 Dockerfile,当我们需要定制 ...

  3. NX开发 刀路生成

    此段是可以生成程序的完整代码,只有从坐标(10,10,10)到(500,500,500)一根刀轨.motion_ptr->feed_value 的值为0时生成G00,非0时生成G01.此代码只有 ...

  4. 【Java虚拟机2】Java类加载机制

    前言 JAVA代码经过编译从源码变为字节码,字节码可以被JVM解读,使得JVM屏蔽了语言级别的限制.才有了现在的kotlin.Scala.Clojure.Groovy等语言. 字节码文件中描述了类的各 ...

  5. JVM:参数调优

    JVM:参数调优 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 前言 查看 JVM 系统默认值:使用 jps 和 jinfo 进行查看 -Xms:初始堆空间 - ...

  6. Google Object detection配置与使用

    Google Object detection 前言: 本文记录了使用Google发布的Object detection(July 1st, 2019)接口,完成了对标注目标的检测.参考了很多博文,在 ...

  7. (五)、Docker 容器数据卷

    1.什么是数据卷 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的 容器之间希望有可能共享数据 Docker容器产生的数据,如果不通过docker comm ...

  8. 热身训练2 GCD

    题目描述 简要题意:  n个数字,a1,a2,...,an m次询问(l,r),每次询问需回答 1.gcd(al,al+1,al+2,...,ar);2.gcd(ax,ax+1,ax+2,...,ay ...

  9. 最小最大堆min-max Heap

    (1)由性质5只能插在奇数层,即根节点处,7下沉到右堆的min level,10下沉到max level,插入后满足min-max heap性质,很容易画出: (2)由性质80也是向右堆插入,且插入到 ...

  10. Python:Ubuntu上使用pip安装opencv-python出现错误

    Ubuntu 18.04 上 使用 pip 安装 opencv-python,出现的错误如下: 1 ~$: pip install opencv-python -i https://pypi.tuna ...