IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 大数据Hadoop学习(一)HDFS -> 正文阅读

[大数据]大数据Hadoop学习(一)HDFS

HDFS概述

HDFS产出背景及定义

  1. 产生背景:因为数据量越来越大,在一个操作系统存不下所有的数据,那么就需要分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。
  2. 定义:HDFS是一个文件系统,用于存储文件,通过目录树定位文件,其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
  3. 使用场景:适合一次写入,多次读出的场景。一个文件经过创建,写入和关闭之后就不需要改变。

HDFS的优缺点

  1. 优点:
    • 高容错性:因为数据会自动保存多个副本,如果一个副本丢失,可以自动恢复
    • 适合处理大数据:
      • 数据规模:能够处理数据规模达到GB,TB,甚至PB级别的数据
      • 文件规模:能够处理百万规模以上的文件数量,数量相当之大
    • 可构建在链家的机器上,通过过副本机制,提高可靠性
  2. 缺点:
    • 不适合低延时的数据访问,就像毫秒级的存储数据
    • 无法高效的对大量小文件进行存储
      • 存储大量小文件的话,会占用NameNode大量的内存来存储文件目录和块信息
      • 小文件存储的寻址时间会超过读取时间,违反了HDFS的设计目标
    • 不支持并发写入,文件随即修改
      • 一个文件只能有一个写,不允许多个线程同时写
      • 仅支持数据追加,不支持文件的随机修改

HDFS的组成

  1. NameNode:就是相当于一个管理者
    • 管理HDFS的名称空间
    • 配置副本策略
    • 管理数据块映射信息
    • 处理客户端读写请求
  2. DataNode:NameNode下达命令,DataNode执行实际操作
    • 存储实际的数据块
    • 执行数据块的读/写操作
  3. Client:客户端
    • 文件切分,文件上传HDFS的时候,将文件切分成一个个数据块,然后进行上传
    • 与NameNode进行交互,读操作的时候获取文件位置信息
    • 与DataNode进行交互,读取或者写入信息
    • Client提供一些命令来管理HDFS,比如NameNode格式化;
    • Client可以通过一些命令来访问HDFS,比如对HDFS增删查改操作;
  4. Secondary NameNode:并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。
    • 辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode ;
    • 在紧急情况下,可辅助恢复NameNode。
      在这里插入图片描述

HDFS文件大小

  • HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在Hadoop2.x/3.x版本中是128M,1.x版本中是64M。
  • 如果寻址时间约为10ms,即查找到目标block的时间为10ms。
  • 寻址时间为传输时间的1%时,则为最佳状态。(专家)因此,传输时间=10ms/0.01=1000ms=1s,而目前磁盘的传输速率普遍为100MB/s。
  • 为什么块的大小不能设置太小,也不能设置太大?
    • HDFS的块设置太小,会增加寻址时间,程序一直在找块的开始位置;
    • 如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢。
    • HDFS块的大小设置主要取决于磁盘传输速率。

HDFS的shell编程

  • 首先要先启动hadoop集群才能开始i操作

基本语法

  • hadoop fs 具体命令
  • hdfs dfs 具体命令
  • 以上两个命令都是完全相同

命令大全

在这里插入图片描述

实操演示

  1. hadoop fs -mkdir /sanguo 创建一个三国文件夹
    在这里插入图片描述
    在这里插入图片描述

上传相关命令

  1. hadoop fs -moveFromLocal 文件路径 指定路径 将本地文件剪切粘贴到HDFS
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

  2. hadoop fs -copyFromLocal 文件路径 指定路径 将本地文件复制粘贴到HDFS
    在这里插入图片描述
    在这里插入图片描述

  3. hadoop fs -put 文件路径 指定路径 将本地文件复制粘贴到HDFS
    在这里插入图片描述
    在这里插入图片描述

  4. hadoop fs -apendToFile 文件路径 指定路径 追加数据到指定文件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

下载相关命令

  1. hadoop fs -copyToLocal /sanguo/shuguo.txt ./ 将HDFS的数据拷贝到本地
    在这里插入图片描述
  2. hadoop fs -get /sanguo/shuguo.txt ./shuguo2.txt跟copyToLocal的作用相同
    在这里插入图片描述

