HDFS文件系统的操作

package com.bank.utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;

/**
 * HDFS常规操作
 * @author mengyao
 *
 */
public class HDFSUtils {

private final static String DFS_PATH = "hdfs://ns1";
    private final static String USER = "root";
    
    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", DFS_PATH);
        conf.set("dfs.nameservices", "ns1");
        conf.set("dfs.ha.namenodes.ns1", "nn1,nn2");
        conf.set("dfs.namenode.rpc-address.ns1.nn1", "h1:9000");
        conf.set("dfs.namenode.rpc-address.ns1.nn2", "h2:9000");
        conf.set("dfs.client.failover.proxy.provider.ns1", "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider");

FileSystem fs = FileSystem.get(new URI("hdfs://ns1"), conf, USER);
        
        //在HDFS上创建文件夹
        createDir(fs, "/hkd/hongkong");
        
        //删除HDFS上的文件夹或文件,文件夹为true
        deleteFileOrDir(fs, "/hkd");
        
        //上传本地文件到HDFS上,如果文件存在则覆盖
        upload(fs, "D:/data", "/data.dat");
        
        //从HDFS上下载文件到本地
        download(fs, "/cny/data/data", "D:/data");
        
        //删除HDFS上的文件,如果存在
        deleteFile(fs, "/data.dat");
        
