Hadoop(HDFS)

news2024/11/25 16:23:10

Hadoop是一个开源的分布式系统架构,旨在解决海量数据的存储和计算问题,Hadoop的核心组件包括Hadoop分布式文件系统(HDFS)、MapReduce编程模型和YARN资源管理器,最近需求需要用到HDFS和YARN。

文章目录

    • HDFS
      • 优缺点
      • HDFS的读写原理
    • 常用命令
    • HDFS 的 API 操作

HDFS

HDFS在Hadoop中负责数据的存储,是一个分布式文件系统。HDFS的主要角色包括以下几种:

  • NameNode(nn):负责存储文件的元数据,包括文件名、目录结构、文件属性,此外还记录了每个文件的块列表以及这些块分别存储在哪些DataNode上。
  • DataNode (dn):在本地文件系统中保存文件的实际数据块,客户端通过dn对数据块进行读/写操作,同时还存储这些数据块的校验和,以确保数据的完整性。
  • Secondary NameNode (2nn):定期对NameNode的元数据进行备份操作,以防数据丢失。
  • Client:客户端负责先与NameNode交互获取文件的位置信息后,再与DataNode交互,进行数据的读写操作。
    在这里插入图片描述

优缺点

优点:

高容错性:数据会进行多个备份,当其中一个备份丢失时,系统能够自动进行恢复。
处理大规模数据:无论是大规模数据还是大量的文件,都能够有效地进行处理。

缺点:

延迟较高:不适用于快速响应的场景,例如毫秒级别的数据访问无法实现。
小文件存储效率低下:当存储大量小文件时,会大量占用NameNode的内存来记录文件目录和块信息,而NameNode的内存资源是有限的,并且小文件的寻址时间可能会超过实际的读取时间。
写入和修改的限制:不支持多个线程同时对同一个文件进行写入操作,且只能对文件进行追加操作,不能对文件内容进行随机修改。

文件块大小

在Hadoop 1.x版本里,默认的文件块大小为64MB,在2.x和3.x版本中为128MB,当寻址时间为传输时间的百分之一是最佳状态,如果单个文件块过小,那么大文件会被切割为很多块,从而增加寻址时间,反之,若文件块过大,那么传输时间会远大于寻址时间。

HDFS的读写原理

(1)文件写入原理
在这里插入图片描述

(2) 网络拓扑-节点距离计算
在HDFS进行数据写入时,NameNode会选择与待上传数据距离最近的DataNode来接收并存储这些数据。
节点距离的计算方式:两个节点到达最近的共同祖先的距离总和。
在这里插入图片描述

(3)机架感知原理-副本存储节点选择
副本节点选择:

  • 第一个副本在Client所处的节点上;如果客户端在集群外,随机选一个。
  • 第二个副本在另一个机架的随机一个节点。
  • 第三个副本在第二个副本所在机架的随机节点

在这里插入图片描述

(4)读文件原理
在这里插入图片描述

(5)NN 和 2NN 工作原理
NameNode 中的元数据存放在内存中,当对元数据进行更新或者添加操作时,会修改内存中的元数据并追加到 edits log 中,为了防止edits log过大,导致查询效率低的问题,SecondaryNameNode会定时触发checkpoint操作,将NameNode的edits log和fs image合并,生成一个新的fs image,以减少edits log的大小,并将新的fs image传回给NameNode,以提高元数据的查询效率。

(6)DataNode工作原理
在这里插入图片描述

常用命令

(1)查看命令帮助

hadoop fs -help rm

(2)启动Hadoop集群

sbin/start-dfs.sh
 
sbin/start-yarn.sh

在这里插入图片描述

(3)创建文件夹

hadoop fs -mkdir /learn

在这里插入图片描述(4)上传文件

  • -put:和copyFromLocal一样,生产环境更多用 put
vim a.txt
aaa
bbb
hadoop fs -put a.txt /learn

在这里插入图片描述在这里插入图片描述

  • -moveFromLocal:从本地移动到 HDFS
hadoop fs -moveFromLocal b.txt /learn
  • -copyFromLocal:从本地文件拷贝文件到 HDFS
hadoop fs -copyFromLocal c.txt /learn
  • -appendToFile:追加一个文件到HDFS已经存在的文件末尾
