一、依赖包maven路径


  1. <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
  2. <dependency>
  3. <groupId>org.apache.hadoop</groupId>
  4. <artifactId>hadoop-client</artifactId>
  5. <version>2.7.3</version>
  6. <scope>runtime</scope>
  7. </dependency>

二、针对HDFS文件的操作类HDFSOperate


  1. package com.hdfs.util;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.io.PrintStream;
  8. import java.net.URI;
  9. import org.apache.hadoop.conf.Configuration;
  10. import org.apache.hadoop.fs.FSDataInputStream;
  11. import org.apache.hadoop.fs.FSDataOutputStream;
  12. import org.apache.hadoop.fs.FileSystem;
  13. import org.apache.hadoop.fs.Path;
  14. import org.apache.hadoop.io.IOUtils;
  15. /**
  16. * 针对HDFS文件的操作类
  17. */
  18. public class HDFSOperate {
  19. /**
  20. * 新增(创建)HDFS文件
  21. * @param hdfs
  22. */
  23. public void createHDFS(String hdfs){
  24. try {
  25. Configuration conf = new Configuration();
  26. conf.setBoolean("dfs.support.append", true);
  27. conf.set("dfs.client.block.write.replace-datanode-on-failure.policy","NEVER");
  28. conf.set("dfs.client.block.write.replace-datanode-on-failure.enable","true");
  29. FileSystem fs = FileSystem.get(URI.create(hdfs), conf);
  30. Path path = new Path(hdfs);
  31. //判断HDFS文件是否存在
  32. if(fs.exists(path)){
  33. //System.out.println(hdfs + "已经存在!!!");
  34. }else{
  35. FSDataOutputStream hdfsOutStream = fs.create(new Path(hdfs));
  36. hdfsOutStream.close();
  37. }
  38. fs.close();
  39. } catch (Exception e) {
  40. // TODO: handle exception
  41. e.printStackTrace();
  42. }
  43. }
  44. /**
  45. * 在HDFS文件后面追加内容
  46. * @param hdfs
  47. * @param appendContent
  48. */
  49. public void appendHDFS(String hdfs,String appendContent){
  50. try {
  51. Configuration conf = new Configuration();
  52. conf.setBoolean("dfs.support.append", true);
  53. conf.set("dfs.client.block.write.replace-datanode-on-failure.policy","NEVER");
  54. conf.set("dfs.client.block.write.replace-datanode-on-failure.enable","true");
  55. FileSystem fs = FileSystem.get(URI.create(hdfs), conf);
  56. Path path = new Path(hdfs);
  57. //判断HDFS文件是否存在
  58. if(fs.exists(path)){
  59. //System.out.println(hdfs + "已经存在!!!");
  60. }else{
  61. FSDataOutputStream hdfsOutStream = fs.create(new Path(hdfs));
  62. hdfsOutStream.close();
  63. }
  64. FSDataOutputStream hdfsOutStream = fs.append(new Path(hdfs));
  65. byte [] str = appendContent.getBytes("UTF-8");//防止中文乱码
  66. hdfsOutStream.write(str);
  67. hdfsOutStream.close();
  68. fs.close();
  69. } catch (Exception e) {
  70. // TODO: handle exception
  71. e.printStackTrace();
  72. }
  73. }
  74. /**
  75. * 修改HDFS文件内容 /  删除就是替换为空
  76. * @param hdfs : hdfs文件路径
  77. * @param sourceContent :要修改的hdfs文件内容
  78. * @param changeContent :需要修改成的文件内容
  79. */
  80. public void change(String hdfs,String sourceContent,String changeContent){
  81. try {
  82. Configuration conf = new Configuration();
  83. conf.setBoolean("dfs.support.append", true);
  84. conf.set("dfs.client.block.write.replace-datanode-on-failure.policy","NEVER");
  85. conf.set("dfs.client.block.write.replace-datanode-on-failure.enable","true");
  86. FileSystem fs = FileSystem.get(URI.create(hdfs), conf);
  87. Path path = new Path(hdfs);
  88. //判断HDFS文件是否存在
  89. if(fs.exists(path)){
  90. //System.out.println(hdfs + "已经存在!!!");
  91. FSDataInputStream in = fs.open(path);
  92. BufferedReader bf=new BufferedReader(new InputStreamReader(in));//防止中文乱码
  93. String totalString = "";
  94. String line = null;
  95. while ((line = bf.readLine()) != null) {
  96. totalString += line;
  97. }
  98. String changeString = totalString.replace(sourceContent, changeContent);
  99. FSDataOutputStream hdfsOutStream = fs.create(new Path(hdfs));
  100. byte [] str = changeString.getBytes("UTF-8");
  101. hdfsOutStream.write(str);
  102. hdfsOutStream.close();
  103. }else{
  104. //System.out.println(hdfs + "不存在,无需操作!!!");
  105. }
  106. fs.close();
  107. } catch (Exception e) {
  108. // TODO: handle exception
  109. e.printStackTrace();
  110. }
  111. }
  112. /**
  113. * 判断要追加的内容是否存在
  114. * @param hdfs
  115. * @param appendContent
  116. * @return
  117. */
  118. public Boolean isContentExist(String hdfs,String appendContent){
  119. try {
  120. Configuration conf = new Configuration();
  121. conf.setBoolean("dfs.support.append", true);
  122. conf.set("dfs.client.block.write.replace-datanode-on-failure.policy","NEVER");
  123. conf.set("dfs.client.block.write.replace-datanode-on-failure.enable","true");
  124. FileSystem fs = FileSystem.get(URI.create(hdfs), conf);
  125. Path path = new Path(hdfs);
  126. //判断HDFS文件是否存在
  127. if(fs.exists(path)){
  128. //System.out.println(hdfs + "已经存在!!!");
  129. FSDataInputStream in = fs.open(path);
  130. BufferedReader bf=new BufferedReader(new InputStreamReader(in));//防止中文乱码
  131. String totalString = "";
  132. String line = null;
  133. while ((line = bf.readLine()) != null) {
  134. totalString += line;
  135. }
  136. if(totalString.contains(appendContent)){
  137. return true;
  138. }
  139. }else{
  140. //System.out.println(hdfs + "不存在,无需操作!!!");
  141. }
  142. fs.close();
  143. } catch (Exception e) {
  144. // TODO: handle exception
  145. e.printStackTrace();
  146. }
  147. return false;
  148. }
  149. public static void main(String[] args) throws IOException {
  150. String hdfs = "hdfs://192.168.168.200:9000/test/tes.txt";
  151. HDFSOperate hdfsOperate = new HDFSOperate();
  152. hdfsOperate.createHDFS(hdfs);
  153. hdfsOperate.appendHDFS(hdfs,"测试新增内容");
  154. //hdfsOperate.change(hdfs, "测试新增内容", "测试修改成功");
  155. }
  156. }

