HDFS分布式文件系统01-HDFS架构与SHELL操作

news2024/9/24 5:15:23

HDFS分布式文件系统

    • 学习目标
    • 第一课时
      • 知识点1-文件系统的分类
        • 单机文件系统
        • 网络文件系统
        • 分布式文件系统
      • 知识点2-HDFS架构
      • 知识点3-HDFS的特点
      • 知识点4-HDFS的文件读写流程
      • 知识点5-HDFS的健壮性
    • 第二课时
      • 知识点1-HDFS的Shell介绍
        • HDFS Shell的语法格式如下。
        • HDFS Shell客户端命令中dfs子命令的子命令选项:
          • -ls命令
          • -du
          • -mv
          • -cp
          • -rm
          • -put
          • -cat
          • -help
          • -mkdir
          • -get
        • 知识点2-案例-通过Shell脚本定时采集数据到HDFS

学习目标

使学生了解文件系统的分类,能够描述不同文件系统的特点
使学生熟悉HDFS架构,能够描述HDFS架构的主要组件及其作用
使学生了解HDFS的特点,能够简述HDFS的特点
使学生掌握HDFS的文件读写原理,能够叙述HDFS读写文件的流程
使学生熟悉HDFS的健壮性,能够叙述HDFS心跳机制、副本机制和负载均衡等策略
使学生掌握HDFS的Shell操作,能够灵活运用HDFS Shell命令操作HDFS
使学生掌握HDFS的Java API操作,能够灵活使用Java API编写应用程序操作HDFS
使学生熟悉Federation机制,能够描述Federation机制的结构、特点并实现Federation机制。
使学生了解Erasure Coding,能够简述Erasure Coding节省存储空间的原理

第一课时

知识点1-文件系统的分类

单机文件系统

单机文件系统是所有文件系统的基础,也是我们常用的一种文件系统,它通过单台计算机的本地磁盘存储文件,依靠操作系统提供的文件系统实现文件的存储和管理。随着互联网的兴起,数据对存储容量要求越来越高,单机文件系统的缺点逐渐显现出来。

网络文件系统

网络文件系统可以看作单机文件系统的一个网络抽象,其本质与单机文件系统相似,网络文件系统可以通过网络共享文件,用户可以像访问本地磁盘的文件一样便捷的访问远端计算机的文件。网络文件系统的出现一定程度上解决了单机文件系统存储容量的瓶颈,用户可以将文件存储在网络文件系统和本地文件系统两个位置。网络文件系统没有解决单机文件系统性能低、可靠性低的瓶颈。

分布式文件系统

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

知识点2-HDFS架构

HDFS架构图如下:
在这里插入图片描述

(1)Block

Block是HDFS文件系统中最小的存储单位,通常称之为数据块。
在HDFS文件系统中存储的文件会被拆分成多个Block,每个Block作为独立的单元进行存储,同一文件的多个Block通常存放在不同的DataNode。
在Hadoop 3.x版本中,默认Block大小是128M。
注意:如果文件大小或者文件被拆分后的Block没有达到128MB,则Block的大小也会根据实际情况进行调整。

(2)MetaData

MeataData用于记录HDFS文件系统的相关信息,这些信息称之为元数据。
在HDFS文件系统中,为了确保元数据的快速访问,元数据会保存在内存中。为了防止元数据的丢失,会在本地磁盘中生成Fsimage文件备份元数据。
Hadoop集群运行的过程中,用户频繁操作HDFS文件系统,内存中的元数据变化会非常快。如果内存中的元数据一旦更新,本地磁盘的Fsimage文件会同步更新,这些操作非常消耗NameNode资源。
HDFS文件系统引入了Edits文件,该文件以追加方式记录内存中元数据的每一次变化,如果NameNode宕机,可以通过合并Fsimage文件和Edits文件的方式恢复内存中存储的元数据。

(3)NameNode

