day34-s-hadoop-hdfs

day34-s-hadoop-hdfs

hadoop-hdfs

由多台机器联合组成的文件系统

HDFS概述

HDFS产生背景

随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。

HDFS定义

HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
HDFS的使用场景:适合一次写入,多次读出的场景,且不支持文件的随机修改。支持在文件的末尾追加数据。适合用来做数据分析,并不适合用来做网盘应用。

HDFS优缺点

优点

  • 高容错性

    • 数据自动保存多个副本。它通过增加副本的形式,提高容错性

    • 某个副本丢失以后,它可以自动恢复。

    如果某个文件不小心破坏或者丢失,NameNode知道你的文件副本只有2个,就会自动保存一个副本,用来维护自己的机器。但前提是必须有空闲的机器。
    
  • 适合处理大数据

    • 数据规模:能够处理数据规模达到GB、TB甚至PB级别的数据
    适合处理大规模的数据
    如果小数据的话,就不需要使用hadoop,大材小用
    
    • 文件规模
    能够处理百万规模以上的文件数量,数量相当大
    
  • 可构建在廉价机器上;通过多副本机制,提高可靠性。

缺点

1 不适合低延迟数据访问,比如毫秒级的存储数据,是做不到的。
2 无法高效的对大量小文件进行存储
	- 存储大量小文件的话,它会占用NameNode大量的内容来存储文件目录和块信息。这样是不可取的,因为NameNode的内存总是有限的;
	- 小文件存储的寻址时间会超过读取时间,他违反了HDFS的设计目标
3 不支持并发写入、文件随机修改
	- 一个文件只能有一个写,不允许多个线程同时写
	- 仅支持数据append(追加),不支持文件的随机修改

HDFS组成架构

NameNode:就是Master,它是一个主管,管理者
	1 管理HDFS的名称空间
	2 配置副本策略
	3 管理数据块(block)映射信息
	4 处理客户端读写请求
DataNode:就是Slave。NameNode下达命令,DataNode执行实际的操作
	1 存储实际的数据库
	2 执行数据块的读/写操作

Secondary NameNode:

并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。
	1 辅助NameNode,分担其工作量,比如定期合并Fsimnage和Edits,并推送给NameNode
	2 在紧急情况下,可辅助恢复NameNode

Client:就是客户端

操作HDFS的入口
用户操作的入口
1 文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行上传
2 与NameNode交互,获取文件的位置信息
3 与DataNode交互,读取或者写入数据
4 Client提供一些命令来管理HDFS,比如NameNode格式化
5 Client可以通过一些命令来访问HDFS,比如HDFS增删改查

HDFS文件块大小

HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在Hadoop3.1.3版本中是128M,Hadoop2.x 也是128M,Hadoop1.x 是64M
在 etc/hadoop/dfs-default.xml 中可以查询到

不能随意的去改,根据你磁盘的
  • dfs-default.xml

思考:为什么块的大小不能设置太小,也不能设置太大?

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

HDFS的Shell操作

语法格式

hadoop fs 具体命令
或
hdfs dfs 具体命令

命令操作

  • -ls 显示目录信息
-ls 显示目录信息
drwxr-xr-x   - atguigu supergroup          0 2022-04-20 17:44 /input
目录 权限      hadoop用户  组				 大小  最后修改时间     文件名

  • -mkdir 创建目录
hadoop fs -mkdir -p 路径 创建多级目录
  • -moveFromLocal 从本地剪切到hdfs
hadoop fs -moveFormLocal 路径 
  • -appendToFile 追加一个文件到已存在的文件末尾
hadoop fs -appendToFile 
  • -cat 查看文件的内容
hadoop fs -cat 文件
  • -chgrp、 -chmod、-chown 修改文件所属属性
与linux的命令用法一样
hadoop fs -chmod u+x 文件
hadoop fs -chown 123
  • -copyFromLocal 从本地文件系统复制到hdfs
hadoop fs -copyFromLocal 文件 /
或
hadoop fs -put 文件 /
(两个命令 做的事情是一样的)
复制本地的文件到hdfs文件系统上
  • -cp 从hdfs的一个路径拷贝到HDFS的另一个路径
hadoop fs -cp /f1  /f2/
  • -mv 从hdfs的路径的文件,移动到一个指定的目录
hadoop fs -mv /f1/1.txt /f2
  • -getmerge 合并下载多个文件
hadoop fs -getmerge /f1.txt /f2.txt
  • -tail 显示一个文件的末尾
hadoop fs -tail /f1.txt
hadoop fs -tail -f /t1.txt  跟随查看
  • -rm 删除文件或文件夹
hadoop fs -rm 删除文件
hadoop fs -rm -r 删除目录

  • -rmdir 删除空目录
hadoop fs -mkdir /test
hadoop fs -rmdir /test
  • -du 统计文件夹的大小信息
hadoop fs -du -h  显示目录下的所有文件的空间使用情况
hadoop fs -du -s -h 显示当前目录的空间使用情况 
  • -setrep 设置hdfs中文件的副本数量
hadoop fs -setrep 2 文件
注意:
	1 如果副本数大于集群机器的数量,只能存集群机器数量的副本数
		等到机器扩展的时候,NameNode会自动维护副本的数量
	2 只能对文件进行副本的保存,目录不能设置副本数,设置目录相当于设置目录中的文件的副本数

其他

mapreduce 是主要写功能和业务的,做一个数据的分析的工作

通过java代码能够操作HDFS

数据传输

传输的本质:通过IO读、IO写

hdfs客户端

通过命令行取操作HDFS可被看作是HDFS的客户端
通过Java代码取操作HDFS,Java代码可以看作是HDFS的客户端

读数据和写数据?

读数据和写数据是一个块一个块取操作的,(这个块可能存在一台机器,或者多台机器)
读数据:一个一个块去读取,读取完后,在本地做一个合并
写数据:客户端对数据进行切分成块,然后一块一块的上传到机器上。
posted @ 2022-04-22 09:32  黎白昼  阅读(26)  评论(0)    收藏  举报