Hadoop学习笔记(二):HDFS

本文详细介绍了Hadoop的分布式文件系统HDFS,包括其设计目标、组成架构、文件块大小设置、Shell操作、客户端API、NameNode与SecondaryNameNode的工作机制,以及数据完整性、故障处理和新特性。HDFS适合大规模数据的一次写入、多次读取场景,不支持文件随机修改。重点讨论了NameNode的角色、DataNode的职责、客户端如何与HDFS交互,以及NameNode和DataNode的故障恢复策略。同时,还提到了HDFS的配置优化,如文件块大小选择和安全模式的退出条件。
摘要由CSDN通过智能技术生成


本文通过学习尚硅谷视频(https://www.bilibili.com/video/BV1F5411e79W?p=48)整理学习笔记所得。

HDFS概述

  • 产生背景:随着数据量越来越大,一个操作系统存不下所有数据,因此分配到更多的操作系统中,由于数据分开存放,因此不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。
  • 定义:HDFS(Hadoop Distributed File System)是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
  • 使用场景:**适合一次写入,多次读出的场景,且不支持文件的修改。**适合用来做数据分析,并不适合用来做网盘应用。
  • 优点:
    高容错性:数据自动保存多个副本。通过增加多个副本的形式,可以提高容错性;某一个副本丢失后,可以自动恢复,保持设定的副本数量。
    适合处理大数据:数据规模,处理的数据规模能够达到GB、TB、甚至PB。文件规模,能够处理百万规模以上的文件数量,数量相当之大。
    可以构建在廉价机器上,通过多副本机制,提高可靠性。
  • 缺点:
    不适合低延时数据访问,比如毫秒级别的存储数据,无法做到。
    无法高效的对大量小文件进行存储:存储大量小文件会占用NameNode大量的内存来存储文件目录和块信息;小文件存储的寻址时间超过读取时间,违反了HDFS的设计目标。
    不支持并发写入:一个文件只能有一个写,不允许多个线程同时写。
    不支持文件随机修改:仅支持数据的追加(append),不支持文件的随机修改。

HDFS组成架构

  • NameNode:就是Master,是一个主管、管理者。
    a. 管理HDFS的名称空间
    b. 配置副本策略:每个文件设置多少个副本
    c. 管理数据块(Block)映射信息
    d. 处理客户端读写请求
  • DateNode:就是Slave,执行NameNode下达的命令。
    a. 存储实际的数据块
    b. 执行数据块的读/写操作
  • Client:客户端
    a. 文件切分:在文件上传到HDFS的时候,Client将文件切分成一个个的Block,然后上传。
    b. 与NameNode交互,获取文件的位置信息。
    c. 与DataNode交互,读取或者写入数据。
    d. Client提供一些命令来管理HDFS,例如NameNode格式化。
    e. Client可以通过一些命令来访问HDFS,比如对HDFS增删改查。
  • Secondary NameNode:并非NameNode的热备。当NameNode不能工作时,并不能马上替换NameNode并提供服务。
    a. 辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode。
    b. 在紧急情况下,可以辅助恢复NameNode数据(部分)。

HDFS文件块大小*

  • HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数(dfs.blocksize)规定的,默认大小在Hadoop2.x版本中是128M(134217728),旧版本是64M。
  • 寻址时间即查找到目标Block的时间,寻址时间为传输时间的1%时,为最佳状态
  • 目前磁盘的传输速率普遍为100MB/s

HDFS文件块大小的设置:主要取决于磁盘的传输速率
如果设置太小,会增加寻址时间。如果设置太大,从磁盘传输数据的时间会明显大于定位这个块所需的时间,导致程序在处理这块数据时,会非常慢。

HDFS的Shell操作

基本语法:$ bin/hadoop fs 具体命令 或者 $ bin/hdfs dfs 具体命令(dfs是fs的实现类)
进行操作前,需保证hdfs和yarn已经启动:$ jps(启动命令:$ sbin/start-yarn.sh$ sbin/start-dfs.sh

命令全部选项

查询hdfs可以使用的选项:$ hdfs dfs

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] <localsrc> ... <dst>]
[-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] [-h] <path> ...]
[-cp [-f] [-p | -p[topax]] <src> ... <dst>]
[-createSnapshot <snapshotDir> [<snapshotName>]]
[-deleteSnapshot <snapshotDir> <snapshotName>]
[-df [-h] [<path> ...]]
[-du [-s] [-h] <path> ...]
[-expunge]
[-find <path> ... <expression> ...]
[-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-getfacl [-R] <path>]
[-getfattr [-R] {-n name | -d} [-e en] <path>]
[-getmerge [-nl] <src> <localdst>]
[-help [cmd ...]]
[-ls [-d] [-h] [-R] [<path> ...]]
[-mkdir [-p] <path> ...]
[-moveFromLocal <localsrc> ... <dst>]
[-moveToLocal <src> <localdst>]
[-mv <src> ... <dst>]
[-put [-f] [-p] [-l] <localsrc> ... <dst>]
[-renameSnapshot <snapshotDir> <oldName> <newName>]
[-rm [-f] [-r|-R] [-skipTrash] <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] <file>]
[-test -[defsz] <path>]
[-text [-ignoreCrc] <src> ...]
[-touchz <path> ...]
[-truncate [-w] <length> <path> ...]
[-usage [cmd ...]]

