hadoop集群搭建参考:https://www.cnblogs.com/asker009/p/9126354.html

1、创建一个maven工程,添加依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6.  
  7. <groupId>com.home</groupId>
  8. <artifactId>FileSystemCat</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10.  
  11. <properties>
  12. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  13. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  14. <java.version>1.8</java.version>
  15.  
  16. <maven.compiler.source>1.8</maven.compiler.source>
  17. <maven.compiler.target>1.8</maven.compiler.target>
  18. </properties>
  19.  
  20. <dependencies>
  21. <dependency>
  22. <groupId>org.apache.hadoop</groupId>
  23. <artifactId>hadoop-client</artifactId>
  24. <version>3.1.0</version>
  25. </dependency>
  26. </dependencies>
  27. </project>

2、实现cat、copy、filestatus等基本代码,代码可以在windows的IDE环境中正常运行(参考上篇在windows里调试hadoop),也可以打成jar包放入远程hadoop集群上执行。

如果对hadoop的端口不熟悉,在测试环境可以关闭hadoop集群上的防火墙。

  1. import org.apache.commons.lang3.StringUtils;
  2. import org.apache.hadoop.conf.Configuration;
  3. import org.apache.hadoop.fs.*;
  4. import org.apache.hadoop.io.IOUtils;
  5.  
  6. import java.io.*;
  7. import java.net.URI;
  8. import java.time.Instant;
  9. import java.time.LocalDateTime;
  10. import java.time.ZoneId;
  11.  
  12. /**
  13. * @Author: xu.dm
  14. * @Date: 2019/1/31 14:39
  15. * @Description:
  16. */
  17. public class FileSystemCat {
  18.  
  19. private static String HDFSUri = "hdfs://bigdata-senior01.home.com:9000";
  20.  
  21. public static void main(String[] args) throws Exception {
  22. long startTime = System.currentTimeMillis();
  23. //文本文件cat
  24. // fileCat(args);
  25.  
  26. //文件copy
  27. fileCopyWithProgress(args);
  28.  
  29. //file status
  30. // fileStatus(args);
  31.  
  32. // file status pattern
  33. // filePattern(args);
  34.  
  35. long endTime = System.currentTimeMillis();
  36. long timeSpan = endTime - startTime;
  37. System.out.println("耗费时间:" + timeSpan + "毫秒");
  38. }
  39.  
  40. private static FileSystem getFileSystem() {
  41. Configuration conf = new Configuration();
  42.  
  43. //文件系统
  44. FileSystem fs = null;
  45. String hdfsUri = HDFSUri;
  46. if (StringUtils.isBlank(hdfsUri)) {
  47. //返回默认文件系统,如果在hadoop集群下运行,使用此种方法可直接获取默认文件系统;
  48. try {
  49. fs = FileSystem.get(conf);
  50. } catch (IOException e) {
  51. e.printStackTrace();
  52. }
  53. } else {
  54. //返回指定的文件系统,如果在本地测试,需要此种方法获取文件系统;
  55. try {
  56. URI uri = new URI(hdfsUri.trim());
  57. fs = FileSystem.get(uri, conf);
  58. } catch (Exception e) {
  59. e.printStackTrace();
  60. }
  61. }
  62. return fs;
  63. }
  64.  
  65. ///hadoop输出文本文件内容
  66. private static void fileCat(String[] args) throws Exception {
  67. String uri = args[0];
  68. Configuration conf = new Configuration();
  69. // conf.set("fs.hdfs.impl",org.apache.hadoop.hdfs.DistributedFileSystem.class.getName());
  70. conf.set("fs.defaultFS","hdfs://bigdata-senior01.home.com:9000");
  71. FileSystem fs = FileSystem.get(URI.create(uri), conf);
  72. // InputStream in = null;
  73. // FSDataInputStream继承 java.io.DataInputStream,支持随机访问
  74. FSDataInputStream in = null;
  75. try {
  76. in = fs.open(new Path(uri));
  77. IOUtils.copyBytes(in, System.out, 4096, false);
  78. in.seek(0);
  79. IOUtils.copyBytes(in, System.out, 4096, false);
  80. } finally {
  81. IOUtils.closeStream(in);
  82. }
  83. }
  84.  
  85. //将本地文件拷贝到hadoop文件系统上
  86. //需要开通datanode用于数据传输端口:9866
  87. private static void fileCopyWithProgress(String[] args) throws Exception {
  88. String locaSrc = args[0];
  89. String dst = args[1];
  90.  
  91. //从windows环境提交的时候需要设置hadoop用户名
  92. //在linux的其他用户环境下估计也需要
  93. System.setProperty("HADOOP_USER_NAME","hadoop");
  94.  
  95. Configuration conf = new Configuration();
  96. // conf.set("fs.DefaultFs", "hdfs://bigdata-senior01.home.com:9000");
  97.  
  98. //因为涉及到两个文件系统的数据传输,如果dst不是全路径的话(带不带hdfs的头)用这种方式取到的还是本地文件系统
  99. //如果不涉及两个文件系统,dst写短路径是没问题的
  100. // FileSystem fs = FileSystem.get(URI.create(dst), conf);
  101.  
  102. FileSystem fs = FileSystem.get(URI.create(HDFSUri),conf);
  103.  
  104. // fs.copyFromLocalFile(new Path(locaSrc),new Path(dst));
  105. // fs.close();
  106. // System.out.println("copyFromLocalFile...done");
  107.  
  108. InputStream in = new BufferedInputStream(new FileInputStream(locaSrc));
  109.  
  110. FSDataOutputStream out = null;
  111.  
  112. out = fs.create(new Path(dst), () -> System.out.print("."));
  113.  
  114. IOUtils.copyBytes(in, out, 4096, true);
  115. }
  116.  
  117. //查找文件,递归列出给定目录或者文件的属性
  118. private static void fileStatus(String[] args) throws IOException {
  119. Configuration conf = new Configuration();
  120. conf.set("fs.defaultFS", "hdfs://bigdata-senior01.home.com:9000");
  121. Path file = new Path(args[0]);
  122. FileSystem fs = null;
  123. try {
  124. // fs = FileSystem.get(URI.create(args[0]),conf);
  125. fs = FileSystem.get(conf);
  126.  
  127. // fs = getFileSystem();
  128.  
  129. //对单个文件或目录
  130. // FileStatus fileStatus = fs.getFileStatus(file);
  131.  
  132. //对单个文件或目录下所有文件和目录
  133. FileStatus[] fileStatuses = fs.listStatus(file);
  134.  
  135. //FileUtil封装了很多文件功能
  136. //FileStatus[] 和 Path[]转换
  137. // Path[] files = FileUtil.stat2Paths(fileStatuses);
  138.  
  139. for (FileStatus fileStatus : fileStatuses) {
  140. System.out.println("-------------->");
  141. System.out.println("是否目录:" + fileStatus.isDirectory());
  142. System.out.println("path:" + fileStatus.getPath().toString());
  143. System.out.println("length:" + fileStatus.getLen());
  144. System.out.println("accessTime:" + LocalDateTime.ofInstant(Instant.ofEpochMilli(fileStatus.getAccessTime()), ZoneId.systemDefault()));
  145. System.out.println("permission:" + fileStatus.getPermission().toString());
  146. //递归查找子目录
  147. if (fileStatus.isDirectory()) {
  148. FileSystemCat.fileStatus(new String[]{fileStatus.getPath().toString()});
  149. }
  150. }
  151. } finally {
  152. if (fs != null)
  153. fs.close();
  154. }
  155. }
  156.  
  157. //查找文件,通配模式,不能直接用于递归,应该作为递归的最外层,不进入递归
  158. private static void filePattern(String[] args) throws IOException {
  159. Configuration conf = new Configuration();
  160. conf.set("fs.defaultFS", "hdfs://bigdata-senior01.home.com:9000");
  161. FileSystem fs = null;
  162. try {
  163. fs = FileSystem.get(conf);
  164. //输入参数大于1,第二个参数作为排除参数
  165. //例如:hadoop jar FileSystemCat.jar /demo ^.*/demo[1-3]$ 排除/demo1,/demo2,/demo3
  166. //例如:hadoop jar FileSystemCat.jar /demo/wc* ^.*/demo/wc3.*$ 排除/demo下wc3开头所有文件
  167. FileStatus[] fileStatuses = null;
  168. if (args.length > 1) {
  169. System.out.println("过滤路径:" + args[1]);
  170. fileStatuses = fs.globStatus(new Path(args[0]), new RegexExcludePathFilter(args[1]));
  171. } else {
  172. fileStatuses = fs.globStatus(new Path(args[0]));
  173. }
  174.  
  175. for (FileStatus fileStatus : fileStatuses) {
  176. System.out.println("-------------->");
  177. System.out.println("是否目录:" + fileStatus.isDirectory());
  178. System.out.println("path:" + fileStatus.getPath().toString());
  179. System.out.println("length:" + fileStatus.getLen());
  180. System.out.println("modificationTime:" + LocalDateTime.ofInstant(Instant.ofEpochMilli(fileStatus.getModificationTime()), ZoneId.systemDefault()));
  181. System.out.println("permission:" + fileStatus.getPermission().toString());
  182. if (fileStatus.isDirectory()) {
  183. FileSystemCat.fileStatus(new String[]{fileStatus.getPath().toString()});
  184. }
  185. }
  186. } finally {
  187. if (fs != null)
  188. fs.close();
  189. }
  190. }
  191.  
  192. }
  1. import org.apache.hadoop.fs.Path;
  2. import org.apache.hadoop.fs.PathFilter;
  3.  
  4. /**
  5. * @Author: xu.dm
  6. * @Date: 2019/2/1 13:38
  7. * @Description:
  8. */
  9. public class RegexExcludePathFilter implements PathFilter {
  10.  
  11. private final String regex;
  12.  
  13. public RegexExcludePathFilter(String regex) {
  14. this.regex = regex;
  15. }
  16.  
  17. @Override
  18. public boolean accept(Path path) {
  19. return !path.toString().matches(this.regex);
  20. }
  21. }

