Hadoop --- HDFS配置与操作

news/2024/5/20 4:03:06 标签: hadoop, hdfs, 大数据

hadoop的配置文件存放目录在 {HADOOP_HOME}/etc/hadoop 下, 与 hdfs相关的配置: core-site.xml、hdfs-site.xml 

core-site.xml: core-site 配置详解

新增属性信息: fs.defaultFS

fs.defaultFS表示指定集群的文件系统类型是分布式文件系统(HDFS),datanode心跳发送到nameNode的地址

<configuration>
 
   <property>
        <name>fs.defaultFS</name> 
        <value>hdfs://#{nameNode}:#{PORT}</value> 
  </property>
 
 </configuration>

hdfs-site.xml:hdfs-site 配置详解

  • dfs.replication 副本数,表示副本数是3
  • dfs.name.dir和dfs.data.dir, namenode 和 datanode 的数据存放路径
  • dfs.datanode.max.locked.memory 开启缓存,配置值根据自己机器情况配置 
  • dfs.permissions 是否开启权限校验 
<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>
<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/opt/software/hadoop/hdfs/name</value>
</property>
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/opt/software/hadoop/hdfs/data</value>
</property>
<property>
    <name>dfs.datanode.max.locked.memory</name>
    <value>65536</value>
</property>
<property>
    <name>dfs.permissions</name>
    <value>false</value>
</property>

HDFS --  API操作: 

1、引入包hadoop-client 

<dependencies>
 <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>3.1.3</version>
 </dependency> 
</dependencies>

2、HSFS 客户端操作

  1.  获取客户端对象
  2. 执行相关操作命令: 文件上传、下载、修改文件名称/路径、文件删除........
  3. 关闭资源
package hadoop.hdfs;

import org.apache.hadoop.fs.Path;
import org.junit.Test;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.conf.Configuration;
import java.io.IOException;

import java.net.URI;
import java.net.URISyntaxException;

public class HdfsClient {
    @Test
    public void testMkdirs() throws URISyntaxException, IOException, InterruptedException {
        // 连接集群nn的地址
        URI uri = new URI("hdfs://TestNode1:9000");
        //创建一个配置文件
        Configuration configuration = new Configuration();

        //用户
        String user = "zsm";
        // 获取到客户端对象
        FileSystem fs = FileSystem.get(uri, configuration, user);
        fs.mkdirs(new Path("/zsm/hdfs/test/"));
        fs.close();
    }

}

2.1 文件上传: copyFromLocalFile

    @Test
    public void testCopyFromLocalFile() throws URISyntaxException, IOException, InterruptedException {
        // 1.获取文件系统
        Configuration configuration = new Configuration();
        configuration.set("dfs.replication","2");
        FileSystem fs = FileSystem.get(new URI("hdfs://node01:9000"),configuration,"zsm");

        // 2.上传文件(在项目文件夹下创建hdfs_test.txt, 也可以指定一个绝对路径下的文件)
        fs.copyFromLocalFile(new Path("hdfs_test.txt"), new Path("/zsm/hdfs/test/"));

        // 3.关闭资源
        fs.close();
    }

2.2 文件下载: 

copyToLocalFile(Boolean delSrc, Path src, Path dst, Boolean useRawLocalFileSystem)

  1. boolean delSrc 指是否将原文件删除 
  2. Path src 指要下载的文件路径
  3. Path dst 指将文件下载到的路径
  4. boolean useRawLocalFileSystem 是否开启文件校验
    @Test
    public void testCopyToLocalFile() throws IOException, URISyntaxException, InterruptedException {
        // 1.获取文件系统
        Configuration configuration = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://node01:9000"),configuration,"zsm");

        // 2.执行下载操作
        // boolean delSrc 指是否将原文件删除
        // Path src 指要下载的文件路径
        // Path dst 指将文件下载到的路径
        // boolean useRawLocalFileSystem 是否开启文件校验
        fs.copyToLocalFile(false, new Path("/zsm/hdfs/test/hdfs_test.txt"), new Path("zsm_test2.txt"), true);

        // 3.关闭资源
        fs.close();
    }

2.3 修改文件名和路径: rename 

    @Test
    public void testRename() throws IOException, URISyntaxException, InterruptedException {
        // 1.获取文件系统
        Configuration configuration = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://node01:9000"),configuration,"zsm");

        // 2.修改文件名称
        fs.rename(new Path("/zsm/hdfs/test/hdsf_test.txt"),new Path("/zsm/hdfs/test2/hdsf_test2.txt"));

        // 3.关闭资源
        fs.close();
    }

2.4 删除文件和目录: delete 

    @Test
    public void testDelete() throws IOException, URISyntaxException, InterruptedException {
        // 1.获取文件系统
        Configuration configuration = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://node01:9000"),configuration,"zsm");

        // 2.执行删除
        fs.delete(new Path("/zsm/hdfs"),true);

        // 3.关闭资源
        fs.close();
    }

2.5 HDFS文件详情查看 

