• 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. }
  • 相关阅读:
    Android TabLayout的使用与总结
    Go-手写注册中心
    基于pytorch预训练模型使用Faster RCNN调用摄像头进行目标检测【无敌详细!简单!超少代码!】
    清华操作系统笔记4——虚拟内存技术
    Redis之缓存
    使用SpaceDesk连接平板作为电脑副屏详细步骤教程
    Spring Web MVC
    C++笔记之vector的初始化以及assign()方法
    力扣-3. 无重复字符的最长子串
    双指针的问题解法以及常见的leetcode例题。
  • 原文地址:https://blog.csdn.net/qq_64557330/article/details/126065864