hadoop 编码实现文件传输、查看等基本文件控制的更多相关文章

  1. java文件传输之文件编码和File类的使用

    ---恢复内容开始--- 我们知道,在用户端和服务端之间存在一个数据传输的问题,例如下载个电影.上传个照片.发一条讯息.在这里我们 就说一下文件的传输. 1.文件编码 相信大家小时候玩过积木(没玩过也 ...

  2. 在本机eclipse中创建maven项目,查看linux中hadoop下的文件、在本机搭建hadoop环境

    注意 第一次建立maven项目时需要在联网情况下,因为他会自动下载一些东西,不然突然终止 需要手动删除断网前建立的文件 在eclipse里新建maven项目步骤 直接新建maven项目出了错      ...

  3. 在Vim中查看文件编码和文件编码转换

    在Vim中查看文件编码和文件编码转换 风亡小窝 关注  0.2 2016.09.26 22:43* 字数 244 阅读 5663评论 0喜欢 2 在Vim中查看文件编码 :set fileencodi ...

  4. linux下常用文件传输命令 (转)

    因为工作原因,需要经常在不同的服务器见进行文件传输,特别是大文件的传输,因此对linux下不同服务器间数据传输命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp,lftp, ...

  5. 循序渐进Java Socket网络编程(多客户端、信息共享、文件传输)

    目录[-] 一.TCP/IP协议 二.TCP与UDP 三.Socket是什么 四.Java中的Socket 五.基本的Client/Server程序 六.多客户端连接服务器 七.信息共享 八.文件传输 ...

  6. 循序渐进Socket网络编程(多客户端、信息共享、文件传输)

    循序渐进Socket网络编程(多客户端.信息共享.文件传输) 前言:在最近一个即将结束的项目中使用到了Socket编程,用于调用另一系统进行处理并返回数据.故把Socket的基础知识总结梳理一遍. 1 ...

  7. Python 字符编码及其文件操作

    本章节内容导航: 1.字符编码:人识别的语言与机器机器识别的语言转化的媒介. 2.字符与字节:字符占多少个字节,字符串转化 3.文件操作:操作硬盘中的一块区域:读写操作 注:浅拷贝与深拷贝 用法: d ...

  8. TCP协议,UDP,以及TCP通信服务器的文件传输

    TCP通信过程 下图是一次TCP通讯的时序图.TCP连接建立断开.包含大家熟知的三次握手和四次握手. 在这个例子中,首先客户端主动发起连接.发送请求,然后服务器端响应请求,然后客户端主动关闭连接.两条 ...

  9. python tcp黏包和struct模块解决方法,大文件传输方法及MD5校验

    一.TCP协议 粘包现象 和解决方案 黏包现象让我们基于tcp先制作一个远程执行命令的程序(命令ls -l ; lllllll ; pwd)执行远程命令的模块 需要用到模块subprocess sub ...

随机推荐

  1. 深圳Uber优步司机奖励政策(12月28日到1月3日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  2. GDAL库简介以及在Windows下编译过程

    GDAL(Geospatial Data Abstraction Library,地理空间数据抽象库)是一个在X/MIT许可协议下的开源栅格空间数据转换库.官网http://www.gdal.org/ ...

  3. nodejs 事件机制

    node 事件机制   一 三种定时器 NodeJS中有三种类型的定时器:超时时间.时间间隔.即时定时器 1.超时时间:setTimeout(callback,delayMilliSeconds,[a ...

  4. String、StringBuffer、StringBuilder的区别和解析

    1.三个类之间的关系 他们都是通过字符数组来实现的,继承关系 String:字符串常量,不可变类 StringBuffer:字符串变量,可变类,线程安全 StringBuilder:字符串变量,可变类 ...

  5. Qt-第一个QML程序-1-项目工程的建立

    这个小程序是我发的第一个完整的QMl程序,这个程序也会持续的更新,一步一步的完善起来,最后会有一个什么样的结果也是不知道,只是把自己目前掌握的QML相关的东西都慢慢的写进来,积累起来 先展示一下运行结 ...

  6. Selenium自动化测试第一天(上)

    如有任何学习问题,可以添加作者微信:lockingfree 目录 Selenium自动化测试基础 Selenium自动化测试第一天(上) Selenium自动化测试第一天(下) Selenium自动化 ...

  7. 网站端测试常见BUG

    1.翻页 翻页时,没有加载数据为空,第二页数据没有请求 翻页时,重复请求第一页的数据 翻页时,没有图片的内容有时候会引用有图片的内容 2.图片数据为空 图片数据为空时,会保留为空的图片数据位置 3.链 ...

  8. Python 多线程、进程、协程上手体验

    浅谈 Python 多线程.进程.协程上手体验 前言:浅谈 Python 很多人都认为 Python 的多线程是垃圾(GIL 说这锅甩不掉啊~):本章节主要给你体验下 Python 的两个库 Thre ...

  9. hello word!------为什么开通博客以及自我介绍

    来北京已经一年半的日子了,已经完全成功熟练的成为了另一个我,没有了半年前刚来时的那种焦虑.急躁和格格不入. 回想起来那段时间,大概是我人生中非常重要的时期了,去年那个夏天,只身一人背上行囊踏上了北上的 ...

  10. leetcode-帕斯卡三角形

    帕斯卡三角形 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 示例: 输入: 5 输出: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4 ...