NameNode是HDFS集群的名称节点,通常称为主节点。如果NameNode由于故障原因宕机无法使用,那么用户就无法访问HDFS。NameNode作为HDFS的主节点,起着至关重要的作用,主要功能如下:
管理文件系统的命名空间。
处理客户端对文件的读写请求。
维护HDFS的元数据。
维护和管理DataNode,并协调DataNode为客户端发起的读写请求提供服务。

(4)DataNode

DataNode是HDFS集群中的数据节点,通常称为从节点,主要功能如下。
存储Block。
根据NameNode的指令,对Block进行创建、复制、删除等操作。
定期向NameNode汇报自身存储的Block列表以及健康状态。
负责为客户端发起的读写请求提供服务。

(5)SecondaryNameNode

SecondaryNameNode是HDFS集群中的辅助节点;
定期从NameNode拷贝Fsimage文件并合并Edits文件,将合并结果发送给NameNode;
SecondaryNameNode和NameNode保存的Fsimage和Edits文件相同,可以作为NameNode的冷备份,当NameNode宕机无法使用时,可以通过手动操作将SecondaryNameNode切换为NameNode。

知识点3-HDFS的特点

(1)存储大文件
(2)高容错性
(3)简单的一致性模型
(4)移动计算比移动数据更经济
(5)可移植性
在这里插入图片描述

知识点4-HDFS的文件读写流程

客户端向HDFS写文件的具体流程。

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

客户端从HDFS读文件的具体流程。

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

知识点5-HDFS的健壮性

(1)心跳机制

在这里插入图片描述

(2)副本机制

在这里插入图片描述

(3)数据完整性校验

在这里插入图片描述

(4)安全模式

在这里插入图片描述

(5)快照

在这里插入图片描述

