hadoop中常用的hdfs代码操作
一:向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件:
- package hadoopTest;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.*;
- import java.io.*;
- public class HDFSApi {
- /**
- * 判断路径是否存在
- */
- public static boolean test(Configuration conf, String path) throws IOException {
- FileSystem fs = FileSystem.get(conf);
- return fs.exists(new Path(path));
- }
- /**
- * 复制文件到指定路径
- * 若路径已存在,则进行覆盖
- */
- public static void copyFromLocalFile(Configuration conf, String localFilePath, String remoteFilePath) throws IOException {
- FileSystem fs = FileSystem.get(conf);
- Path localPath = new Path(localFilePath);
- Path remotePath = new Path(remoteFilePath);
- /* fs.copyFromLocalFile 第一个参数表示是否删除源文件,第二个参数表示是否覆盖 */
- fs.copyFromLocalFile(false, true, localPath, remotePath);
- fs.close();
- }
- /**
- * 追加文件内容
- */
- public static void appendToFile(Configuration conf, String localFilePath, String remoteFilePath) throws IOException {
- FileSystem fs = FileSystem.get(conf);
- Path remotePath = new Path(remoteFilePath);
- /* 创建一个文件读入流 */
- FileInputStream in = new FileInputStream(localFilePath);
- /* 创建一个文件输出流,输出的内容将追加到文件末尾 */
- FSDataOutputStream out = fs.append(remotePath);
- /* 读写文件内容 */
- byte[] data = new byte[1024];
- int read = -1;
- while ( (read = in.read(data)) > 0 ) {
- out.write(data, 0, read);
- }
- out.close();
- in.close();
- fs.close();
- }
- /**
- * 主函数
- */
- public static void main(String[] args) {
- Configuration conf = new Configuration();
- conf.set("fs.default.name","hdfs://localhost:9000");
- String localFilePath = "/home/flyuz/text.txt"; // 本地路径
- String remoteFilePath = "/text.txt"; // HDFS路径
- String choice = "append"; // 若文件存在则追加到文件末尾
- // String choice = "overwrite"; // 若文件存在则覆盖
- try {
- /* 判断文件是否存在 */
- Boolean fileExists = false;
- if (HDFSApi.test(conf, remoteFilePath)) {
- fileExists = true;
- System.out.println(remoteFilePath + " 已存在.");
- } else {
- System.out.println(remoteFilePath + " 不存在.");
- }
- /* 进行处理 */
- if ( !fileExists) { // 文件不存在,则上传
- HDFSApi.copyFromLocalFile(conf, localFilePath, remoteFilePath);
- System.out.println(localFilePath + " 已上传至 " + remoteFilePath);
- } else if ( choice.equals("overwrite") ) { // 选择覆盖
- HDFSApi.copyFromLocalFile(conf, localFilePath, remoteFilePath);
- System.out.println(localFilePath + " 已覆盖 " + remoteFilePath);
- } else if ( choice.equals("append") ) { // 选择追加
- HDFSApi.appendToFile(conf, localFilePath, remoteFilePath);
- System.out.println(localFilePath + " 已追加至 " + remoteFilePath);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
追加或覆盖
二:从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名;
- package hadoopTest;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.*;
- import java.io.*;
- public class HDFSApi {
- /**
- * 下载文件到本地 判断本地路径是否已存在,若已存在,则自动进行重命名
- */
- public static void copyToLocal(Configuration conf, String remoteFilePath, String localFilePath) throws IOException {
- FileSystem fs = FileSystem.get(conf);
- Path remotePath = new Path(remoteFilePath);
- File f = new File(localFilePath);
- /* 如果文件名存在,自动重命名(在文件名后面加上 _0, _1 ...) */
- if (f.exists()) {
- System.out.println(localFilePath + " 已存在.");
- Integer i = 0;
- while (true) {
- f = new File(localFilePath + "_" + i.toString());
- if (!f.exists()) {
- localFilePath = localFilePath + "_" + i.toString();
- break;
- }
- }
- System.out.println("将重新命名为: " + localFilePath);
- }
- // 下载文件到本地
- Path localPath = new Path(localFilePath);
- fs.copyToLocalFile(remotePath, localPath);
- fs.close();
- }
- /**
- * 主函数
- */
- public static void main(String[] args) {
- Configuration conf = new Configuration();
- conf.set("fs.default.name", "hdfs://localhost:9000");
- String localFilePath = "/home/flyuz/text.txt"; // 本地路径
- String remoteFilePath = "/text.txt"; // HDFS路径
- try {
- HDFSApi.copyToLocal(conf, remoteFilePath, localFilePath);
- System.out.println("下载完成");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
下载文件
三:将HDFS中指定文件的内容输出到终端中;
- package hadoopTest;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.*;
- import java.io.*;
- public class HDFSApi {
- /**
- * 读取文件内容
- */
- public static void cat(Configuration conf, String remoteFilePath) throws IOException {
- FileSystem fs = FileSystem.get(conf);
- Path remotePath = new Path(remoteFilePath);
- FSDataInputStream in = fs.open(remotePath);
- BufferedReader d = new BufferedReader(new InputStreamReader(in));
- String line = null;
- while ((line = d.readLine()) != null) {
- System.out.println(line);
- }
- d.close();
- in.close();
- fs.close();
- }
- /**
- * 主函数
- */
- public static void main(String[] args) {
- Configuration conf = new Configuration();
- conf.set("fs.default.name", "hdfs://localhost:9000");
- String remoteFilePath = "/text.txt"; // HDFS路径
- try {
- System.out.println("读取文件: " + remoteFilePath);
- HDFSApi.cat(conf, remoteFilePath);
- System.out.println("\n读取完成");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
输出到终端
四:显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息;
- package hadoopTest;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.*;
- import java.io.*;
- import java.text.SimpleDateFormat;
- public class HDFSApi {
- /**
- * 显示指定文件的信息
- */
- public static void ls(Configuration conf, String remoteFilePath) throws IOException {
- FileSystem fs = FileSystem.get(conf);
- Path remotePath = new Path(remoteFilePath);
- FileStatus[] fileStatuses = fs.listStatus(remotePath);
- for (FileStatus s : fileStatuses) {
- System.out.println("路径: " + s.getPath().toString());
- System.out.println("权限: " + s.getPermission().toString());
- System.out.println("大小: " + s.getLen());
- /* 返回的是时间戳,转化为时间日期格式 */
- Long timeStamp = s.getModificationTime();
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String date = format.format(timeStamp);
- System.out.println("时间: " + date);
- }
- fs.close();
- }
- /**
- * 主函数
- */
- public static void main(String[] args) {
- Configuration conf = new Configuration();
- conf.set("fs.default.name", "hdfs://localhost:9000");
- String remoteFilePath = "/text.txt"; // HDFS路径
- try {
- System.out.println("读取文件信息: " + remoteFilePath);
- HDFSApi.ls(conf, remoteFilePath);
- System.out.println("\n读取完成");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
ls-l
hadoop中常用的hdfs代码操作的更多相关文章
- Java中常用的设计模式代码与理解
Java中常用的设计模式代码与理解 一.单例模式 1.饿汉式 (太饿了,类加载的时候就创建实例) /** * 饿汉式单例模式 */ public class HungrySingleInstance ...
- Hadoop中常用的InputFormat、OutputFormat(转)
Hadoop中的Map Reduce框架依赖InputFormat提供数据,依赖OutputFormat输出数据,每一个Map Reduce程序都离不开它们.Hadoop提供了一系列InputForm ...
- 【Hadoop】Hadoop 中 RPC框架原理、代码示例
0.内容 1.hadoop中的RPC框架封装思想 2.Hadoop RPC 实现方法 3.服务调用动态转发和负载均衡的实现思考 4.协议代码: package com.ares.hadoop.rpc; ...
- SELECT中常用的子查询操作
MySQL中的子查询 是在MySQL中经常使用到的一个操作,不仅仅是用在DQL语句中,在DDL语句.DML语句中也都会常用到子查询. 子查询的定义: 子查询是将一个查询语句嵌套在另一个查询语句中: 在 ...
- 使用配置hadoop中常用的Linux(ubuntu)命令
生成key: $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized ...
- 总结工作中常用的PHP代码
[目录] ◆PHP常用的代码 ◆HTML常用代码 [值传递 和 引用传递] [单例模式] [魔术常量] [代码调试(自定义一个简单的debug函数)] [thinkphp多表查询] [获取客户端IP地 ...
- Java中常用到的文件操作那些事(一)——替换doc文档模板,生成真实合同案例
工作中,我们时常会遇到一些操作文件的操作,比如在线生成合同模板,上传/下载/解析Excel,doc文档转为pdf等操作.本文就已工作中遇到的在线生成合同为例,简要地介绍一种文档替换写法. 本文目的:给 ...
- java程序中中常用到的linux操作
1.解压命令 tar -zxvf filename.tar.gz 其中zxvf含义分别如下 z: gzip 压缩格式 x: extract 解压 v: verbose 详细信息 2.lin ...
- Java中常用到的文件操作那些事(二)——使用POI解析Excel的两种常用方式对比
最近生产环境有个老项目一直内存报警,不时的还出现内存泄漏,导致需要重启服务器,已经严重影响正常服务了.获取生成dump文件后,使用MAT工具进行分析,发现是其中有个Excel文件上传功能时,经常会导致 ...
随机推荐
- 如何成为java架构师(转载)
链接:https://www.zhihu.com/question/29031276/answer/54631312 来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1 ...
- U-boot分析与移植(3)----U-boot stage2分析
一来到void start_armboot (void)函数,马上出现两个很重要的数据结构gd_t和bd_t 1.gd_t : global data数据结构定义,位于文件 include/asm-a ...
- Struts2处理逻辑的方式
1.可以统一写一个action 对应方法名处理不同逻辑 2.也可以分别写Action 分别处理不同的逻辑
- Spring使用标签注解来简化xml书写
一.步骤 在配置文件中,引入context命名空间 <beans xmlns="http://www.springframework.org/schema/beans" xm ...
- PHP数据结构之一:PHP数据结构基本概念—数据结构
学习任何一种技术都应该先清楚它的基本概念,这是学习任何知识的起点!本文是讲述数据结构的基本概念,适合对数据结构已经有一定基础的程序员,更是适合想要学习数据结构的code一族!让我们开始PHP数据结构的 ...
- xcode中的预定义宏
[xcode中的预定义宏] 1.SRCROOT,是定义本target的proj的路径. 2.OBJROOT,对象文件根路径,对象文件(即obj文件)就是中间的临时文件.中间文件输出目录的名字以“pro ...
- 2-2+CPU多级缓存-乱序执行优化
- Docker学习之路(三)Docker网络详解
1. Docker的4种网络模式 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式,使用--net=host ...
- pipeline 对部分特征进行处理
http://scikit-learn.org/stable/auto_examples/preprocessing/plot_function_transformer.html#sphx-glr-a ...
- CF 1091E New Year and the Factorisation Collaboration
昨晚Good Bye 2018D题没做出来,车翻大了…… 官方题解 传送门 初赛知识:一个无向图所有顶点度数之和为偶数.然而这东西还有一个高端的名字:Handshaking lemma 但是 ...