一:向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件:

  1. package hadoopTest;
  2.  
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.fs.*;
  5. import java.io.*;
  6.  
  7. public class HDFSApi {
  8. /**
  9. * 判断路径是否存在
  10. */
  11. public static boolean test(Configuration conf, String path) throws IOException {
  12. FileSystem fs = FileSystem.get(conf);
  13. return fs.exists(new Path(path));
  14. }
  15.  
  16. /**
  17. * 复制文件到指定路径
  18. * 若路径已存在,则进行覆盖
  19. */
  20. public static void copyFromLocalFile(Configuration conf, String localFilePath, String remoteFilePath) throws IOException {
  21. FileSystem fs = FileSystem.get(conf);
  22. Path localPath = new Path(localFilePath);
  23. Path remotePath = new Path(remoteFilePath);
  24. /* fs.copyFromLocalFile 第一个参数表示是否删除源文件,第二个参数表示是否覆盖 */
  25. fs.copyFromLocalFile(false, true, localPath, remotePath);
  26. fs.close();
  27. }
  28.  
  29. /**
  30. * 追加文件内容
  31. */
  32. public static void appendToFile(Configuration conf, String localFilePath, String remoteFilePath) throws IOException {
  33. FileSystem fs = FileSystem.get(conf);
  34. Path remotePath = new Path(remoteFilePath);
  35. /* 创建一个文件读入流 */
  36. FileInputStream in = new FileInputStream(localFilePath);
  37. /* 创建一个文件输出流,输出的内容将追加到文件末尾 */
  38. FSDataOutputStream out = fs.append(remotePath);
  39. /* 读写文件内容 */
  40. byte[] data = new byte[1024];
  41. int read = -1;
  42. while ( (read = in.read(data)) > 0 ) {
  43. out.write(data, 0, read);
  44. }
  45. out.close();
  46. in.close();
  47. fs.close();
  48. }
  49. /**
  50. * 主函数
  51. */
  52. public static void main(String[] args) {
  53. Configuration conf = new Configuration();
  54. conf.set("fs.default.name","hdfs://localhost:9000");
  55. String localFilePath = "/home/flyuz/text.txt"; // 本地路径
  56. String remoteFilePath = "/text.txt"; // HDFS路径
  57. String choice = "append"; // 若文件存在则追加到文件末尾
  58. // String choice = "overwrite"; // 若文件存在则覆盖
  59. try {
  60. /* 判断文件是否存在 */
  61. Boolean fileExists = false;
  62. if (HDFSApi.test(conf, remoteFilePath)) {
  63. fileExists = true;
  64. System.out.println(remoteFilePath + " 已存在.");
  65. } else {
  66. System.out.println(remoteFilePath + " 不存在.");
  67. }
  68. /* 进行处理 */
  69. if ( !fileExists) { // 文件不存在,则上传
  70. HDFSApi.copyFromLocalFile(conf, localFilePath, remoteFilePath);
  71. System.out.println(localFilePath + " 已上传至 " + remoteFilePath);
  72. } else if ( choice.equals("overwrite") ) { // 选择覆盖
  73. HDFSApi.copyFromLocalFile(conf, localFilePath, remoteFilePath);
  74. System.out.println(localFilePath + " 已覆盖 " + remoteFilePath);
  75. } else if ( choice.equals("append") ) { // 选择追加
  76. HDFSApi.appendToFile(conf, localFilePath, remoteFilePath);
  77. System.out.println(localFilePath + " 已追加至 " + remoteFilePath);
  78. }
  79. } catch (Exception e) {
  80. e.printStackTrace();
  81. }
  82. }
  83. }

追加或覆盖