查询hadoop可以使用的选项:$ hadoop fs(由于dfs是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] <localsrc> ... <dst>]
[-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] [-h] <path> ...]
[-cp [-f] [-p | -p[topax]] <src> ... <dst>]
[-createSnapshot <snapshotDir> [<snapshotName>]]
[-deleteSnapshot <snapshotDir> <snapshotName>]
[-df [-h] [<path> ...]]
[-du [-s] [-h] <path> ...]
[-expunge]
[-find <path> ... <expression> ...]
[-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-getfacl [-R] <path>]
[-getfattr [-R] {-n name | -d} [-e en] <path>]
[-getmerge [-nl] <src> <localdst>]
[-help [cmd ...]]
[-ls [-d] [-h] [-R] [<path> ...]]
[-mkdir [-p] <path> ...]
[-moveFromLocal <localsrc> ... <dst>]
[-moveToLocal <src> <localdst>]
[-mv <src> ... <dst>]
[-put [-f] [-p] [-l] <localsrc> ... <dst>]
[-renameSnapshot <snapshotDir> <oldName> <newName>]
[-rm [-f] [-r|-R] [-skipTrash] <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] <file>]
[-test -[defsz] <path>]
[-text [-ignoreCrc] <src> ...]
[-touchz <path> ...]
[-truncate [-w] <length> <path> ...]
[-usage [cmd ...]]

常用命令

访问监控页面查看HDFS文件变化:服务器名:50070/explorer.html#/

  • 启动Hadoop集群:分开启动hdfs和yarn,$ sbin/start-dfs.sh$ sbin/start-yarn.sh
  • 查询命令有哪些参数 -help:$ hadoop fs -help 命令,例如:$ hadoop fs -help rm
  • 显示目录信息 -ls:查询根目录下$ hadoop fs -ls /,递归查询根目录下所有信息$ hadoop fs -lsr /(一级一级显示)
  • 在HDFS上创建目录 -mkdir:创建多及目录需要带参数-p $ hadoop fs -mkdir -p /a/a
  • 将本地文件剪切到HDFS上 -moveFromLocal:$ hadoop fs -moveFromLocal 文件本地路径 HDFS目的路径
    注意:剪切操作即上传后文件存在HDFS上,本地已经不存在该文件了。
  • 追加一个文件到已经存在的文件末尾 -appendToFile :$ hadoop fs -appendToFile 要追加的内容文件 要追加到哪个文件
  • 显示文件内容 -cat:$ hadoop fs -cat 要查询的文件路径(HDFS的路径)
  • 修改文件所属权限 -chgrp、-chmod、-chown
    修改文件Group:$ hadoop fs -chgrp group_name 文件
    修改文件操作权限:$ hadoop fs -chmod 666 文件路径
    修改文件所有者和组:$ hadoop fs -chown user_name:group_name 文件路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值