HDFS的运用

判断文件并删除文件

package com.doit.hdp.day01;
import com.doit.hdp.Utils;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class Demo03 {
    public static void main(String[] args) throws Exception {
        FileSystem fs = Utils.getHdfsFs();
        Path path = new Path("/wnn");
        if(fs.exists(path)){
         fs.delete(path, true);

        }else{
            System.out.println("没有该文件无法删除");
        }
       fs.close();

    }
}
package com.doit.hdp.day01;
import com.doit.hdp.Utils;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class YiDong {
    public static void main(String[] args) throws Exception {
        FileSystem  fs= Utils.getHdfsFs();
        //移到已经存在的某个目录下
        fs.rename(new Path("/a.txt"),new Path("/user/a.txt"));
        //把目录名字进行改写
        fs.rename(new Path("/user"),new Path("/USER"));
        fs.close();
    }

}

查看命令如下:

[root@linux01 /]# hdfs dfs -ls /
Found 2 items
-rw-r--r--   3 root supergroup          0 2021-04-26 10:47 /jar.txt
drwxr-xr-x   - root supergroup          0 2021-04-26 20:16 /user
[root@linux01 /]# hdfs dfs -ls /user
Found 2 items
drwxr-xr-x   - root supergroup          0 2021-04-26 20:09 /user/a.txt
drwxr-xr-x   - root supergroup          0 2021-04-25 20:54 /user/root
[root@linux01 /]# hdfs dfs -ls /
Found 2 items
drwxr-xr-x   - root supergroup          0 2021-04-26 20:16 /USER
-rw-r--r--   3 root supergroup          0 2021-04-26 10:47 /jar.txt
package com.doit.hdp.day01;
import com.doit.hdp.Utils;
import org.apache.hadoop.fs.*;

import java.sql.Array;
import java.util.Arrays;

public class BianLi {
    public static void main(String[] args) throws Exception {
        FileSystem fs = Utils.getHdfsFs();
        //递归地去遍历这个文件系统的文件,不是文件夹哦,返回一个迭代器
        RemoteIterator<LocatedFileStatus> loca = fs.listFiles(new Path("/"),false);
        while(loca.hasNext()){
            LocatedFileStatus file = loca.next();
            Path path = file.getPath();
            String name = path.getName();
           // System.out.println(path+"----"+name);
            file.getBlockSize();//逻辑切块的大小  128M
            file.getReplication();//副本
            file.getLen();//实际长度
            BlockLocation[] bls = file.getBlockLocations();//实际的物理切块
            for (BlockLocation  bl:bls) {
                long length = bl.getLength();
                String[] hosts = bl.getHosts();
                //把数组转化成list集合
                System.out.println(path+"....."+length+",,"+ Arrays.asList(hosts));

            }

        }
        fs.close();
        //查看文件和文件夹
       // fs.listStatus();
    }
}

在这里插入图片描述

package com.doit.hdp.day01;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;
public class Demo05 {
    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        conf.set("dfs.replication","2");//自定义设置副本个数
        FileSystem fs = FileSystem.newInstance(new URI("hdfs://linux01:8020"), conf, "root");
        fs.copyFromLocalFile(new Path("d://text.rar"),new Path("/tt.rar"));
        fs.close();
    }
}

在这里插入图片描述

package com.doit.hdp.day01;
import com.doit.hdp.Utils;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class Demo06 {
    public static void main(String[] args) throws Exception {
        FileSystem fs = Utils.getHdfsFs();
        //遍历文件和文件夹
        FileStatus[] fileStatuses = fs.listStatus(new Path("/"));
        for (FileStatus  fileStatuse: fileStatuses
             ) {
            Path path = fileStatuse.getPath();
            String name = path.getName();
            System.out.println(path);
            System.out.println(name);

        }
        
        fs.close();
    }
}

在这里插入图片描述

package com.doit.hdp.day01;
import com.doit.hdp.Utils;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Demo07 {
    public static void main(String[] args) throws Exception {
        FileSystem fs = Utils.getHdfsFs();
        FSDataInputStream is = fs.open(new Path("/m.txt"));
        is.skip(20);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));

        String s = br.readLine();
        System.out.println(s);
        br.close();
        is.close();
        fs.close();


    }
}

在这里插入图片描述

### HDFS简介 Hadoop分布式文件系统(Hadoop Distributed File System, HDFS)是Hadoop生态系统中的核心组件之一,专为大规模数据存储设计[^2]。它的主要特点是高容错性、高可靠性和高吞吐量,能够运行在廉价硬件上并提供高效的访问能力[^5]。 #### 架构概述 HDFS采用主从结构模型,由NameNode和DataNode组成。其中: - **NameNode** 负责管理文件系统的命名空间和客户端请求。 - **DataNode** 存储实际的数据块,并执行读写操作。 这种架构使得HDFS能够在节点失效的情况下自动恢复数据,从而保障了整个系统的稳定性。 --- ### HDFS基本使用指南 以下是关于如何使用HDFS的一些基础指导: #### 文件上传与下载 可以通过`hdfs dfs -put`命令将本地文件上传到HDFS中,或者用`hdfs dfs -get`将其下载回本地环境[^1]。 ```bash # 将本地文件 /path/to/local/file.txt 上传至 HDFS 的指定位置 hdfs dfs -put /path/to/local/file.txt /destination/path/in/HDFS/ # 下载 HDFS 中的文件到本地 hdfs dfs -get /source/path/in/HDFS/ /local/destination/ ``` #### 复制文件或目录 如果需要在HDFS内部完成文件或目录的复制,则可利用`hdfs dfs -cp`指令实现。 ```bash # 在 HDFS 内部复制文件或目录 hdfs dfs -cp /source/path/in/HDFS/ /target/path/in/HDFS/ ``` #### 查看文件内容 要快速浏览某个文件的内容,可以运用`hdfs dfs -cat`命令来显示其前部分内容[^3]。 ```bash # 显示 HDFS 上某文件的部分内容 hdfs dfs -cat /path/to/file | head -n 10 ``` #### 更改文件权限 类似于Linux操作系统下的chmod功能,在HDFS里也可以调整文件权限设置[^3]。 ```bash # 修改 HDFS 文件或目录的权限 hdfs dfs -chmod 755 /path/to/resource ``` #### 删除资源 当不再需要某些文件或目录时,可通过`hdfs dfs -rm`删除单个文件;对于非空目录则需附加参数`-r`递归清除。 ```bash # 移除单一文件 hdfs dfs -rm /path/to/single_file # 清理整个目录及其子项 hdfs dfs -rm -r /path/to/directory ``` --- ### Secondary NameNode的作用说明 尽管名称中有“secondary”,但它并不是真正的备用NameNode实例。实际上,Secondary NameNode的主要职责在于定期合并fsimage和edits日志文件,以此减轻Primary NameNode的工作负担并防止元数据丢失风险。 --- 问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值