二:从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名;

  1. package hadoopTest;
  2.  
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.fs.*;
  5. import java.io.*;
  6.  
  7. public class HDFSApi {
  8. /**
  9. * 下载文件到本地 判断本地路径是否已存在,若已存在,则自动进行重命名
  10. */
  11. public static void copyToLocal(Configuration conf, String remoteFilePath, String localFilePath) throws IOException {
  12. FileSystem fs = FileSystem.get(conf);
  13. Path remotePath = new Path(remoteFilePath);
  14. File f = new File(localFilePath);
  15. /* 如果文件名存在,自动重命名(在文件名后面加上 _0, _1 ...) */
  16. if (f.exists()) {
  17. System.out.println(localFilePath + " 已存在.");
  18. Integer i = 0;
  19. while (true) {
  20. f = new File(localFilePath + "_" + i.toString());
  21. if (!f.exists()) {
  22. localFilePath = localFilePath + "_" + i.toString();
  23. break;
  24. }
  25. }
  26. System.out.println("将重新命名为: " + localFilePath);
  27. }
  28. // 下载文件到本地
  29. Path localPath = new Path(localFilePath);
  30. fs.copyToLocalFile(remotePath, localPath);
  31. fs.close();
  32. }
  33.  
  34. /**
  35. * 主函数
  36. */
  37. public static void main(String[] args) {
  38. Configuration conf = new Configuration();
  39. conf.set("fs.default.name", "hdfs://localhost:9000");
  40. String localFilePath = "/home/flyuz/text.txt"; // 本地路径
  41. String remoteFilePath = "/text.txt"; // HDFS路径
  42. try {
  43. HDFSApi.copyToLocal(conf, remoteFilePath, localFilePath);
  44. System.out.println("下载完成");
  45. } catch (Exception e) {
  46. e.printStackTrace();
  47. }
  48. }
  49. }

下载文件

三:将HDFS中指定文件的内容输出到终端中;

  1. package hadoopTest;
  2.  
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.fs.*;
  5. import java.io.*;
  6.  
  7. public class HDFSApi {
  8. /**
  9. * 读取文件内容
  10. */
  11. public static void cat(Configuration conf, String remoteFilePath) throws IOException {
  12. FileSystem fs = FileSystem.get(conf);
  13. Path remotePath = new Path(remoteFilePath);
  14. FSDataInputStream in = fs.open(remotePath);
  15. BufferedReader d = new BufferedReader(new InputStreamReader(in));
  16. String line = null;
  17. while ((line = d.readLine()) != null) {
  18. System.out.println(line);
  19. }
  20. d.close();
  21. in.close();
  22. fs.close();
  23. }
  24.  
  25. /**
  26. * 主函数
  27. */
  28. public static void main(String[] args) {
  29. Configuration conf = new Configuration();
  30. conf.set("fs.default.name", "hdfs://localhost:9000");
  31. String remoteFilePath = "/text.txt"; // HDFS路径
  32.  
  33. try {
  34. System.out.println("读取文件: " + remoteFilePath);
  35. HDFSApi.cat(conf, remoteFilePath);
  36. System.out.println("\n读取完成");
  37. } catch (Exception e) {
  38. e.printStackTrace();
  39. }
  40. }
  41. }

输出到终端

四:显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息;

  1. package hadoopTest;
  2.  
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.fs.*;
  5. import java.io.*;
  6. import java.text.SimpleDateFormat;
  7.  
  8. public class HDFSApi {
  9. /**
  10. * 显示指定文件的信息
  11. */
  12. public static void ls(Configuration conf, String remoteFilePath) throws IOException {
  13. FileSystem fs = FileSystem.get(conf);
  14. Path remotePath = new Path(remoteFilePath);
  15. FileStatus[] fileStatuses = fs.listStatus(remotePath);
  16. for (FileStatus s : fileStatuses) {
  17. System.out.println("路径: " + s.getPath().toString());
  18. System.out.println("权限: " + s.getPermission().toString());
  19. System.out.println("大小: " + s.getLen());
  20. /* 返回的是时间戳,转化为时间日期格式 */
  21. Long timeStamp = s.getModificationTime();
  22. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  23. String date = format.format(timeStamp);
  24. System.out.println("时间: " + date);
  25. }
  26. fs.close();
  27. }
  28.  
  29. /**
  30. * 主函数
  31. */
  32. public static void main(String[] args) {
  33. Configuration conf = new Configuration();
  34. conf.set("fs.default.name", "hdfs://localhost:9000");
  35. String remoteFilePath = "/text.txt"; // HDFS路径
  36. try {
  37. System.out.println("读取文件信息: " + remoteFilePath);
  38. HDFSApi.ls(conf, remoteFilePath);
  39. System.out.println("\n读取完成");
  40. } catch (Exception e) {
  41. e.printStackTrace();
  42. }
  43. }
  44. }

ls-l

