当前位置: 首页 > news >正文

07-HDFS入门及shell命令

1 文件系统

  • 是一种存储和组织数据的方法,它使得文件访问和查询变得容易
  • 使得文件和树形目录的抽象逻辑概念代替了磁盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数据底层存在硬盘哪里,只需记住这个文件的所属目录和文件名
  • 文件系统通常使用磁盘和光盘这样的存储设备,并维护文件在设备中的物理位置。
  • 文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型(Abstract data type)

文件名

​ DOS操作系统中文件名由文件主名和扩展名组成,之间以一个小圆点隔开

​ 文件名可用于用于定位存储位置、区分不同文件,计算机实行按名存取的操作方式

​ 某些符号因其有特殊含义,一般不允许出现在文件名中

元数据

​ 元素据(metadata)又称为解释性数据,记录数据的数据

​ 文件系统元数据一般指文件大小、最后修改时间、底层存储位置、属性、所属用户、权限等信息

文件系统分类

  • 基于磁盘的文件系统

是在非易失介质上(磁盘、光盘)存储文档的经典方式。用以在多次会话之间保持文件的内容。包括ext2/3/4、xfs、ntfs、iso9660等众所周知的文件系统。Linux系统可以使用df -Th查看

  • 虚拟文件系统

在内核中生成的文件系统,比如proc

proc文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在Linux内核空间和用户间之间进行通信

  • 网络文件系统

网络文件系统(NFS,network file system)是一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制

允许本地计算机访问另一台计算机上的数据,对此类文件系统中文件的操作都通过网络连接进行

2 分布式文件系统HDFS

2.1 HDFS简介

  • HDFS(Hadoop Distributed File System)Hadoop分布式文件系统。是Apache Hadoop核心组件之一,作为大数据生态圈最底层的分布式存储服务而存在。
  • 分布式文件系统解决大数据如何存储的问题。分布式意味着是横跨在多台计算机上的存储系统。
  • HDFS是一种能够在普通硬件上运行的分布式文件系统,它是高度容错,适用于具有大数据集的应用程序,它非常适于存储大型数据(比如 TB PB)
  • HDFS使用多台计算机存储文件,并且提供统一的访问接口,像是访问一个普通的文件系统一样使用分布式文件系统

2.2 HDFS设计目标

  • **硬件故障(Hardware Failure)**是常态,HDFS可能有成百上千的服务器组成,每一个组件都有可能出现故障。因此故障检测和自动快速恢复是HDFS的核心架构目标。
  • HDFS上的应用主要是以流式读取数据(Streaming Data Access)。HDFS被设计成用于批处理,而不是用户交互式的。相较于数据访问的反应时间,更注重数据访问的高吞吐量。
  • 典型的HDFS文件大小是GB到TB级别的。所有,HDFS被调整成支持大文件(Large Data Sets)。他应该提供很高的聚合数据带宽,一个集群中支持数百个节点,一个集群中还应该支持千万级别的文件。
  • 大部分HDFS应用对文件要求是write-one-read-many访问模型(一次写入多次读取)。一个文件一旦创建、写入、关闭之后就不需要修改了。这一假设简化了数据一致性问题,使高吞吐量的数据访问成为可能。
  • 移动计算的代价比之移动数据的代价低。一个应用请求的计算,离它操作的数据越近就越高效。将计算移动到数据附件,比之移动数据到应用所在显然更好。
  • HDFS被设计为可从一个平台轻松移植到另一个平台。这有利于将HDFS广泛用作大量应用程序的首选平台。

2.3 HDFS应用场景

适用场景

大文件

数据流式访问

一次写入多次读取

低成本部署,廉价pc

高容错

不适用场景

小文件

数据交互式访问

频繁任意修改

低延迟处理

2.4 HDFS重要特性

1、主从架构

HDFS采用master/slave架构。一般一个HDFS集群是有一个NameNode和一定数目的DataNode组成。

NameNode是HDFS主节点,DataNode是HDFS从节点,两种角色各司其职,共同协调完成分布式的文件存储服务

2、分块存储机制

HDFS中的文件在**物理上分块存储(block)**的,块的大小通过配置参数来规则,参数位于hdfs-default.xml中dfs.blocksize默认大小是128M(134217728)

3、副本机制

文件的所有block都会有副本。每个文件的block大小(dfs.blocksize)和副本系数(dfs.replication)都是可配置的。副本系数可以在文件创建时指定,也可以在之后通过命令改变。

默认 dfs.replication 的值是3,也就是额外再复制两份,连同本身共3副本。

4、namespace

HDFS支持传统的层次型文件组织结构。用户可以创建目录,然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建、删除、、移动或重命名文件。

NameNode负责维护文件系统的namespace名称空间,任何对文件系统名称空间或属性的修改都将被NameNode记录下来