hadoop fs -appendToFile d.txt /learn/c.txt

(5)下载文件

  • -get:和copyToLocal一样,生产环境更习惯用 get
hadoop fs -get /learn ./
  • -copyToLocal:从 HDFS 拷贝到本地
hadoop fs -copyToLocal /data ./

(6)其他操作

  • -mkdir:创建目录
hadoop fs -mkdir /file
  • -ls: 显示目录信息
hadoop fs -ls /learn

在这里插入图片描述

  • -cat:显示文件内容

在这里插入图片描述

  • -chgrp、-chmod、-chown:修改文件所属权限
hadoop fs -chmod 777 /learn/a.txt

在这里插入图片描述

  • -cp:从 HDFS 的一个路径拷贝到 HDFS 的另一个路径
hadoop fs -cp /learn/a.txt /file
  • -mv:在 HDFS 目录中移动文件
hadoop fs -mv /learn/b.txt /file2
  • -tail:显示一个文件的末尾 1kb 的数据
hadoop fs -tail /learn/a.txt

在这里插入图片描述

  • -rm:删除文件或文件夹
hadoop fs -rm /learn/a.txt

在这里插入图片描述

  • -rm -r:递归删除目录及目录里面内容
hadoop fs -rm -r /learn
  • -du 统计文件夹的大小信息
hadoop fs -du /file2

在这里插入图片描述
7 表示文件大小,21 表示 3个副本的总大小

  • -setrep:设置 HDFS 中文件的副本数量
hadoop fs -setrep 10 /file2

目前只有3台节点,最多也就3个副本,当节点数增加到10时,副本数才能到10。
在这里插入图片描述

HDFS 的 API 操作

(1)创建目录

public class HdfsLearn {
    @Test
    public void testCreate() throws IOException, URISyntaxException, InterruptedException {
        Configuration configuration = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://192.168.235.130:8020"), configuration, "liang");
        fs.mkdirs(new Path("/learn/file.txt"));
        fs.close();
    }
}

(2)上传文件

@Test
public void testCopyFromLocalFile() throws IOException, InterruptedException, URISyntaxException {
    Configuration configuration = new Configuration();
    configuration.set("dfs.replication", "3");
    FileSystem fs = FileSystem.get(new URI("hdfs://192.168.235.130:8020"), configuration, "liang");
    fs.copyFromLocalFile(new Path("D:\\hadoop\\learn.txt"), new Path("/test/file4"));
    fs.close();
}

(3)下载文件

@Test
public void testCopyToLocalFile() throws IOException,
        InterruptedException, URISyntaxException{
    Configuration configuration = new Configuration();
    FileSystem fs = FileSystem.get(new URI("hdfs://192.168.235.130:8020"), configuration, "liang");
    // boolean delSrc 指是否将原文件删除
    // Path src 指要下载的文件路径
    // Path dst 指将文件下载到的路径
    // boolean useRawLocalFileSystem 是否开启文件校验
    fs.copyToLocalFile(false, new Path("/learn/a.txt"), new Path("D:\\hadoop\\b.txt"), true);
    fs.close();
}

(4)文件移动或者更名

@Test
public void testRename() throws IOException, InterruptedException, URISyntaxException {
    Configuration configuration = new Configuration();
    FileSystem fs = FileSystem.get(new URI("hdfs://192.168.235.130:8020"), configuration, "liang");
    fs.rename(new Path("/learn/a.txt"), new Path("/learn/b.txt"));
    fs.close();
}

(5)删除文件

@Test
public void testDelete() throws IOException, InterruptedException, URISyntaxException{
    Configuration configuration = new Configuration();
    FileSystem fs = FileSystem.get(new URI("hdfs://192.168.235.130:8020"), configuration, "liang");
    fs.delete(new Path("/file2"), true);
    fs.close();
}

(6)文件详情查看

@Test
public void testListFiles() throws IOException, InterruptedException, URISyntaxException {
    Configuration configuration = new Configuration();
    FileSystem fs = FileSystem.get(new URI("hdfs://192.168.235.130:8020"), configuration, "liang");
    // 获取文件详情
    RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), 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));
    }
    fs.close();
}

(7)文件判断