高校教辅平台(http://tch.ityxb.com)发放测试题以巩固本节课的学习内容。

第二课时

知识点1-HDFS的Shell介绍

HDFS Shell类似于Linux操作系统中的Shell,都是一种命令语言,可以完成对HDFS上文件和目录的一系列操作。

HDFS Shell的语法格式如下。
hdfs [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]

OPTIONS:可选,用来调试Hadoop。
SUBCOMMAND:表示HDFS Shell的子命令,用于操作HDFS。
SUBCOMMAND OPTIONS:表示HDFS Shell子命令的选项。

具体参考:
https://hadoop.apache.ac.cn/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html

HDFS Shell客户端命令中dfs子命令的子命令选项:

ls:List files 列文件
du: Disk usage 磁盘使用率
mv: Move file 移动文件
cp: Copy file 复制文件
rm = ReMove
cat: concatenate 连锁 把多个文本连接起来
mkdir:Make Directory(创建目录)
在这里插入图片描述

-ls命令
hdfs dfs –ls [-S][-C][-r][-h][-R] <path>

参数-S:可选,用于根据文件的大小,按照由大到小的顺序显示指定目录的内容。
参数-C:可选,用于显示指定目录下文件和子目录的路径,不显示关于文件和子目录的其他信息。
参数-r:可选,用于根据文件的大小,按照由小到大的顺序显示指定目录的内容。
参数-h:可选,用于将默认的文件大小(字节数)格式化为便于查看的格式进行显示。
参数-R:可选,用于递归显示指定目录及其子目录的信息。
参数path:用于指定查看的目录。

hdfs dfs –ls -S /data

参数-S:可选,用于根据文件的大小,按照由大到小的顺序显示指定目录的内容。

hdfs dfs –ls -r -h /data

参数-r:可选,用于根据文件的大小,按照由小到大的顺序显示指定目录的内容。
参数-h:可选,用于将默认的文件大小(字节数)格式化为便于查看的格式进行显示。

hdfs dfs –ls -R -C /data

递归显示目录/data及其子目录的信息,并且信息中仅显示文件和子目录的路径。
参数-C:可选,用于显示指定目录下文件和子目录的路径,不显示关于文件和子目录的其他信息。
参数-R:可选,用于递归显示指定目录及其子目录的信息。

-du

用于查看HDFS指定目录下每个文件和子目录大小,语法格式如下。

hdfs dfs -du [-s] [-h] <path>

参数-s:可选,用于查看指定目录下所有文件和子目录的总大小。
参数-h:可选,用于将默认的文件和子目录大小(字节数)格式化为便于查看的格式进行显示。

hdfs dfs –du –h /data

查看HDFS的目录/data中,每个文件和子目录的大小,并且将默认的文件和子目录大小格式化为便于查看的格式进行显示。

-mv

-mv用于移动HDFS指定目录或文件,语法格式如下。

hdfs dfs -mv <src> <dst>

参数src:用于指定要移动的目录或文件。
参数dst:用于将目录或文件移动到指定的目录,如果指定的目录不存在,并且与移动的目录或文件处于同一路径下,那么会对文件或者目录进行重命名操作。
注意:移动的目录或文件,在指定的目录中不能存在。

将目录/data中的子目录/dataChild1移动到目录/data/dataChild中。

hdfs dfs –mv /data/dataChild1 /data/dataChild

将目录/data中的文件dataA重命名为dataA_New。

hdfs dfs –mv /data/dataA /data/dataA_New
-cp

-cp用于复制HDFS指定目录或文件,语法格式如下

hdfs dfs -cp <src> <dst>

参数src:用于指定要复制的目录或文件,可以同时复制多个文件或目录,每个文件或目录用空格进行分隔。
参数dst:用于将目录或文件复制到指定的目录,该目录必须已经存在,并且要复制的文件或目录在指定的目录中不能存在。如果复制的是单文件或目录,则可以重新命名复制后的文件或目录名称。

将目录/data下的文件dataA_New和dataB复制到目录/data/dataChild。

hdfs dfs -ls -R /data
hdfs dfs -cp /data/dataA_New /data/dataB /data/dataChild

将目录/data下的文件dataA_New复制到子目录/dataChild,并且重命名为dataA。

hdfs dfs -cp /data/dataA_New /data/dataChild/dataA
-rm

-rm用于删除HDFS指定目录或文件,语法格式如下。

hdfs dfs -rm [-f] [-r] [-skipTrash] [-safely] <src>

参数-f:可选,用于判断删除的目录或文件是否存在。
参数-r:可选,用于递归删除指定目录中的所有子目录和文件。
参数-skipTrash:可选,表示删除的文件或目录不会放入回收站。
参数-safely:可选,用于启动安全确认,当删除目录时会提示是否删除,避免误删。

使用子命令选项-rm删除目录/data的子目录/dataChild。

hdfs dfs –rm –r /data/dataChild
-put

-put用于将本地文件系统中指定文件上传到HDFS指定目录,语法格式如下。

hdfs dfs -put [-f] <localsrc> <dst>

参数-f:可选,用于判断上传的文件在HDFS指定目录是否存在。如果存在则上传的文件会替换HDFS指定目录中已经存在的文件。
参数localsrc:用于指定本地文件系统中上传的文件,可以同时上传多个文件。
参数dst:用于指定上传到HDFS的目录,该目录必须存在。

使用子命令选项-put将本地文件系统中/export/data目录下的文件a.txt和b.txt,上传到HDFS的目录/data。

 hdfs dfs –put /export/data/a.txt /export/data/b.txt /data
-cat

-cat用于查看HDFS指定文件内容,语法格式如下。

hdfs dfs –cat <src>

参数src:用于指定查看的文件。

使用子命令选项-cat查看目录/data中文件a.txt的内容。

hdfs dfs –cat /data/a.txt
-help
-mkdir
hdfs dfs -mkdir [-p] <path>

参数-p:可选,它有两个作用:
第一是创建目录,如果要创建的目录存在,则不会返回错误信息,也不会重新创建。
第二是递归创建目录及其子目录。

在HDFS的目录/data中创建子目录/dataChild1,并在子目录/dataChild1中创建子目录/dataChild2。

hdfs dfs –mkdir –p /data/dataChild1/dataChild2

-get

-get用于将HDFS的指定文件下载到本地文件系统指定目录,语法格式如下。

hdfs dfs -get [-f] <src> <localdst>

参数-f:可选,用于判断下载的文件在本地文件系统的指定目录是否存在。如果存在则下载的文件会替换指定目录中已存在的文件。
参数src:用于指定HDFS中的文件,可以同时下载多个文件。
参数localdst:用于指定下载到本地文件系统的路径,该路径必须存在。

知识点2-案例-通过Shell脚本定时采集数据到HDFS

通过一个案例演示如何通过Shell脚本周期性的将Hadoop的日志文件上传到HDFS,操作步骤如下。

(1)创建Shell脚本

vi uploadHDFS.sh

内容融入

#!/bin/bash
# 添加hadoop环境变量
export HADOOP_HOME=/opt/module/hadoop-3.3.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 指定hadoop日志存放位置
hadoop_log_dir=/opt/module/hadoop-3.3.4/logs/ 
# hadoop日志的存放位置
log_toupload_dir=/opt/data/logs/toupload/
# 获取当前时间
date=`date +%Y_%m_%d_%H_%M` 
# 上传到hdfs上的目录名称
hdfs_dir=/hadoop_log/$date/
# 判断不同服务器的hadoop日志目录是否存在
# -d 判断是否为目录
if [ -d $log_toupload_dir ];
then
        echo "$log_toupload_dir exits"
else
        mkdir -p $log_toupload_dir
fi
# 将不同虚拟机的hadoop日志文件收集到目录/opt/data/logs/toupload/
ls $hadoop_log_dir | while read fileName
do
# 如果文件名是.log结尾
if [[ $fileName == *.log ]];
then
	echo "moving hadoop log to $log_toupload_dir"
	cp $hadoop_log_dir/*.log $log_toupload_dir
	# 如果有多台,需要把多个日志都复制到当前节点的的/opt/data/logs/toupload/目录
	#scp root@node2:$hadoop_log_dir/*.log $log_toupload_dir
	#scp root@node3:$hadoop_log_dir/*.log $log_toupload_dir
	echo "moving hadoop log willDoing"
	break
fi
done
echo "create $hdfs_dir"
# 创建hdfs目录
hdfs dfs -mkdir -p $hdfs_dir
ls $log_toupload_dir | while read fileName
do
	echo "upload hadoop log $fileName to $hdfs_dir"
	hdfs dfs -put $log_toupload_dir$fileName $hdfs_dir
	echo "upload hadoop log $fileName willDoing"
done
echo "delete $log_toupload_dir log"
# 删除临时目录/opt/data/logs/toupload/ 
rm -fr $log_toupload_dir

(2)执行Shell脚本
启动hadoop集群

start-dfs.sh
sh uploadHDFS.sh

如下:
在这里插入图片描述

(3)验证Hadoop日志文件是否上传成功

http://192.168.100.3:9870/

(4)定时执行Shell脚本文件
检查是否安装crontab

rpm -qa | grep crontab

rpm -qa:rpm 是一个用于管理RPM包的工具,-qa 选项表示列出所有已安装的软件包(其中 -q 表示查询,-a 表示所有包)。这条命令会输出一个包含所有已安装包名称的列表。
|(管道符号):这是一个管道操作符,它将前一个命令的输出作为后一个命令的输入。在这个例子中,rpm -qa 输出的所有包名会被传递给 grep 命令。
grep crontab:grep 是一个强大的文本搜索工具,它可以搜索文件中的指定模式。在这里,crontab 是一个模式,grep 将在管道传入的数据中搜索包含“crontab”的行。这将帮助你找到与crontab相关的已安装包。

若没有安装,可以执行

yum -y install vixie-cron
 yum -y install crontabs

启动crontab

service crond status
service crond start

为脚本添加权限
查看uploadHDFS.sh的权限
在这里插入图片描述

chmod 777 uploadHDFS.sh

在虚拟机node1执行“crontab -e”命令编辑Crontab文件,配置定时任务,在Crontab文件添加如下内容。

*/2 * * * * /export/data/uploadHDFS.sh

10分钟后,刷新HDFS Web UI界面可以看到,需要上传的日志文件已经按照日期分类上传到HDFS中
在这里插入图片描述

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

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

相关文章

三篇文章速通JavaSE到SpringBoot框架 上 JavaSE基础语法

文章目录 前置环境变量基本数据类型引用数据类型标识符运算符 流程控制三种基本流程结构 方法方法声明格式方法的调用方式方法的重载方法的重写重载和重写的区别 数组数组的特点 面向对象基本概念类的编写和对象的创建与使用类的编写对象的创建和使用 构造器构造器特点 封装以属…

55 循环神经网络RNN的实现_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录循环神经网络的从零开始实现[**独热编码**]初始化模型参数循环神经网络模型预测[**梯度裁剪**]训练小结练习 循环神经网络的从零开始实现 import math import torch from torch import nn from torch.nn import functional as F from d2l i…

玄机靶场--蚁剑流量

木马的连接密码是多少 黑客执行的第一个命令是什么 id 黑客读取了哪个文件的内容&#xff0c;提交文件绝对路径 /etc/passwd 黑客上传了什么文件到服务器&#xff0c;提交文件名 黑客上传的文件内容是什么 黑客下载了哪个文件&#xff0c;提交文件绝对路径 蚁剑流量特征总结 …

proteus仿真(2)

一&#xff0c;配置编译器 可以在proteus中写stm32的代码&#xff0c;需要先检查是否配置了keil的编译器 选择调试&#xff0c;编译器配置 stm32为ARM版本 51为8051版本 如果已经配置了keil—arm&#xff0c;但是打开没有&#xff0c;可以选择检查当前&#xff0c;刷新一下。 …

【有啥问啥】多臂老虎机(Multi-Armed Bandit,MAB)算法详解

多臂老虎机&#xff08;Multi-Armed Bandit&#xff0c;MAB&#xff09;算法详解 1. 引言 多臂老虎机&#xff08;Multi-Armed Bandit&#xff0c;MAB&#xff09;问题源自概率论和决策论&#xff0c;是一个经典的决策优化问题。最早提出的形式是赌场中的老虎机问题&#xff…

若依vue3.0表格的增删改查文件封装

一、因若依生成的文件没进行封装&#xff0c;维护起来比较麻烦。所以自己简单的进行封装了一下 gitee代码&#xff08;文件&#xff09;地址&#xff1a;https://gitee.com/liu_yu_ting09/ruo_yi.git 二、封装的方法&#xff08;下面绿色按钮进行全局封装一个JeecgListMixin.js…

【解密 Kotlin 扩展函数】扩展函数的底层原理(十八)

导读大纲 1.1.1 从 Java 调用扩展函数1.1.2 扩展函数无法重载 1.1.1 从 Java 调用扩展函数 在编译器底层下,扩展函数是一种静态方法,它接受接收器对象作为第一个参数 调用它不涉及创建适配器对象或任何其他运行时开销这使得从 Java 使用扩展函数变得非常简单 调用静态方法并传…

《深度学习》卷积神经网络CNN 实现手写数字识别

目录 一、卷积神经网络CNN 1、什么是CNN 2、核心 3、构造 二、案例实现 1、下载训练集、测试集 代码实现如下&#xff1a; 2、展示部分图片 运行结果&#xff1a; 3、图片打包 运行结果&#xff1a; 4、判断当前使用的CPU还是GPU 5、定义卷积神经网络 运行结果&a…

吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.3-2.4

目录 第四门课 卷积神经网络&#xff08;Convolutional Neural Networks&#xff09;第二周 深度卷积网络&#xff1a;实例探究&#xff08;Deep convolutional models: case studies&#xff09;2.3 残差网络(ResNets)(Residual Networks (ResNets))2.4 残差网络为什么有用&am…

武汉正向科技 格雷母线检测方式 :车检,地检

正向科技|格雷母线原理运用-车检&#xff0c;地检 地上检测方式 地址编码器和天线箱安装在移动站上&#xff0c;通过天线箱发射地址信号&#xff0c;地址解码器安装在固定站&#xff08;地面&#xff09;上&#xff0c;在固定站完成地址检测。 车上检测方式 地址编码器安装在…

【OpenCV】场景中人的识别与前端计数

1.OpenCV代码设计讲解 突发奇想&#xff0c;搞个摄像头&#xff0c;识别一下实验室里面有几个人&#xff0c;计数一下&#xff08;最终代码是累加计数&#xff0c;没有优化&#xff09;&#xff0c;拿OpenCV来玩一玩 首先&#xff0c;还是优先启动电脑摄像头&#xff0c;本项…

react hooks--useCallback

概述 useCallback缓存的是一个函数&#xff0c;主要用于性能优化!!! 基本用法 如何进行性能的优化呢&#xff1f; useCallback会返回一个函数的 memoized&#xff08;记忆的&#xff09; 值&#xff1b;在依赖不变的情况下&#xff0c;多次定义的时候&#xff0c;返回的值是…

MySQL record 07 part

索引 注意&#xff0c;是排序&#xff0c;有序就会加快查找的速度。 优势&#xff1a; 劣势 索引会单独占用存储空间索引虽然可以提高排序和查找的速度&#xff0c;但同时也会降低更新、删除、新增数据的速度&#xff0c;因为MySQL此时既要更改表&#xff0c;也要维护更改表后…

ubuntu安装无线网卡驱动(非虚拟机版)

本文不是基于虚拟机&#xff0c;是双系统 太夸张了 实验室居然没网线 只有一个师兄留下来的无线网卡 装完了ubuntu结果没网 make都用不了 然后搜了下大概发现是没有预装gcc和make 参考如下 https://zhuanlan.zhihu.com/p/466440088 https://wwsk.lanzouj.com/iAj4t2ao46zc…

电脑配置不够,想玩老头环可以上ToDesk云电脑体验一下

最近&#xff0c;《艾尔登法环》游戏更新了好多新东西&#xff0c;让玩家特别兴奋。比如说&#xff0c;FromSoftware工作室一直在改进游戏&#xff0c;让游戏运行得更稳、更流畅。而且&#xff0c;《艾尔登法环&#xff1a;黄金树幽影》这个扩展包一出&#xff0c;游戏世界变得…

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘attribute‘

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

调用JS惰性函数问题

第一次调用这个函数时 console.log(a) 会被执行&#xff0c;打印出 a&#xff0c;全局变量 a 被重定义并被赋予了新的函数&#xff0c;当再一次调用时&#xff0c;console.log(b) 被执行。 用处&#xff1a;因为各浏览器之间的行为差异&#xff0c;经常会在函数中包含了大量的…

Kafka技术详解[1]:简介与基础概念

目录 1. Kafka入门 1.1 概述 1.1.1 初识Kafka 1.1.2 消息队列 1.1.3 生产者-消费者模式 1.1.4 消息中间件对比 1.1.5 ZooKeeper 1. Kafka入门 1.1 概述 1.1.1 初识Kafka Kafka是由Scala和Java语言开发的高吞吐量分布式消息发布和订阅系统&#xff0c;也是大数据技术领…

《汇编语言》第14章——实验 14访问CMOS RAM

编程&#xff0c;以“年/月/日 时&#xff1a;分&#xff1a;秒”的格式&#xff0c;显示当前的日期、时间 assume cs:code data segment db 2024/09/23 00:00:00,$ data endscode segment start:mov ax,datamov es,axcall get_hms_funccall get_ymd_funcmov dh,12 ;dh中存放…

黑马头条day3-2 自媒体文章管理

前边还有一个 素材列表查询 没什么难度 就略过了 查询所有频道和查询自媒体文章也是和素材列表查询类似 就是普通的查询 所以略过了 文章发布 这个其实挺复杂的 一共三张表 一个文章表 一个素材表 一个文章和素材的关联表 区分修改与新增就是看是否存在id 如果是保存草稿…