Java读写HDFS文件的更多相关文章

  1. Java读写hdfs上的avro文件

    1.通过Java往hdfs写avro文件 import java.io.File; import java.io.IOException; import java.io.OutputStream; i ...

  2. Java读写资源文件类Properties

    Java中读写资源文件最重要的类是Properties 1) 资源文件要求如下: 1.properties文件是一个文本文件 2.properties文件的语法有两种,一种是注释,一种属性配置.  注 ...

  3. Java读写txt文件

    1.Java读取txt文件 1.1.使用FileInputStream: public static String readFile(File file, String charset){ //设置默 ...

  4. Java 读写XML文件 API--org.dom4j

    om4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,同时它也是一个开放源代码的软件 ...

  5. C++读写EXCEL文件OLE,java读写excel文件POI 对比

    C++读写EXCEL文件方式比较 有些朋友问代码的问题,将OLE读写的代码分享在这个地方,大家请自己看.http://www.cnblogs.com/destim/p/5476915.html C++ ...

  6. java读写excel文件( POI解析Excel)

    package com.zhx.base.utils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi ...

  7. Java读写.properties文件实例,解决中文乱码问题

    package com.lxk.propertyFileTest; import java.io.*; import java.util.Properties; /** * 读写properties文 ...

  8. 《Java知识应用》Java读写DBF文件

    1. 准备: Jar包下载:链接: https://pan.baidu.com/s/1Ikxx-vkw5vSDf9SBUQHBCw 提取码: 7h58 复制这段内容后打开百度网盘手机App,操作更方便 ...

  9. java读写大文件

    java读写2G以上的大文件(推荐使用以下方法) static String sourceFilePath = "H:\\DataSource-ready\\question.json&qu ...

随机推荐

  1. mysql主从复制-读写分离-原理

    Mysql主从复制和读写分离 在实际的生产环境中,如果对mysql数据库的读和写都在一台数据库服务器中操作,无论是在安全性.高可用性,还是高并发等各个方面都是不能满足实际需求的.因此,一般通过主从复制 ...

  2. django面试六

    Redis缓存击穿.缓存雪崩.缓存重建 回答参考: 缓存击穿: 当一个连接访问缓存数据库中不存在的数据时,会直接通过缓存数据库到后端数据库中查找数据,但如果有大量连接在查询一个不存在的数据,就会有大量 ...

  3. sql,按照时间排序,取前N条

    mysql: SELECT * from  (SELECT H_TEMPERATURE,TH_TIME FROM wenshidu  WHERE TH_TIME <= STR_TO_DATE(' ...

  4. 前端笔记 (3.JavaScript 1)

    JavaScript 是属于网络的脚本语言! JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编程代码. JavaScript 插入 HTML 页面后, ...

  5. python 基础5 初级函数

    函数最重要的目的是方便我们重复使用相同的一段程序.将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句. def my_len(): def 关键字 ...

  6. 微软Power BI 每月功能更新系列——10月Power BI 新功能学习

    Power BI Desktop10月产品功能摘要 本月Power Plus Desktop的更新充满了整个产品的小型和大型改进.一个巨大的更新是Power BI服务支持我们的复合模型和聚合预览.这实 ...

  7. 打开视图 :1449 - the user specified as a definer ('root'@'%')does not exist

    从一个数据库数据迁移到本地localhost   程序在调用到数据库的视图时报错,直接在数据库中打开视图时也报错,类似:   mysql 1449 : The user specified as a ...

  8. 更换JDK版本时的问题:Error: could not open `C:\Java\jre7\lib\amd64\jvm.cfg'

    1.先把oracle自带的weblogic给卸载了,然后打开eclipse,发现报错了:Error: could not open `C:\Java\jre7\lib\amd64\jvm.cfg' J ...

  9. Django--路由控制 ——URL反向解析

    Django--路由控制 本文目录 一 Django中路由的作用 二 简单的路由配置 三 有名分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的path 回到目录 一 Djan ...

  10. goland 文件头注释

    打开GoLand的setting选项 依次选择Editor,CodeStyle ,File and Code Templates ,Go File 根据自己需要添加即可 /* @Time : ${DA ...