直接操作

  1. hadoop fs -ls 文件夹路径 显示目录信息
    在这里插入图片描述

  2. hadoop fs -cat 文件夹路径 显示文件内容
    在这里插入图片描述

  3. hadoop fs -chmod 文件夹路径 显示目录信息
    在这里插入图片描述
    在这里插入图片描述

  4. hadoop fs -mkdir 文件夹路径 创建文件或文件夹
    在这里插入图片描述
    在这里插入图片描述

  5. hadoop fs -cp 文件夹路径 指定文件路径 从HDFS的路径拷贝到另一个HDFS路径
    在这里插入图片描述
    在这里插入图片描述

  6. hadoop fs -mv 文件夹路径 指定文件路径 在HDFS的目录中移动文件
    在这里插入图片描述
    在这里插入图片描述

  7. hadoop fs -tail 文件夹路径 显示一个文件的末尾1KB的数据
    在这里插入图片描述

  8. hadoop fs -rm 文件夹路径 删除文件或文件夹
    在这里插入图片描述
    在这里插入图片描述

  9. hadoop fs -rm -r 文件夹路径 递归删除目录及目录里面的内容
    在这里插入图片描述

在这里插入图片描述

  1. hadoop fs -du -s -h 文件夹路径 统计文件夹的大小信息
    在这里插入图片描述
  2. hadoop fs -setrep 副本数量 文件夹路径 设置HDFS中文件的副本数量,这里设置的副本数只是记录在 NameNode 的元数据中,是否真的会有这么多副本,还得看 DataNode 的数量。因为目前只有 3 台设备,最多也就 3 个副本,只有节点数的增加到 10台时,副本数才能达到 10。
    在这里插入图片描述
    在这里插入图片描述

HDFS 的 API 操作

客户端环境准备

实操

HDFS的读写操作流程

HDFS的写流程

  1. 客户端通过DistributedFileSystem 模块向 NameNode 请求上传文件
  2. NameNode检查查目标文件是否已存在,父目录是否存在,NameNode返回是否可以上传
  3. 客户端请求第一个 Block 上传到哪几个 DataNode 服务器上
  4. NameNode 返回 3 个 DataNode 节点,分别为 dn1、dn2、dn3
  5. 客户端通过 FSDataOutputStream 模块请求 dn1 上传数据,dn1 收到请求会继续调用dn2,然后 dn2 调用 dn3,将这个通信管道建立完成
  6. dn1、dn2、dn3 逐级应答客户端
  7. 客户端开始往 dn1 上传第一个 Block(先从磁盘读取数据放到一个本地内存缓存),以 Packet 为单位,dn1 收到一个 Packet 就会传给 dn2,dn2 传给 dn3;dn1 每传一个 packet会放入一个应答队列等待应答
  8. 当一个 Block 传输完成之后,客户端再次请求 NameNode 上传第二个 Block 的服务器,然后重复执行3-7的步骤,直到把数据传完
    在这里插入图片描述
  • 补充点小知识:在HDFS写数据的过程中,NameNode会选择距离上传数据最近距离的DataNode接收数据,这个距离是如何计算呢,是通过两个节点到达最近的共同祖先的距离总和进行计算的
  • 机架感知(副本存储节点选择)
    • 第一个副本在Client所处的节点上。如果客户端在集群外,随机选一个。
    • 第二个副本在另一个机架的随机一个节点
    • 第三个副本在第二个副本所在机架的随机节点

HDFS的读流程

  1. 客户端通过 DistributedFileSystem 向 NameNode 请求下载文件,NameNode 通过查询元数据,找到文件块所在的 DataNode 地址。
  2. 挑选一台 DataNode(就近原则,然后随机)服务器,请求读取数据。
  3. DataNode 开始传输数据给客户端(从磁盘里面读取数据输入流,以 Packet 为单位来做校验)。
  4. 客户端以 Packet 为单位接收,先在本地缓存,然后写入目标文件。
    在这里插入图片描述

NameNode和SecondaryNameNode

NN和2NN工作机制

Fsimage和Edits解析

CheckPoint时间设置

DataNode

工作机制

数据完整性

掉线时限参数设置

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-27 16:17:12  更:2021-07-27 16:18:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/8 23:31:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码