查看文件名称、权限、长度、块信息

    @Test
    public void testListFiles() throws IOException, InterruptedException,
            URISyntaxException {
        // 1 获取文件系统
        Configuration configuration = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://node01:9000"),configuration,"zsm");

        // 2 获取文件详情
        RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/zsm"), true);
        while (listFiles.hasNext()) {
            LocatedFileStatus fileStatus = listFiles.next();
            System.out.println("========" + fileStatus.getPath() + "=========");
            System.out.println(fileStatus.getPermission());
            System.out.println(fileStatus.getOwner());
            System.out.println(fileStatus.getGroup());
            System.out.println(fileStatus.getLen());
            System.out.println(fileStatus.getModificationTime());
            System.out.println(fileStatus.getReplication());
            System.out.println(fileStatus.getBlockSize());
            System.out.println(fileStatus.getPath().getName());
            // 获取块信息
            BlockLocation[] blockLocations = fileStatus.getBlockLocations();
            System.out.println(Arrays.toString(blockLocations));
        }

        // 3 关闭资源
        fs.close();
    }

2.6 HDFS文件和文件夹判断 

    @Test
    public void testListStatus() throws IOException, InterruptedException, URISyntaxException{
        // 1 获取文件配置信息
        Configuration configuration = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://node01:9000"), configuration, "zsm");

        // 2 判断是文件还是文件夹
        FileStatus[] listStatus = fs.listStatus(new Path("/zsm"));
        for (FileStatus fileStatus : listStatus) {
            // 如果是文件
            if (fileStatus.isFile()) {
                System.out.println("f:"+fileStatus.getPath().getName());
            }else {
                System.out.println("d:"+fileStatus.getPath().getName());
            }
        }

        // 3 关闭资源
        fs.close();
    }

http://www.niftyadmin.cn/n/467942.html

相关文章

c4d+AI+PS设计广告展示架/销售柜台/展示盒子的建议

1、首先做出我标识出来的样子&#xff0c;这里称作A面。&#xff08;可用软件&#xff1a;PS、AI、cdr等&#xff09; 2、制作用于展示盒A面PNG图片&#xff08;PS来掏空空白处用于描边&#xff09;。 操作&#xff1a;按需求缩小图片&#xff0c;载入选区&#xff0c;新建图层…

vue 封装Axios详细代码说明

在Vue项目中使用Axios来进行网络请求是很常见的&#xff0c;如果我们每次都直接调用axios的API来进行请求的话&#xff0c;不仅代码重复度高&#xff0c;而且还会影响代码的可维护性。因此&#xff0c;我们可以通过封装一个Axios请求的工具类&#xff0c;来优化我们的代码。 以…

BCSP-玄子Java开发之Java Web编程CH07_使用JSP/Servlet开发复杂业务

BCSP-玄子Java开发之Java Web编程CH07_使用JSP/Servlet开发复杂业务 实现数据分页查 大量数据的展示 页面冗长、数据定位不方便&#xff0c;需要拖动页面才能浏览更多的数据一次性查询大量数据&#xff0c;数据库查询压力大&#xff0c;浪费系统资源 [外链图片转存失败,源站…

【软考网络管理员】2023年软考网管初级常见知识考点(11)-TCP和UDP详解

涉及知识点 传输控制协议TCP是什么&#xff0c;三次握手的概念理解&#xff0c;用户数据报协议UDP是什么&#xff0c;软考网络管理员常考知识点&#xff0c;软考网络管理员网络安全&#xff0c;网络管理员考点汇总。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码》&#xff0…

央企数字化转型的案例、难题与剖析

转型价值目标不清晰、价值效益不易显现 问题表现 国有企业是我国经济发展核心竞争力的体现&#xff0c;肩负着强国建设的重大使命&#xff0c;数字化转型价值效益不仅体现在生产运营优化上&#xff0c;更体现在产品服务创新和新赛道布局上。目前绝大多数国有企业主要聚焦在通…

tinykv project4总结

主要目标 实现mvcc和2pc, Percolator partA 将存储分为三个独立的部分&#xff0c;lock&#xff08;管理锁记录&#xff09; default(存储数据)&#xff0c;write(提交的记录)&#xff0c;提高并行性 对于lock存储&#xff0c;只要存储一份&#xff08;因为一个行同时只能有…

Java反射机制以及应用

Java反射机制以及应用 1、Java反射 在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够获取到这个类的所有属性和方法&#xff0c;对于任意一个对象&#xff0c;都能够调用它的任意一个方法和属性(包括私有的方法和属性)&#xff0c;这种动态获取的信息以及动态调用对…

Learning to cluster in order to transfer across domains and tasks (ICLR 2018)

Learning to cluster in order to transfer across domains and tasks (ICLR 2018) 摘要 这篇论文提出一个进行跨域/任务的迁移学除了习任务&#xff0c;并将其作为一个学习聚类的问题。除了特征&#xff0c;我们还可以迁移相似度信息&#xff0c;并且这是足以学习一个相似度…