        //读取HDFS上指定目录下的所有文件及文件夹信息
        readDfsPath(fs, "/cny");
    }
    
    public static boolean createDir(FileSystem fs, String dfsNewDir){
        boolean status = false;
        try {
            if (fs.exists(new Path(dfsNewDir))) {
                System.err.println(" this dir exist !");
                return status;
            }
            status = fs.mkdirs(new Path(dfsNewDir));
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fs.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        return status;
    }
    
    public static boolean deleteFileOrDir(FileSystem fs, String dfsPath){
        boolean status = false;
        try {
            status = fs.delete(new Path(dfsPath), true);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fs.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        return status;
    }
    
    public static boolean upload(FileSystem fs, String localPath, String dfsPath){
        boolean status = false;
        try {
            FSDataOutputStream out = fs.create(new Path(dfsPath), true);
            BufferedInputStream in = new BufferedInputStream(new FileInputStream(new File(localPath)));
            IOUtils.copyBytes(in, out, 4096, true);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fs.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        return status;
    }
    
    public static boolean download(FileSystem fs, String dfsPath, String localPath){
        boolean status = false;
        try {
            FSDataInputStream in = fs.open(new Path(dfsPath));
            BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(localPath)));
            IOUtils.copyBytes(in, out, 4096, true);
            status = true;
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fs.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        return status;
    }
    
    public static boolean deleteFile(FileSystem fs, String dfsPath){
        boolean status = false;
        try {
            if (fs.exists(new Path(dfsPath))) {
                status = fs.delete(new Path(dfsPath), true);                
            }
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fs.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        return status;
    }
    
    
    public static void readDfsPath(FileSystem fs, String dfsPath){
        try {
            FileStatus[] listStatus = fs.listStatus(new Path(dfsPath));
            for (FileStatus fsStat : listStatus) {
                String isDir = fsStat.isDirectory()?"文件夹":"文件";  
                final String permission = fsStat.getPermission().toString();  
                final short replication = fsStat.getReplication();  
                final long len = fsStat.getLen();  
                final String dateStr = new SimpleDateFormat("yyyy-MM-dd hh:MM:ss").format(new Date(fsStat.getAccessTime()));  
                final String path = fsStat.getPath().toString();  
                System.out.println(isDir+"\t"+permission+"\t"+replication+"\t"+len+"\t"+dateStr+"\t"+path);  
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

时间: 2024-08-08 07:49:18

HDFS文件系统的操作的相关文章

读Hadoop3.2源码,深入了解java调用HDFS的常用操作和HDFS原理

本文将通过一个演示工程来快速上手java调用HDFS的常见操作.接下来以创建文件为例,通过阅读HDFS的源码,一步步展开HDFS相关原理.理论知识的说明. 说明:本文档基于最新版本Hadoop3.2.1 目录 一.java调用HDFS的常见操作 1.1.演示环境搭建 1.2.操作HDFS 1.3.java文件操作常用方法 二.深入了解HDFS写文件的流程和HDFS原理 2.1.Hadoop3.2.1 源码下载及介绍 2.2.文件系统:FileSystem 2.3.HDFS体系结构:namenod

hadoop系列二:HDFS文件系统的命令及JAVA客户端API

转载请在页首明显处注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6391518.html 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6.4 上一篇:hadoop系列一:hadoop集群安装 二:HDFS的shell命令 上一章说完了安装HADOOP集群部分,这一张讲HDFS. 其实基本上操作都是通过JAVA API来操作,所以这里的s

浅谈Hadoop下HDFS文件系统

Hadoop下HDFS文件系统 在这里我们对Hadoop的基本概念,历史功能就不做过多的阐述,重点在对于他的文件系统做一些了解和阐述. HDFS(Hadoop distributed file system)是一个分布式文件系统.具有高容错性(fault-tolerant),使得他能够部署在低廉的硬件上.他可以提供高吞吐率来访问应用程序的数据.HDFS放宽了可移植操作系统接口的要求.这样就可以实现以流式的形式来访问文件系统的数据. HDFS的设计目标: 检测和快速回复硬件故障 流式的数据访问 简

HDFS的shell操作

既然HDFS 是存取数据的分布式文件系统,那么对HDFS的操作,就是对文件系统的基本操作,比如文件的创建.修改.删除.修改权限等,文件夹的创建.删除.重命名等.对 HDFS 的操作命令类似于Linux 的shell 对文件的操作,只是在HDFS中,hadoop fs是主命令,其他像ls,mv,cp都是被作为该命令的选项. 以下表格列出一些常用的HDFS shell命令选项. 选项名称 使用格式 含义 -ls -ls <路径> 查看指定路径的当前目录结构 -lsr -lsr <路径>

在Spark shell中基于HDFS文件系统进行wordcount交互式分析

Spark是一个分布式内存计算框架,可部署在YARN或者MESOS管理的分布式系统中(Fully Distributed),也可以以Pseudo Distributed方式部署在单个机器上面,还可以以Standalone方式部署在单个机器上面.运行Spark的方式有interactive和submit方式.本文中所有的操作都是以interactive方式操作以Standalone方式部署的Spark.具体的部署方式,请参考Hadoop Ecosystem. HDFS是一个分布式的文件管理系统,其

大数据技术之_04_Hadoop学习_01_HDFS_HDFS概述+HDFS的Shell操作(开发重点)+HDFS客户端操作(开发重点)+HDFS的数据流(面试重点)+NameNode和SecondaryNameNode(面试开发重点)

第1章 HDFS概述1.1 HDFS产出背景及定义1.2 HDFS优缺点1.3 HDFS组成架构1.4 HDFS文件块大小(面试重点)第2章 HDFS的Shell操作(开发重点)第3章 HDFS客户端操作(开发重点)3.1 HDFS客户端环境准备3.2 HDFS的API操作3.2.1 HDFS文件上传(测试参数优先级)3.2.2 HDFS文件下载3.2.3 HDFS文件夹删除3.2.4 HDFS文件名更改3.2.5 HDFS文件详情查看3.2.6 HDFS文件和文件夹判断3.3 HDFS的I/O

Hadoop之HDFS(客户端操作) 2 HDFS的API操作 3 HDFS的I/O流操作

2 HDFS的API操作 2.1 HDFS文件上传(测试参数优先级) 1.编写源代码 // 文件上传 @Test public void testPut() throws Exception { Configuration conf = new Configuration(); conf.set("dfs.replication", "2"); // 1.获取fs对象 FileSystem fs = FileSystem.get(new URI("hdfs

HDFS文件系统基操--Java实现

Java实现对HDFS文件系统的基本操作 1.准备好jar包 2.创建一个类 1. 测试连接 @Test //测试是否连接成功 public void test() { //添加配置 ==> core-site.xml Configuration conf = new Configuration(); //配置默认地址端口 conf.set("fs.defaultFS", "hdfs://192.168.1.105:9000"); try { //加载配置 F

【hadoop】使用javaAPI对hdfs进行文件操作

前提:1.搭建好hadoop伪分布式环境:2.安装好eclipse: 注:修改 /etc/hosts 添加 “本机IP hadoop01” , 那么代码中创建hdfs文件系统的时候的URI hdfs://hadoop01:9000 相当于  hdfs://hadoop服务器ip(例如:192.168.1.1XX):9000 import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOExcep