• Hadoop学习笔记(2)——HDFS(1)


    目录

    一、HDFS概述

    1、HDFS产出背景及意义

    1.1 HDFS产生背景

     1.2 HDFS定义

    2、HDFS优缺点

    2.1 HDFS优点

     2.2 HDFS缺点

     3、HDFS组成

    4、HDFS文件块大小

    二、HDFS的Shell操作

    1、基本语法

    2、命令大全

    3、常用命令实操(重要)

     3.1 准备工作

    3.2 上传命令

    3.3 下载命令

    3.4 HDFS直接操作

    三、HDFS的API操作

    1、API环境准备

    2、API操作

    2.1 API创建文件夹及文件上传

    2.2 上传文件

    2.3 API参数优先级

    2.4 下载文件

    2.5 删除

    2.6 文件的移动及更名

    2.7 获取文件详细信息

    2.8 判断是文件还是目录


    HDFS章节内容:

    一、HDFS概述

    1、HDFS产出背景及意义

    1.1 HDFS产生背景

     1.2 HDFS定义

    2、HDFS优缺点

    2.1 HDFS优点

     2.2 HDFS缺点

     3、HDFS组成

    4、HDFS文件块大小

    二、HDFS的Shell操作

    1、基本语法

    hadoop fs 具体命令 或者 hdfs dfs 具体命令(两者完全相同)

    2、命令大全

    3、常用命令实操(重要)

     3.1 准备工作

     用之前自定义的myhadoop.sh start/stop启动

    3.2 上传命令

    3.3 下载命令

     可以更改名字的

    3.4 HDFS直接操作

    三、HDFS的API操作

    1、API环境准备

    要去配置以下Maven以及依赖包等

    2、API操作

    2.1 API创建文件夹及文件上传

    1. package com.me.hdfs;
    2. import org.apache.hadoop.conf.Configuration;
    3. import org.apache.hadoop.fs.FileSystem;
    4. import org.apache.hadoop.fs.Path;
    5. import org.junit.After;
    6. import org.junit.Before;
    7. import org.junit.Test;
    8. import java.net.URI;
    9. /**
    10. * 客户端代码常用套路
    11. * 1、获取一个客户端对象
    12. * 2、执行相关的操作命令
    13. * 3、关闭资源
    14. *
    15. * 典型代表:HDFS zookeeper
    16. */
    17. public class HdfsClient {
    18. private FileSystem fs;
    19. @Before
    20. public void init() throws Exception{
    21. //连接的集群nn地址
    22. URI uri = new URI("hdfs://hadoop102:8020");
    23. //创建一个配置文件
    24. Configuration configuration = new Configuration();
    25. //用户
    26. String user="me";
    27. //1.获取到了客户端对象
    28. fs = FileSystem.get(uri, configuration,user);
    29. }
    30. @After
    31. public void close() throws Exception{
    32. //3.关闭资源
    33. fs.close();
    34. }
    35. //创建目录
    36. @Test
    37. public void testmkdir() throws Exception {
    38. //2/创建一个文件夹
    39. fs.mkdirs(new Path("/xiyou/huaguoshan1"));
    40. }
    41. }

    2.2 上传文件

    1. //上传文件
    2. @Test
    3. public void testPut() throws Exception{
    4. //参数解读:参数一:表示是否删除原数据; 参数二:是否运行被覆盖; 参数三:原数据路径; 参数四:目的地路径;
    5. fs.copyFromLocalFile(true,true,new Path("D:\\sunwukong.txt"),new Path("hdfs://hadoop102//xiyou/huaguoshan"));
    6. }

     这里的HDFS的路径可以带上协议的hdfs:://hadoop102,也可以不带

    2.3 API参数优先级

    1. /**
    2. * 参数优先级从低到高:
    3. * hdfs-default.xml ==> hdfs-site-xml ==> 在项目资源目录下的配置文件 ==> 代码里面的优先级最高
    4. * @throws Exception
    5. */

    2.4 下载文件

    1. //文件下载
    2. @Test
    3. public void testGet() throws Exception{
    4. //参数解读:参数一:表示是否删除原文件; 参数二:原文件路径HDFS; 参数四:目的地路径windows; 参数四:是否开启校验(true就不开启校验);
    5. fs.copyToLocalFile(true,new Path("hdfs://hadoop102/xiyou/huaguoshan"),new Path("D:\\"),true);
    6. }

    1、crc文件是一种校验方式

    2、如果要下载sunwukong.txt,在参数二后面加上/sunwukong.txt即可

    2.5 删除

    1. //删除
    2. @Test
    3. public void testRm() throws Exception{
    4. //参数解读:参数1:要删除的路径; 参数2:是否递归删除;
    5. //删除文件
    6. //fs.delete(new Path("/jdk-8u212-linux-x64.tar.gz"),false);
    7. //删除空目录
    8. //fs.delete(new Path("/xiyou"),false);
    9. //删除非空目录(要递归删除)
    10. fs.delete(new Path("/jinguo"),true);
    11. }

    2.6 文件的移动及更名

    1. //文件的更名和移动
    2. @Test
    3. public void testmv() throws Exception{
    4. //参数解读:参数1:原文件路径; 参数2:目标文件路径(这里就更名了)
    5. //fs.rename(new Path("/input/word.txt"),new Path("/input/ss.txt"));
    6. //文件的移动和更名
    7. //fs.rename(new Path("/input/ss.txt"),new Path("/cls.txt"));
    8. //目录的更名
    9. fs.rename(new Path("/input"),new Path("/output"));
    10. }

    2.7 获取文件详细信息

    1. //获取文件详情信息
    2. @Test
    3. public void fileDetail() throws Exception {
    4. //获取所有文件信息
    5. RemoteIterator listFiles= fs.listFiles(new Path("/"),true);
    6. //遍历文件
    7. while(listFiles.hasNext()){
    8. LocatedFileStatus fileStatus = listFiles.next();
    9. System.out.println("============="+fileStatus.getPath()+"============");
    10. System.out.println(fileStatus.getPermission());
    11. System.out.println(fileStatus.getOwner());
    12. System.out.println(fileStatus.getGroup());
    13. System.out.println(fileStatus.getLen());
    14. System.out.println(fileStatus.getModificationTime());
    15. System.out.println(fileStatus.getReplication());
    16. System.out.println(fileStatus.getBlockSize());
    17. System.out.println(fileStatus.getPath().getName());
    18. //获取块信息(获取到副本的hadoop102...)
    19. BlockLocation[] blockLocations = fileStatus.getBlockLocations();
    20. System.out.println(Arrays.toString(blockLocations));
    21. }
    22. }

    2.8 判断是文件还是目录

    1. //判断是文件还是文件夹
    2. @Test
    3. public void testFile() throws Exception{
    4. FileStatus[] listStatus= fs.listStatus(new Path("/"));
    5. for(FileStatus status: listStatus){
    6. if(status.isFile()){
    7. System.out.println("文件:"+status.getPath().getName());
    8. }
    9. else{
    10. System.out.println("目录:"+status.getPath().getName());
    11. }
    12. }
    13. }
  • 相关阅读:
    无需手动部署的正式版comfyUI是否就此收费?开源等同免费?
    机器学习练习-决策树
    自古以来,反射也是兵家必争之地
    【无源谐波滤波器通常用于电力系统中的谐波抑制】用于抑制电力系统谐波的无源谐波滤波器(Simulink实现)
    知识图谱实战导论:从什么是KG到LLM与KG/DB的结合实战
    【面试题精讲】MySQL中覆盖索引是什么
    从0开始做公众号|零基础如何运营一个公众号?
    企业版远程软件推荐
    PID简介
    科技的成就(三十)
  • 原文地址:https://blog.csdn.net/qq_64557330/article/details/126065864