HDFS会给客户端提供一个统一的抽象目录树,客户端提供路径来访问文件。

形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data

5、元数据管理

在HDFS中,NameNode管理的元数据具有两种类型:

  • 文件自身属性信息

文件名称、权限、修改时间、文件大小、复制因子、数据块大小

  • 文件块位置映射信息

记录块和DataNode之间的映射信息,即哪个块位于哪个节点上

6、数据块存储

文件的各个block的具体存储管理由DataNode节点承担。每一个block都可以在多个DataNode上存储。

7、HDFS的块大小

HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数(dfs.blocksize)来设置,默认大小在Hadoop2.x/3.x版本是128M,3.x版本是64M

例如:

​ 如果寻址时间为10ms,传输时间=10ms/0.01=1s(寻址时间为传输时间的1%为最佳),若目前磁盘传输速率为100MB/s,则block块大小 = 1s * 100MB/s = 100MB,所有块大小设置为128M比较合适

  • HDFS的块设置太小,会增大寻址时间(寻址时间大于传输时间),程序一直在找块的开始位置
  • HDFS的块设置太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间(传输时间远大于寻址时间),会导致处理数据非常慢
  • 寻址时间与传输时间的比例为1%时,为最佳状态
  • HDFS的块大小设置主要取决于磁盘传输速率

3 HDFS shell CLI

Hadoop提供了文件系统的shell命令行客户端,使用方法如下:

hdfs [options] subcommand [subcommand options] subcommand: admin commands / client command / daemon commands

