关键词:
文章目录
- 1 HDFS 概述
- 2 HDFS 的 Shell操作(开发重点)
- 3 HDFS 的 API操作
- 4 HDFS 的读写流程(面试重点)
- 5 NameNode 和SecondaryNameNode
- 6 DataNode
1 HDFS 概述
1.1 HDFS 产生背景及定义
HDFS 产生背景
随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS 只是分布式文件管理系统中的一种。
HDFS 定义
HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
HDFS 的使用场景:适合一次写入,多次读出的场景。一个文件经过创建、写入和关闭之后就不需要改变。
1.2 HDFS 优缺点
HDFS优点
(1)高容错性:数据自动保存多个副本。它通过增加副本的形式,提高容错性。某一个副本丢失以后,它可以自动恢复。
(2)适合处理大数据:数据规模上能够处理数据规模达到GB、TB、甚至PB级别的数据;文件规模:能够处理百万规模以上的文件数量,数量相当之大。
(3)可构建在廉价机器上,通过多副本机制,提高可靠性。
HDFS缺点
(1)不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。
(2)无法高效的对大量小文件进行存储。 存储大量小文件的话,它会占用NameNode大量的内存来存储文件目录和块信息。这样是不可取的,因为NameNode的内存总是有限的;小文件存储的寻址时间会超过读取时间,它违反了HDFS的设计目标。
(3)不支持并发写入、文件随机修改。一个文件只能有一个写,不允许多个线程同时写;仅支持数据append(追加),不支持文件的随机修改。
1.3 HDFS 组成架构
1)NameNode
(nn):就是Master,它是一个主管、管理者。
管理HDFS的名称空间;配置副本策略;
管理数据块(Block)映射信息;处理客户端读写请求。
(2)DataNode
:就是Slave。NameNode下达命令,DataNode执行实际的操作。
存储实际的数据块;执行数据块的读/写操作。
(3)Client
:就是客户端。
文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行上传;
与NameNode交互,获取文件的位置信息;与DataNode交互,读取或者写入数据;
Client提供一些命令来管理HDFS,比如NameNode格式化;Client可以通过一些命令来访问HDFS,比如对HDFS增删查改操作。
(4)Secondary NameNode
:并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。
辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode ;
在紧急情况下,可辅助恢复NameNode。
1.4 HDFS 文件块大小(面试重点)
(1)HDFS中的文件在物理上是分块存储(Block ), 块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在Hadoop2.x/3.x版本中是128M,1.x版本中是64M。
(2)如果寻址时间约为10ms,即查找到目标block的时间为10ms。
(3)寻址时间为传输时间的1%时,则为最佳状态。(专家)因此,传输时间=10ms/0.01=1000ms=1s
(4)而目前磁盘的传输速率普遍为100MB/s。
思考:为什么块的大小不能设置太小,也不能设置太大?
(1)HDFS的块设置太小,会增加寻址时间,程序一直在找块的开始位置;
(2)如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢。
总结:HDFS块的大小设置主要取决于磁盘传输速率。
2 HDFS 的 Shell操作(开发重点)
2.1 基本语法
hadoop fs
具体命令 或者 hdfs dfs
具体命令,这两个是完全相同的。
2.2 命令大全
[Tom@hadoop102 hadoop-3.1.3]$ bin/hadoop fs
Usage: hadoop fs [generic options]
[-appendToFile <localsrc> ... <dst>]
[-cat [-ignoreCrc] <src> ...]
[-checksum <src> ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] [-l] [-d] [-t <thread count>] <localsrc> ... <dst>]
[-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] [-e] <path> ...]
[-cp [-f] [-p | -p[topax]] [-d] <src> ... <dst>]
[-createSnapshot <snapshotDir> [<snapshotName>]]
[-deleteSnapshot <snapshotDir> <snapshotName>]
[-df [-h] [<path> ...]]
[-du [-s] [-h] [-v] [-x] <path> ...]
[-expunge]
[-find <path> ... <expression> ...]
[-get [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-getfacl [-R] <path>]
[-getfattr [-R] -n name | -d [-e en] <path>]
[-getmerge [-nl] [-skip-empty-file] <src> <localdst>]
[-head <file>]
[-help [cmd ...]]
[-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] [<path> ...]]
[-mkdir [-p] <path> ...]
[-moveFromLocal <localsrc> ... <dst>]
[-moveToLocal <src> <localdst>]
[-mv <src> ... <dst>]
[-put [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
[-renameSnapshot <snapshotDir> <oldName> <newName>]
[-rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ...]
[-rmdir [--ignore-fail-on-non-empty] <dir> ...]
[-setfacl [-R] [-b|-k -m|-x <acl_spec> <path>]|[--set <acl_spec> <path>]]
[-setfattr -n name [-v value] | -x name <path>]
[-setrep [-R] [-w] <rep> <path> ...]
[-stat [format] <path> ...]
[-tail [-f] [-s <sleep interval>] <file>]
[-test -[defsz] <path>]
[-text [-ignoreCrc] <src> ...]
[-touch [-a] [-m] [-t TIMESTAMP ] [-c] <path> ...]
[-touchz <path> ...]
[-truncate [-w] <length> <path> ...]
[-usage [cmd ...]]
2.3 常用命令实操
准备工作
(1)启动 Hadoop集群(方便后续的测试)
[Tom@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
[Tom@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
(2)-help:输出这个命令参数
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -help rm
-rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ... :
Delete all files that match the specified file pattern. Equivalent to the Unix
command "rm <src>"
-f If the file does not exist, do not display a diagnostic message or
modify the exit status to reflect an error.
-[rR] Recursively deletes directories.
-skipTrash option bypasses trash, if enabled, and immediately deletes <src>.
-safely option requires safety confirmation, if enabled, requires
confirmation before deleting large directory with more than
<hadoop.shell.delete.limit.num.files> files. Delay is expected when
walking over large directory recursively to count the number of
files to be deleted before the confirmation.
(3)创建 /ThreeKingdoms文件夹
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /ThreeKingdoms
上传
(1)-moveFromLocal
:从本地剪切到HDFS
[Tom@hadoop102 hadoop-3.1.3]$ vim shu.txt
Liu Bei
Zhuge Liang
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -moveFromLocal ./shu.txt /ThreeKingdoms
(2)-copyFromLocal
:从本地文件系统中拷贝文件到 HDFS路径去
[Tom@hadoop102 hadoop-3.1.3]$ vim wu.txt
Sun Quan
Zhou Yu
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -copyFromLocal wu.txt /ThreeKingdoms
(3)-put
:等同于 copyFromLocal,生产环境更习惯用 put
[Tom@hadoop102 hadoop-3.1.3]$ vim wei.txt
Cao Cao
Xiahou Dun
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -put wei.txt /ThreeKingdoms
(4)-appendToFile
:追加一个文件到已经存在的文件末尾
[Tom@hadoop102 hadoop-3.1.3]$ vim shu2.txt
Guan Yu
Zhang Fei
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -appendToFile shu2.txt /ThreeKingdoms/shu.txt
下载
(1)-copyToLocal
:从 HDFS拷贝到本地
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -copyToLocal /ThreeKingdoms/shu.txt
(2)-get
:等同于 copyToLocal,生产环境更习惯用 get
[Tom@hadoop102 hadoop-3.1.3]$ rm -rf shu.txt
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -copyToLocal /ThreeKingdoms/shu.txt
HDFS直接操作
(1)-ls
: 显示目录信息
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -ls /ThreeKingdoms
-rw-r--r-- 3 Tom supergroup 38 2021-06-15 16:11 /ThreeKingdoms/shu.txt
-rw-r--r-- 3 Tom supergroup 19 2021-06-15 16:00 /ThreeKingdoms/wei.txt
-rw-r--r-- 3 Tom supergroup 17 2021-06-15 15:54 /ThreeKingdoms/wu.txt
(2)-cat
:显示文件内容
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -cat /ThreeKingdoms/shu.txt
2021-06-15 16:31:48,592 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
Liu Bei
Zhuge Liang
Guan Yu
Zhang Fei
(3)-chgrp、 -chmod、 -chown
:与Linux文件系统中的用法一样,修改文件所属权限
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -chmod 666 /ThreeKingdoms/shu.txt
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -chown Tom:Tom /ThreeKingdoms/shu.txt
(4)-mkdir
:创建路径
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /jinguo
(5)cp
:从 HDFS的一个路径拷贝到 HDFS的另一个路径
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -cp /ThreeKingdoms/wei.txt /jinguo
(6)-mv
:在 HDFS目录中移动文件
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -mv /ThreeKingdoms/wu.txt /jinguo
(7)-tail
:显示一个文件的末尾 1kb的数据
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -tail /jinguo/wei.txt
(8)-rm
:删除文件或文件夹
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -rm /ThreeKingdoms/wei.txt
Deleted /ThreeKingdoms/wei.txt
(9)-rm -r
:递归删除目录及目录里面内容
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -rm -r /ThreeKingdoms
Deleted /ThreeKingdoms
(10)-du
:统计文件夹的大小信息
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -du -s -h /jinguo
74 222 /jinguo
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -du -h /jinguo
38 114 /jinguo/shu.txt
19 57 /jinguo/wei.txt
17 51 /jinguo/wu.txt
说明: 74表示文件大小; 222表示 74*3个副本; ;/jinguo表示查看的目录
(11)-setrep
:设置 HDFS中文件的副本数量
[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -setrep 5 /jinguo/shu.txt
Replication 5 set: /jinguo/shu.txt
这里设置的副本数只是记录在 NameNode的元数据中,是否真的会有这么多副本,还得看 DataNode的数量。因为目前只有 3台设备,最多也就 3个副本,只有节点数的增加到 10台时副本数才能达到 10。
3 HDFS 的 API操作
3.1 客户端环境准备
(1)找到资料包路径下的Windows依赖文件夹,拷贝 hadoop-3.1.0到非中文路径,比如(d:\\)
(2)配置 HADOOP_HOME环境变量(我的电脑->属性->高级系统设置->环境变量)
(3)配置 Path环境变量(如果环境变量不起作用,可以重启电脑试试。)
(4)在 IDEA中创建一个 Maven工程HdfsClientDemo,并导入相应的依赖坐标 +日志添加
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.1.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
</dependency>
</dependencies>
在项目的src/main/resources目录下,新建一个文件,命名为“ log4j.properties”,在文件中填入
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] -%m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] -%m%n
(5)创建包名 com.Tom.hdfs
(6)创建 HdfsClient类
(7)执行程序
客户端去操作 HDFS时 ,是有一个用户身份的。默认情况下, HDFS客户端 API会从采用 Windows默认用户访问 HDFS,会报权限异常错误。所以在访问 HDFS时,一定要配置用户。
3.2 HDFS的 API案例实操
package com.Tom.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
/**
* 客户端代码常用套路
* 1. 获取一个客户端对象
* 2. 执行相关的操作命令
* 3. 关闭资源
* HDFS zookeeper
*/
public class HdfsClient
private FileSystem fs;
@Before
public void init() throws URISyntaxException, IOException, InterruptedException
// 连接的集群nn地址
URI uri = new URI("hdfs://hadoop102:8020");
// 创建一个配置文件
Configuration configuration = new Configuration();
configuration.set("dfs.replication", "2");
// 创建一个用户
String user = "Tom";
// 1. 获取到了一个客户端对象
fs = FileSystem.get(uri, configuration, user);
@After
public void close() throws IOException
// 3. 关闭资源
fs.close();
// 创建目录
@Test
public void testmkdir() throws URISyntaxException, IOException, InterruptedException
// 2. 创建一个文件夹
fs.mkdirs(new Path("/xiyou/huaguoshan"));
// 上传
/**
* 参数优先级
* 代码里的配置 > 在项目资源目录下的配置文件 > hdfs-site.xml > hdfs-default.xml
*
* @throws IOException
*/
@Test
public void testsPut() throws IOException
// 参数解读:参数一:表示删除原数据;参数二:是否允许覆盖;参数三:原数据路径;参数四:目的地路径
fs.copyFromLocalFile(false, true, new Path("E:\\\\LayerData.vtk"), new Path("hdfs://hadoop102/xiyou/huaguoshan"));
// 文件下载
@Test
public void testGet() throws IOException
// 参数的解读:参数一:原文件是否删除;参数二:原文件路径HDFS;参数三:目标地址路径:Win;参数四
// fs.copyToLocalFile(true, new Path("hdfs://hadoop104/xiyou/huaguoshan"), new Path("E:\\\\test.vtk"), true);
fs.copyToLocalFile(false, new Path("hdfs://hadoop102/a.txt"),大数据技术之hadoop(入门)概述运行环境搭建运行模式(代码片段)
...1.3.3MapReduce架构概述1.3.4HDFS、YARN、MapReduce三者关系1.3.5大数据技术生态体系1.3.6推荐系统框架图2Hadoop运行环境搭建(开发重点)2. 查看详情
一文带你了解大数据技术之hadoop(代码片段)
...概述5.3MapReduce架构概述5.4HDFS、YARN、MapReduce三者关系6.大数据技术生态体系7.推荐系统框架 查看详情
hadoop技术之hdfs工作流程与机制
▼往期内容汇总:大数据导论Linux操作系统概述VMwareWorkstation虚拟机使用Linux常用基础命令、系统命令ApacheHadoop概述ApacheHadoop集群搭建HDFS分布式文件系统基础Hadoop技术之HDFSshell操作一、HDFS集群角色与职责官方架构图 主角色&... 查看详情
一文带你了解大数据技术之hdfs
大数据技术之Hadoop-HDFS概述1.HDFS产出背景及定义2.HDFS优缺点3.HDFS组成架构4.HDFS文件块大小1.HDFS产出背景及定义1)HDFS产生背景随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管... 查看详情
hadoop技术之hdfs工作流程与机制apachehadoop概述
...的核心,架构中的主角色。NameNode维护和管理文件系统元数据,包括名称空间目录树结构、文件和块的位置信息、访问权限等信息。 基于此, NameNode成为了访问HDFS的唯一入口。 主角色: namenodeName 查看详情
建议收藏大数据技术之hadoop(生产调优手册)(代码片段)
大数据技术之Hadoop(生产调优手册)1.HDFS—核心参数1.1NameNode内存生产配置1.2NameNode心跳并发配置1.3开启回收站配置2.HDFS—集群压测2.1测试HDFS写性能2.2测试HDFS读性能3.HDFS—多目录3.1NameNode多目录配置3.2DataNode多目录配置3.3... 查看详情
大数据技术之hadoop(生产调优手册)(代码片段)
...FS—多目录3.1NameNode多目录配置3.2DataNode多目录配置3.3集群数据均衡之磁盘间数据均衡4HDFS—集群扩容及缩容4.1添加白名单4.2服役新服务器4.3服务器间数据均衡4.4黑名单退役服 查看详情
尚硅谷大数据hadoop教程-笔记02hdfs(代码片段)
视频地址:尚硅谷大数据Hadoop教程(Hadoop3.x安装搭建到集群调优)尚硅谷大数据Hadoop教程-笔记01【入门】尚硅谷大数据Hadoop教程-笔记02【HDFS】尚硅谷大数据Hadoop教程-笔记03【MapReduce】尚硅谷大数据Hadoop教程-笔记04【Ya... 查看详情
hadoop大数据技术-通过shell命令访问hdfs(代码片段)
通过shell命令访问HDFS1操作命令1.1创建文件夹1.2列出指定的文件和目录1.3上传文件1.4下载文件1.5查看文件1.6删除目录或文件1.7文件或文件夹的复制、移动1.8count统计1.9显示占用的磁盘空间大小2管理命令2.1安全模式相关2.2快照3其他... 查看详情
hadoop——hadoop优势组成大数据技术生态体系系统框架图
...述1.5.3MapReduce架构概述1.5.4HDFS、YARN、MapReduce三者关系1.6大数据技术生态体系1.7推荐系统框架图1.4Hadoop优势(4高)1)高可靠性 查看详情
hadoop技术之hdfsshell操作
▼往期内容汇总:大数据导论Linux操作系统概述VMwareWorkstation虚拟机使用Linux常用基础命令、系统命令ApacheHadoop概述ApacheHadoop集群搭建HDFS分布式文件系统基础一、HDFSshell命令行解释说明介绍命令行界面 (英语: command-line... 查看详情
大数据技术之hadoop(mapreduce)概述序列化(代码片段)
...1.3MapReduce核心思想1.4MapReduce进程1.5官方WordCount源码1.6常用数据序列化类型1.7MapReduce编程规范1.8WordCount案例实操1.8.1本地测试1.8.2提交到集群测试2Hadoop序列化2.1序列化概述2.2自定义bean对象实现序列化接口( 查看详情
hadoop基础之《—hdfs概述》
...。二、HDFS组成1、NameNode(简称NN)存储文件的元数据,如文件名、文件目录结构、文件属性(生成时间、副本数、文件权限),以及每个 查看详情
hadoop组件之-hdfs(ha实现细节)
...meNode的单点问题尤为严重。因为NameNode保存了整个HDFS的元数据信息,一旦NameNode挂掉,整个HDFS就无法访问,同时Hadoop生态系统中依赖于HDFS的各个组件,包括MapReduce、Hive、Pig以及HBas 查看详情
hadoop技术之apachehadoop集群搭建
Spark是大数据体系的明星产品,是一款高性能的分布式内存迭代计算框架,可以处理海量规模的数据。下面就带大家一起来开始学Spark!▼往期内容汇总:大数据导论Linux操作系统概述VMwareWorkstation虚拟机使用Linux... 查看详情
hadoop大数据技术课程总结2021-2022学年第1学期(代码片段)
文章目录Hadoop大数据技术课程总结1.大数据概述1.1大数据时代的4V1.2大数据时代的三次浪潮1.3大数据时代的技术支撑1.4谷歌的3篇论文1.5Hadoop集群规模1.6Hadoop安装过程2.HDFS专题2.1HDFS简介及作用2.2HDFS架构2.3HDFS服务角色2.4HDFS如何读取... 查看详情
大数据入门-五分钟读懂hdfs
目录大数据入门系列文章一、概念二、架构及组件概念三、读写流程四、大白话五、其他大数据入门系列文章最近在收集整理大数据入门文章,各位盆友关注点赞不迷路,每天都要开心鸭!大数据入门系列文章1.大数... 查看详情
尚硅谷大数据技术hadoop教程-笔记06hadoop-生产调优手册(代码片段)
视频地址:尚硅谷大数据Hadoop教程(Hadoop3.x安装搭建到集群调优)尚硅谷大数据技术Hadoop教程-笔记01【大数据概论】尚硅谷大数据技术Hadoop教程-笔记02【Hadoop-入门】尚硅谷大数据技术Hadoop教程-笔记03【Hadoop-HDFS】尚硅... 查看详情