@Test
public void testListStatus() throws IOException, InterruptedException, URISyntaxException {
    Configuration configuration = new Configuration();
    FileSystem fs = FileSystem.get(new URI("hdfs://192.168.235.130:8020"), configuration, "liang");
    // 判断是文件还是文件夹
    FileStatus[] listStatus = fs.listStatus(new Path("/"));
    for (FileStatus fileStatus : listStatus) {
        // 如果是文件
        if (fileStatus.isFile()) {
            System.out.println("f:" + fileStatus.getPath().getName());
        } else {
            System.out.println("d:" + fileStatus.getPath().getName());
        }
    }
    fs.close();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2236601.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实在智能受邀出席柳州市智能终端及机器人产业发展合作大会

10 月 27 日至 28 日&#xff0c;由中共柳州市委员会与柳州市人民政府主办的2024柳州市智能终端及机器人产业发展合作大会在柳州莲花山庄隆重举行。大会充分整合各方资源&#xff0c;持续深化与柳州在重大战略规划、重大平台建设、重点产业培育等领域的合作。作为智能体行业的知…

100+SCI科研绘图系列教程(R和python)

科研绘图系列&#xff1a;箱线图加百分比点图展示组间差异-CSDN博客科研绘图系列&#xff1a;箱线图加蜜蜂图展示组间数据分布-CSDN博客科研绘图系列&#xff1a;小提琴图和双侧小提琴图展示组间差异-CSDN博客科研绘图系列&#xff1a;组间差异的STAMP图的ggplot2实现-CSDN博客…

【WRF模拟】全过程总结:WPS预处理及WRF运行

【WRF模拟】全过程总结:WPS预处理及WRF运行 1 数据准备1.1 嵌套域设置(Customize domain)-基于QGis中gis4wrf插件1.2 静态地理数据1.2.1 叶面积指数LAI和植被覆盖度Fpar(月尺度)1.2.2 地面反照率(月尺度)1.2.3 土地利用类型+不透水面积1.2.4 数据处理:geotiff→tiff(W…

鸿蒙的进击之路

1. 题记&#xff1a; 为什么要写鸿蒙&#xff0c;因为她是华为的&#xff0c;为什么是华为就要写&#xff0c;因为华为背负了国人太多太多的包袱&#xff0c;或点赞或抨击。 我是强烈支持华为的&#xff0c;但我会客观公正地去评价华为的产品&#xff0c;就比如这篇博文&#…

国内 ChatGPT中文版镜像网站整理合集(2024/11/08)

一、GPT中文镜像站 ① yixiaai.com 支持GPT4、4o以及o1&#xff0c;支持MJ绘画 ② chat.lify.vip 支持通用全模型&#xff0c;支持文件读取、插件、绘画、AIPPT ③ AI Chat 支持GPT3.5/4&#xff0c;4o以及MJ绘画 1. 什么是镜像站 镜像站&#xff08;Mirror Site&#xff…

【机器学习】决定系数(R²:Coefficient of Determination)

决定系数&#xff0c;也称为 R 平方&#xff0c;是一种用于衡量回归模型预测效果的统计指标。它表示了模型解释目标变量总变异的程度&#xff0c;数值介于 0 和 1 之间&#xff0c;数值越接近 1 表明模型的解释力越强。 1. 的定义和公式 的公式如下&#xff1a; 其中&#xf…

deepfm模型实现招聘职位推荐算法

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

王珊数据库系统概论第六版PDF+第五版课后答案+课件

为了保持科学性、先进性和实用性&#xff0c; 编者在第5版教材基础上对全书内容进行了修改、更新和充实。在科学性方面&#xff0c; 编者在系统篇中增加了第9章关系数据库存储管理&#xff0c; 讲解数据库的逻辑与物理组织方式及索引结构。增加这部分内容有助于学生更好地理解关…

数据集市是什么?有什么优势?

一、数据集市是什么&#xff1f; 1、数据集市的产生背景&#xff1a; 因为数据仓库的工作范围和成本比较巨大&#xff0c;技术部门必须对所有的以全企业的眼光对待任何一次决策分析&#xff0c;这样就变成了成本高、耗时高的大项目&#xff0c;而且这种集中式的数据处理方式往往…

python安装selenium,geckodriver,chromedriver,Selenium IDE

安装浏览器 找到浏览器的版本号 chrome 版本 130.0.6723.92&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09; firfox 116.0.3 (64 位)&#xff0c;但是后面运行的时候又自动更新到了 127.0.0.8923 安装selenium > pip install selenium > pip show …

【LeetCode】【算法】238. 除自身以外数组的乘积

LeetCode 238. 除自身以外数组的乘积 题目描述 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据保证数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位整数范围内。 请不…

Redis-07 Redis哨兵

操作实现 此处应该6台虚拟机&#xff0c;其中3台是哨兵&#xff0c;但因为内存限制没有那么多 1.将sentinel文件拷贝到/myredis目录下 2.sentinel.conf文件重要参数 新建配置文件sentinel26379.conf sentinel26380.conf sentinel26381.conf bind 0.0.0.0 daemonize yes pr…

linux笔记(selinux)

一、概述 定义SELinux&#xff08;Security - Enhanced Linux&#xff09;是一种基于 Linux 内核的强制访问控制&#xff08;MAC&#xff09;安全机制。它为 Linux 系统提供了更细粒度的安全策略&#xff0c;增强了系统的安全性。目的主要目的是限制进程对系统资源&#xff08;…

jmeter常用配置元件介绍总结之函数助手

系列文章目录 1.windows、linux安装jmeter及设置中文显示 2.jmeter常用配置元件介绍总结之安装插件 3.jmeter常用配置元件介绍总结之取样器 jmeter常用配置元件介绍总结之函数助手 1.进入函数助手对话框2.常用函数的使用介绍2.1.RandomFromMultipleVars函数2.2.Random函数2.3.R…

Linux环境基础和基础开发工具使用

文章目录 一、yum软件管理器1、包管理器2、yum3、apt4、安装源 二、编辑器vim1、各种模式2、打开时直接让光标定位到指定号3、&#xff01;加命令字符 三、命令模式1、i 进入插入模式2、**Shift :** 进入底行模式3、光标定位4、ZZ&#xff08;大写&#xff09;保存并退出vim5、…

如何使用Python管理环境变量

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 环境变量 📒📝 环境变量简介📝 Python 中的环境变量操作📝 获取环境变量📝 设置环境变量🔖 临时设置🔖 永久设置📝 删除环境变量📝 临时删除📝 永久删除📝 小结⚓️ 相关链接 ⚓️📖 介绍 📖 环境变量…

【国产MCU系列】-GD32F4通用GPIO操作

通用GPIO 文章目录 通用GPIO1、GD32F4的GPIO介绍2、GPIO的寄存器3、GPIO功能及配置3.1 GPIO固件库API介绍3.2 GPIO引脚配置为输出3.2 GPIO引脚配置为输入1、GD32F4的GPIO介绍 GD32F4最多可支持140个通用 I/O引脚( GPIO),分别为 PA0 ~ PA15 PB0 ~ PB15 PC0 ~ PC15 PD0 ~ PD1…

GitHub个人主页美化

效果展示 展示为静态效果&#xff0c;动态效果请查看我的GitHub页面 创建GitHub仓库 创建与GitHub用户名相同的仓库&#xff0c;当仓库名与用户名相同时&#xff0c;此仓库会被视作特殊仓库&#xff0c;其README.md&#xff08;自述文件&#xff09;会展示在GitHub个人主页…

【网络面试篇】HTTP(2)(笔记)——http、https、http1.1、http2.0

目录 一、相关面试题 1. HTTP 与 HTTPS 有哪些区别&#xff1f; 2. HTTPS 的工作原理&#xff1f;&#xff08;https 是怎么建立连接的&#xff09; &#xff08;1&#xff09;ClientHello &#xff08;2&#xff09;SeverHello &#xff08;3&#xff09;客户端回应 &a…

视频播放相关的杂记

基于QT FFMPEG设计一款 RTMP协议推流、视频录制软件 实现的功能&#xff1a; &#xff08;1&#xff09;将摄像头视频流 麦克风音频流合并&#xff0c;并推到流媒体服务器 &#xff08;2&#xff09;将摄像头视频流 麦克风音频流保存到本地磁盘 基于QtFFMPEG设计一款RTM…