跟文件系统读写相关的命令是 hdfs dfs [generic options]

  • HDFS Shell CLI支持操作多种文件系统,包括本地文件系统(file:)、分布式文件系统(hdfs://nn:8020)等
  • 操作的是什么文件系统取决于URL中的前缀协议
  • 如果没有指定前缀,则将会读取环境变量中的fs.defaultFS属性,以该属性值作为默认文件系统
hdfs dfs -ls file:///      # 操作本地文件系统(客户端所在的机器)
hdfs dfs -ls hdfs://node1:8020/    # 操作HDFS分布式文件系统
hdfs dfs -ls /     # 直接跟目录,没有指定协议,将加载读取fs.defaultFS属性默认值

3.1 HDFS Shell CLI客户端

hadoop dfs、hdfs dfs、hadoop fs 三者区别

  • hadoop dfs 只能操作HDFS文件系统(包括与Local FS间的操作),不过已经Deprecated
  • hdfs dfs 只能操作HDFS文件系统(包括与Local FS间的操作),常用
  • hadoop fs 可操作任意操作系统(不仅仅是hdfs文件系统,适用范围更广)

目前版本官方推荐使用hadoop fs

3.2 HDFS Shell 常用命令

-mkdir创建目录

hadoop fs -mkdir [-p] <path>
# path 为待创建目录
# -p 表示沿着路径创建父目录

-ls 查看指定目录下内容

hadoop fs -ls [-h] [-R] [<path> ... ]
# path 指定目录路径
# -h 人性化显示文件size
# -R 递归查看指定目录及其子目录 

-put上传文件至指定目录下

hadoop fs -put [-f] [-p] <localsrc>... <dst>
# -f 覆盖目录文件(如果目标文件存在,则覆盖)
# -p 保留访问和修改时间,所有权和权限
# localsrc 本地文件系统(客户端所在机器)
# dst 目标文件系统(HDFS)

-copyFromLocal从本地文件系统拷贝文件至HDFS

(等同于put,习惯上使用put)

hadoop fs -copyFromLocal <localsrc>... <dst>

-moveFromLocal剪切本地文件系统文件至HDFS

(即从本地剪切文件至HDFS)

hadoop fs -moveFromLocal <localsrc>... <dst>
# 和-put功能相似,只不过上传结束会删除源数据

-appendToFile追加文件至一个已存在的文件中

hadoop fs -appendToFile <localsrc> ... <dst> 

-cat\-head\-tail查看HDFS文件内容

hadoop fs -cat <src> ...
# 对于大文件内容读取,慎重
hadoop fs -head <file>
# 查看文件前1kB的内容
hadoop fs -tail [-f] <file>
# 查看文件最后1kB的内容
# -f 选择可以动态显示文件中追加的内容

-get\coptToLocal\-getmerge下载HDFS文件

(从HDFS拷贝文件至本地)

hadoop fs -get [-f] [-p] <src>... <localdst>
# 下载文件至本地文件系统指定目录,localdst必须是目录
# -f 覆盖目标文件(如果本地文件系统存在该文件,则覆盖) 
# -p 保留访问和修改时间,所有权和权限hadoop fs -copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst> 
# 等同于get,习惯上使用get
hadoop fs -getmerge [-n1] [-skip-empty-file] <src> <localdst>
# 下载多个文件合并到本地文件系统的一个文件中
# -n1 表示在每个文件的末尾添加换行符

-cp拷贝HDFS文件

hadoop fs -cp [-f] <src> ... <dst>
# -f 覆盖目标文件(若目标文件存在,则覆盖)

-appendToFile追加数据到HDFS文件中

hadoop fs -appendToFile <localsrc>... <dst>
# 将所给给定的本地文件的内容追加到给定的dst文件
# 若dst文件不存在,将创建文件
# 如果<localsrc>为-,则输入为从标准输入中读取

-df查看HDFS磁盘空间

hadoop fs -df [-h] [<path>...]
# 显示文件系统的容量,可以空间和已用空间

-du查看HDFS文件使用的空间量

hadoop fs -du [-s] [-h] <path>...
# -s 表示显示指定路径文件长度的汇总摘要,而部署单个文件的摘要
# -h 表示人性化显示

-mvHDFS数据移动

hadoop fs -mv <src> ... <dst>
# 移动文件至指定文件夹
# 可以使用该命令移动数据、重命名文件

-rm -r删除文件/文件夹

hadoop fs -rm -r 路径
# -r 表示递归

-setrep修改HDFS文件副本个数

hadoop fs -setrep [-R] [-w] <rep> <path>...
# 修改指定文件的副本个数
# -R 表示递归,修改文件夹及其下所有
# -w 客户端是否等待副本修改完毕

说明:

​ 这里设置的副本数只是记录在NameNode的元数据中,是否真的会有这么多副本,还得看DataNode的数量。因为目前只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10。

-chgrp\-chmod\-chown修改文件权限

-chgrp、-chmod、-chown:Linux文件系统中的用法一样

hadoop fs  -chmod 666 文件所在路径
hadoop fs  -chown  nhk:nhk 文件所在路径

相关文章:

07-HDFS入门及shell命令

1 文件系统 是一种存储和组织数据的方法&#xff0c;它使得文件访问和查询变得容易使得文件和树形目录的抽象逻辑概念代替了磁盘等物理设备使用数据块的概念&#xff0c;用户使用文件系统来保存数据不必关心数据底层存在硬盘哪里&#xff0c;只需记住这个文件的所属目录和文件…...

TiDB在科捷物流神州金库核心系统的应用与实践

业务背景 北京科捷物流有限公司于2003年在北京正式成立&#xff0c;是ISO质量管理体系认证企业、国家AAAAA级物流企业、海关AEO高级认证企业&#xff0c;注册资金1亿元&#xff0c;是中国领先的大数据科技公司——神州控股的全资子公司。科捷物流融合B2B和B2C的客户需求&#…...

React 18 更新 state 中的数组

参考文章 更新 state 中的数组 数组是另外一种可以存储在 state 中的 JavaScript 对象&#xff0c;它虽然是可变的&#xff0c;但是却应该被视为不可变。同对象一样&#xff0c;当想要更新存储于 state 中的数组时&#xff0c;需要创建一个新的数组&#xff08;或者创建一份已…...

【css】css中使用变量var

CSS 变量可以有全局或局部作用域。 全局变量可以在整个文档中进行访问/使用&#xff0c;而局部变量只能在声明它的选择器内部使用。 如需创建具有全局作用域的变量&#xff0c;请在 :root 选择器中声明它。 :root 选择器匹配文档的根元素。 如需创建具有局部作用域的变量&am…...

判断自己网络所在的NAT类型

文章目录 各NAT类型介绍软件准备流程 各NAT类型介绍 NAT0: OpenInternet&#xff0c;没有经过NAT地址转换&#xff0c;公网IP NAT1: Full Cone NAT&#xff0c;动态家宽可以达到最优的状态&#xff0c;外网设备可以主动发信息给NAT1网络内的设备。 NAT2: Address-Restricted C…...

ClickHouse(十九):Clickhouse SQL DDL操作-1

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…...

小程序保留2位小数据,不四舍五入

方法1&#xff1a; parseInt toFixed /* * 保留2位小数&#xff0c;不四舍五入 * 5.992550 >5.99 , 2 > 2.00 * */ const toFixed2Decimal (value) > {return (parseInt(value*100)/100).toFixed(2) } console.log(587.67*100) console.log(toFixed2Decimal(587.67…...

【linux-nginx】nginx限流以及控制访问方法

一、限流 可以使用一些模块和指令来实现限流。以下是一些常用的方法&#xff1a; 使用 ngx_http_limit_req_module 模块&#xff1a;该模块可以限制每个客户端的请求速率。你可以在 Nginx 的配置文件中启用该模块&#xff0c;并使用 limit_req_zone 指令来定义限流规则。例如…...

菜单和内容滚动的联动原理及代码

之前写代码有个需求&#xff1a;左侧是一个菜单&#xff0c;右边是内容&#xff0c;点击左侧菜单右边内容滚动到对应位置&#xff0c;右边内容滚动到某位置时&#xff0c;左侧菜单也会选中对应的菜单项。UI如下&#xff1a;这是大多网站的移动端都会有的需求。 解决方案一&…...

Python爬虫:单线程、多线程、多进程

前言 在使用爬虫爬取数据的时候&#xff0c;当需要爬取的数据量比较大&#xff0c;且急需很快获取到数据的时候&#xff0c;可以考虑将单线程的爬虫写成多线程的爬虫。下面来学习一些它的基础知识和代码编写方法。 一、进程和线程 进程可以理解为是正在运行的程序的实例。进…...

超强的Everything,吊打系统自带文件搜索功能!

目录 一、软件简介 二、软件下载 三、软件说明 一、软件简介 Everything是一款由David OReilly开发的电脑搜索软件&#xff0c;它可以帮助用户快速找到电脑上的文件和文件夹。与其他搜索工具不同的是&#xff0c;Everything使用了一种非常快速和高效的搜索算法&#xff0c…...

flink配置参数

flink-conf.yaml 基础配置 # jobManager 的IP地址jobmanager.rpc.address: localhost# JobManager 的端口号jobmanager.rpc.port: 6123# JobManager JVM heap 内存大小jobmanager.heap.size: 1024m# TaskManager JVM heap 内存大小taskmanager.heap.size: 1024m# 每个 TaskMan…...

学习Vue:安装Vue.js和设置开发环境

当您决定进入现代前端开发的世界&#xff0c;Vue.js 无疑是一个令人激动的选择。它以其简洁、灵活和高效的特点在开发者社区中备受赞誉。本文将为您详细介绍如何安装 Vue.js 并设置开发环境&#xff0c;让您能够迅速开始编写 Vue 应用程序。 步骤1&#xff1a;安装 Node.js 和 …...

代理技术在网络安全、爬虫和数据隐私中的多重应用

1. Socks5代理&#xff1a;灵活的数据中转 Socks5代理协议在网络通信中起着关键作用。与其他代理技术不同&#xff0c;Socks5代理不仅支持TCP连接&#xff0c;还能够处理UDP流量&#xff0c;使其在需要实时数据传输的场景中表现尤为出色。通过将请求和响应中转到代理服务器&am…...

Python 3 使用Hadoop 3之MapReduce总结

MapReduce 运行原理 MapReduce简介 MapReduce是一种分布式计算模型&#xff0c;由Google提出&#xff0c;主要用于搜索领域&#xff0c;解决海量数据的计算问题。 MapReduce分成两个部分&#xff1a;Map&#xff08;映射&#xff09;和Reduce&#xff08;归纳&#xff09;。…...

KU Leuven TU Berlin 推出“RobBERT”,一款荷兰索塔 BERT

荷兰语是大约24万人的第一语言&#xff0c;也是近5万人的第二语言&#xff0c;是继英语和德语之后第三大日耳曼语言。来自比利时鲁汶大学和柏林工业大学的一组研究人员最近推出了基于荷兰RoBERTa的语言模型RobBERT。 谷歌的BERT&#xff08;来自Transformers的B idirectional …...

Postern中配置和使用Socks5代理指南

在Postern中配置和使用Socks5代理&#xff0c;可以为你的爬虫项目提供更灵活、更可靠的网络连接。本文将向你分享如何在Postern中配置和使用Socks5代理的方法&#xff0c;解决可能遇到的问题 配置和使用Socks5代理的步骤&#xff1a; 1.了解Socks代理&#xff1a;了解Socks5代…...

android 窗口级模糊实现方式

在Android上实现窗口级模糊效果有多种方法&#xff0c;下面列出了其中两种常用的实现方式&#xff1a; RenderScript模糊效果&#xff1a; 使用ScriptIntrinsicBlur类在RenderScript中实现模糊效果。创建一个RenderScript实例并将要模糊的图像传递给它。创建一个ScriptIntrinsi…...

面试热题(数组中的第K个最大元素)

给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 输入: [3,2,1,5,6,4] 和 k 2 输出: 5提到数组中最大元素&#xff0c;我们往往想到就是先给数组…...

HTTP2协议介绍

前言 HTTP是现代互联网通信的基础协议之一&#xff0c;早在1991年&#xff0c;HTTP/0.9版本就诞生了&#xff0c;之后又陆续发布了HTTP/1.0和HTTP/1.1&#xff0c;为互联网应用提供了更高效和可靠的通信方式。 随着时间的推移&#xff0c;互联网的规模和复杂性不断扩大&#x…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...