hadoop中常用的hdfs代码操作

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

追加或覆盖

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

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

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

原文地址:https://www.cnblogs.com/flyuz/p/10075644.html

时间: 2024-12-11 06:54:43

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

Hadoop学习笔记0002——HDFS文件操作

  说明:Hadoop之HDFS文件操作常有两种方式,命令行方式和JavaAPI方式. 方式一:命令行方式 Hadoop文件操作命令形式为:hadoop fs -cmd <args> 说明:cmd是具体的文件操作命令,<args>是一组数目可变的参数. Hadoop最常用的文件操作命令,包括添加文件和目录.获取文件.删除文件等. 1 添加文件和目录 HDFS有一个默认工作目录/usr/$USER,其中$USER是你的登录用户名,作者的用户名是root.该目录不能自动创建,需要执行m

Hadoop中常用的InputFormat、OutputFormat(转)

Hadoop中的Map Reduce框架依赖InputFormat提供数据,依赖OutputFormat输出数据,每一个Map Reduce程序都离不开它们.Hadoop提供了一系列InputFormat和OutputFormat方便开发,本文介绍几种常用的: TextInputFormat 作为默认的文件输入格式,用于读取纯文本文件,文件被分为一系列以LF或者CR结束的行,key是每一行的位置偏移量,是LongWritable类型的,value是每一行的内容,为Text类型. KeyValue

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

生成key: $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys -t   密钥类型可以用 -t 选项指定.如果没有指定则默认生成用于SSH-2的RSA密钥. -f filename             指定密钥文件名. 来源:http://www.aboutyun.com/thread-6487-1-1.html 远程登录执行shell命令key ssh远

Hadoop中常用的一些命名

 hadoop fsck / -files -blocks -locations DEPRECATED: Use of this script to execute hdfs command is deprecated.Instead use the hdfs command for it. 15/02/05 05:20:55 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...

Foundation frame 中常用类的代码

1 #import <Foundation/Foundation.h> 2 3 int main(int argc, const char * argv[]) 4 { 5 @autoreleasepool 6 { 7 #pragma mark - Test 8 // int a = 10; 9 // double b = 7.7; 10 // float c = 5.7; 11 // 12 // NSNumber *numberInt = [NSNumber numberWithInt:a];

网站建设中常用的JS代码段落

1.屏蔽左右键 这个不介绍了. <script language="JavaScript"> document.oncontextmenu=new Function("event.returnValue=false;"); document.onselectstart=new Function("event.returnValue=false;"); </script> 2.jquery应用检测 什么意思呢?就是在CDN无

Hadoop中最不容错过的压缩知识

随着大数据时代的来临,数据体量越来越大,处理这些数据会越来越受到网络IO的限制,为了尽可能多的处理更多的数据我们必须使用压缩.那么压缩在Hadoop里面是不是所有格式都适用呢?它都有哪些性能呢? 压缩在sqoop里面可以做,在hive和impala里面也可以做.那么什么情况下我们会用压缩呢?通常在数据量非常大,我们通过压缩去减小数据量,从而达到将来去使用数据的时候,减少数据传输IO的情况下去使用.压缩对于性能的提升以及存储效率的提高也有作用. 一.数据压缩 每种文件格式都支持压缩,压缩将减少磁盘

JS中的常用的代码操作

本文件介绍常用的js代码的DOM操作.CSS操作.对象(Object对象.Array对象.Number对象.String对象.Math对象.JSON对象和Console对象)操作说明. 一.DOM树的节点 DOM节点分为三大类: 元素节点(标签节点).属性节点和文本节点. 属性节点和文本节点都属于元素节点的子节点. 因此操作时,需先选中元素节点,再修改属性和文本. [查看元素节点] 1. 使用getElement系列方法: 具体的HTML代码如下图: //通过ID来查看元素属性 var li =

介绍hadoop中的hadoop和hdfs命令

有些hive安装文档提到了hdfs dfs -mkdir ,也就是说hdfs也是可以用的,但在2.8.0中已经不那么处理了,之所以还可以使用,是为了向下兼容. 本文简要介绍一下有关的命令,以便对hadoop的命令有一个大概的影响,并在想使用的时候能够知道从哪里可以获得帮助. 概述 在$HADOOP_HOME/bin下可以看到hadoop和hdfs的脚本. hdfs的相当一部分的功能可以使用hdoop来替代(目前),但hdfs有自己的一些独有的功能.hadoop主要面向更广泛复杂的功能. 本文介绍