hadoop中常用的hdfs代码操作的更多相关文章

  1. Java中常用的设计模式代码与理解

    Java中常用的设计模式代码与理解 一.单例模式 1.饿汉式 (太饿了,类加载的时候就创建实例) /** * 饿汉式单例模式 */ public class HungrySingleInstance ...

  2. Hadoop中常用的InputFormat、OutputFormat(转)

    Hadoop中的Map Reduce框架依赖InputFormat提供数据,依赖OutputFormat输出数据,每一个Map Reduce程序都离不开它们.Hadoop提供了一系列InputForm ...

  3. 【Hadoop】Hadoop 中 RPC框架原理、代码示例

    0.内容 1.hadoop中的RPC框架封装思想 2.Hadoop RPC 实现方法 3.服务调用动态转发和负载均衡的实现思考 4.协议代码: package com.ares.hadoop.rpc; ...

  4. SELECT中常用的子查询操作

    MySQL中的子查询 是在MySQL中经常使用到的一个操作,不仅仅是用在DQL语句中,在DDL语句.DML语句中也都会常用到子查询. 子查询的定义: 子查询是将一个查询语句嵌套在另一个查询语句中: 在 ...

  5. 使用配置hadoop中常用的Linux(ubuntu)命令

    生成key: $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized ...

  6. 总结工作中常用的PHP代码

    [目录] ◆PHP常用的代码 ◆HTML常用代码 [值传递 和 引用传递] [单例模式] [魔术常量] [代码调试(自定义一个简单的debug函数)] [thinkphp多表查询] [获取客户端IP地 ...

  7. Java中常用到的文件操作那些事(一)——替换doc文档模板,生成真实合同案例

    工作中,我们时常会遇到一些操作文件的操作,比如在线生成合同模板,上传/下载/解析Excel,doc文档转为pdf等操作.本文就已工作中遇到的在线生成合同为例,简要地介绍一种文档替换写法. 本文目的:给 ...

  8. java程序中中常用到的linux操作

    1.解压命令 tar -zxvf filename.tar.gz 其中zxvf含义分别如下 z: gzip      压缩格式 x: extract  解压 v: verbose 详细信息 2.lin ...

  9. Java中常用到的文件操作那些事(二)——使用POI解析Excel的两种常用方式对比

    最近生产环境有个老项目一直内存报警,不时的还出现内存泄漏,导致需要重启服务器,已经严重影响正常服务了.获取生成dump文件后,使用MAT工具进行分析,发现是其中有个Excel文件上传功能时,经常会导致 ...

随机推荐

  1. 如何成为java架构师(转载)

    链接:https://www.zhihu.com/question/29031276/answer/54631312 来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1 ...

  2. U-boot分析与移植(3)----U-boot stage2分析

    一来到void start_armboot (void)函数,马上出现两个很重要的数据结构gd_t和bd_t 1.gd_t : global data数据结构定义,位于文件 include/asm-a ...

  3. Struts2处理逻辑的方式

    1.可以统一写一个action 对应方法名处理不同逻辑 2.也可以分别写Action 分别处理不同的逻辑

  4. Spring使用标签注解来简化xml书写

    一.步骤 在配置文件中,引入context命名空间 <beans xmlns="http://www.springframework.org/schema/beans" xm ...

  5. PHP数据结构之一:PHP数据结构基本概念—数据结构

    学习任何一种技术都应该先清楚它的基本概念,这是学习任何知识的起点!本文是讲述数据结构的基本概念,适合对数据结构已经有一定基础的程序员,更是适合想要学习数据结构的code一族!让我们开始PHP数据结构的 ...

  6. xcode中的预定义宏

    [xcode中的预定义宏] 1.SRCROOT,是定义本target的proj的路径. 2.OBJROOT,对象文件根路径,对象文件(即obj文件)就是中间的临时文件.中间文件输出目录的名字以“pro ...

  7. 2-2+CPU多级缓存-乱序执行优化

  8. Docker学习之路(三)Docker网络详解

    1. Docker的4种网络模式 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式,使用--net=host ...

  9. pipeline 对部分特征进行处理

    http://scikit-learn.org/stable/auto_examples/preprocessing/plot_function_transformer.html#sphx-glr-a ...

  10. CF 1091E New Year and the Factorisation Collaboration

    昨晚Good Bye 2018D题没做出来,车翻大了…… 官方题解      传送门 初赛知识:一个无向图所有顶点度数之和为偶数.然而这东西还有一个高端的名字:Handshaking lemma 但是 ...