笔记1-Hadoop之HDFS

Hadoop

开源版本的HADOOP和其他框架的对应关系很混乱,要注意。

Hadoop四大模块:Common HDFS MapReduce Yarn

Hadoop能对大量的数据进行分布式处理,可以轻松的从一台服务器扩展到千台服务器,并且 每一台服务器都能进行本地计算和存储。Hadoop还提供了用于处理和探测异常的机制。

HDFS

Master/slave结构

启动:master节点 start-dfs.sh node1节点:mapred --daemon start historyserver

node2节点:start-yarn.sh

http://${namenode所在机器的ip}:9870 HDFS的图形界面

Block

Block是HDFS数据存储的基本单位,存在DataNode上。

默认最大容量是134217728B(128MB)。

经过测试,一般而言,当寻址时间是写入时间的1%的时候,此时效率是最高的。大部分磁盘的寻址时间大约是10ms,那么就意味着写入时间大约是10ms*100=1000ms=1s的时候,效率最高。目前市面上,服务器基本上都是采用机械磁盘,大部分机械磁盘的写入速度是100MB/s150MB/s,那么就意味着Block的大小在100M150M之间。考虑到计算机中的存储单位进制的问题,所以采用了128M(1G=8*128)

300MB的文件会被分为3个Block,2*128+44

通过hdfs-site.xml中的dfs.blocksize属性调节。

每个Block有一个全局递增且唯一的BlockID

HDFS是数据安全的,默认每个Block会在不同节点有三份

切块使得HDFS能存储任意大的文件。

NameNode

对外负责接受请求,对内负责记录元数据和管理DataNode

元数据

一条元数据大约是150B,包含的内容有三十多项。重要的内容有

1.上传的文件名以及虚拟存储路径 2.文件所属用户和所属组

3.文件大小。权限 4.文件和BlockID的映射关系。

5.Block的大小 6,这个文件的副本数量 7,Block和DataNode的映射关系。

元数据放在内存和磁盘中。在磁盘上的存储位置是file://${hadoop.tmp.dir}/dfs/name。hadoop.tmp.dir的值由dfs.namenode.name.dir属性决定。

和元数据相关的文件:edits_inprogress edits fsimage

当NameNode接收到写请求的时候,首先会将这个命令解析记录到edits_inprogress文件中。记录完成之后,会更新内存中的元数据。更新完成之后,会给客户端返回一个ACK信号表示记录成功。注意,在这个过程中,fsimage文件中的元数据没有更新!也就意味着,fsimage文件中的元数据和内存中的元数据不是同步的!!!

记录元数据

当达到指定条件之后,edits_inprogress文件就会产生滚动,滚动生成edits文件,同时产生一个新的edits_inprogress文件,新来的写操作记录到新的edits_inprogress文件中。生成edits文件之后,HDFS会解析edits文件,根据edits文件的内容,更新fsimage文件中的元数据

fsimage文件更新

edits_inprogress的滚动条件

  1. 空间:默认情况下,每隔1min(可以通过dfs.namenode.checkpoint.check.period属性来调节,单位是秒,默认值是60)扫描一次edits_inprogress文件。当扫描edits_inprogress文件的时候,发现达到指定大小(可以通过dfs.namenode.checkpoint.txns属性来调节,默认值是1000000,即edits_inprogress文件中记录达到1000000条)之后,会自动滚动生成edits文件
  2. 时间:当距离上一次滚动达到指定的时间间隔(可以通过dfs.namenode.checkpoint.period属性来调节,默认值是3600,单位是秒)的时候,edits_inprogress文件自动滚动生成edits文件
  3. 重启:当NameNode被重启的时候,也会自动触发edits_inprogress的滚动
  4. 强制:可以通过命令hdfs dfsadmin -rollEdits来强制滚动edits_inprogress

查看edits文件

hdfs oev -i edits_0000000000000000012-0000000000000000028 -o a.xml

HDFS会给每一给写操作一个递增的编号,称之为事务id,简写为txid

在HDFS中,会将开始记录日志(OP_START_LOG_SEGMENT)和结束记录日志(OP_END_LOG_SEGMENT)都看作是写操作,都会分配一个事务id

上传文件的时候,NameNode如何拆分的命令

  1. OP_ADD:在指定路径下添加文件名._COPYING_文件
  2. OP_ALLOCATE_BLOCK_ID:分配BlockID(意味着对文件进行切块)
  3. OP_SET_GENSTAMP_V2:设置时间戳编号
  4. OP_ADD_BLOCK:上传(添加)Block
  5. OP_CLOSE:关闭文件(本质上就是关流)
  6. OP_RENAME_OLD:重命名文件

在HDFS中,文件一旦写完就不能修改!!!(HDFS中的文件不允许被修改!!!) 但是允许对一个文件追加。

查看fsimage文件

hdfs oiv -i fsimage_0000000000000000033 -o a.xml -p XML

HDFS第一次启动之后1min,会自动触发一次edits_inprogress文件的滚动

NameNode会为每一个fsimage文件生成一个md5文件,用于对fsimage文件进行校验。

md5算法的使用场景:加密(非对称加密 ,没有解密算法,不可逆。) 校验(数据有一点一点的差异生成的结果就会差别特别大称为散列。为防止元数据被修改,因为md5后的结果为散列。一个文件有一个字母改变,生成的md5就差距很大,便于比较文件是否一致)

管理DataNode
  1. NameNode通过心跳(heart beat)机制来管理DataNode:DataNode定时(通过dfs.heartbeat.interval属性来调节,默认值是3,单位是秒)给NameNode发送心跳信号。如果在一定时间内,NameNode没有收到DataNode的心跳信号,那么就表示这个DataNode已经lost(丢失),此时NameNode就会将这个DataNode上的数据重新备份到其他的DataNode上以保证整个集群中的副本数量

  2. 需要注意的是,心跳超时时间由两个属性决定:dfs.heartbeat.intervaldfs.namenode.heartbeat.recheck-interval

    属性默认值单位
    dfs.heartbeat.interval3
    dfs.namenode.heartbeat.recheck-interval300000毫秒

    心跳超时时间=2*dfs.namenode.heartbeat.recheck-interval+10*dfs.heartbeat.interval,默认情况下,心跳超时时间=2*5min+10*3s=10min30s

  3. 心跳信号

    1. clusterid:集群编号。
      1. 当NameNode被格式化(hdfs namenode -format)的时候,自动计算产生一个clusterid
      2. HDFS启动之后,DataNode第一次给NameNode发送心跳,NameNode会在心跳响应中将clusterid返回给这个DataNode,并且要求DataNode在后续的请求(包括心跳)中携带clusterid
      3. 当NameNode收到DataNode的请求之后,会校验clusterid是否一致。如果clusterid一致,那么NameNode才会接收DataNode的请求或者心跳,如果不一致,那么可能会导致DataNode进程或者NameNode进程结束
      4. 每一次格式化,NameNode都会重新计算产生一个新的clusterid
      5. hadoop分布式第一次启动之前,要在第一个节点上格式化namenode。格式化后会生成一个验证(就是clusterid),当datanode第一次携带null给namenode发送心跳时,namenode发现他带的是null,就会把格式化生成的验证给datanode。之后的datanode都要携带这个验证。如果再次格式化namenode,那么datanode携带的验证不匹配。因为datanode携带的不是null,所以不会给datanode新的验证。此时datanode或namenode会随机有一方停机。通常是namenode。
    2. 当前DataNode的状态(预服役、服役、预退役)
  4. 默认情况下,DataNode每隔6个小时(由dfs.blockreport.intervalMsec属性来调节,单位是毫秒,默认值是21600000),会给NameNode汇报一次当前DataNode上存储的Block情况

前置基础知识

内网传递资料: scp [ 目录需要加 -r ] 源文件 root@hadoop2:目标文件

// root是用户 hadoop2映射了主机ip

环境变量 vim /etc/profile.d/hadoophome.sh 全局变量 export 需要 source /etc/profile.d/hadoophome.sh 生效。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flutter开发进阶之瞧瞧BuildOwner

Flutter开发进阶之瞧瞧BuildOwner 上回说到关于Element Tree的构建还缺最后一块拼图,build的重要过程中会调用_element!.markNeedsBuild();,而markNeedsBuild会调用owner!.scheduleBuildFor(this);。 在Flutter框架中,BuildOwner负责管理构建…

【ai技术】(4):在树莓派上,使用qwen0.5b大模型+chatgptweb,搭建本地大模型聊天环境,速度飞快,非常不错!

1,视频地址 https://www.bilibili.com/video/BV1VK421i7CZ/ 2,下载镜像 raspberry-pi-os-64-bit https://blog.csdn.net/freewebsys/article/details/136921703 项目地址: https://www.raspberrypi.com/software/operating-systems/#rasp…

【JAVA重要知识 | 第九篇】ConCurrentHashMap源码分析

文章目录 9.ConCurrentHashMap源码分析9.1 ConCurrentHashMap 1.79.1.1存储结构9.1.2初始化9.1.3put流程(1)判断是否要put(key,value)流程(2)put(key,value)(3)自旋获取hash位置的HashEntry 9.1.4 rehash扩…

【力扣hot100】1. 两数之和 49.字母异位词分组 128. 最长连续序列

目录 1. 两数之和题目描述做题思路参考代码 49.字母异位词分组题目描述做题思路参考代码 128. 最长连续序列题目描述做题思路参考代码 1. 两数之和 题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数…

子网掩码,网段,网关

IP地址、子网掩码、网段、网关【网络常识 2】_哔哩哔哩_bilibili 网关: 什么时候需要用到网关: 若目标IP在同一网段则可以直接通信不需要经过网关,否则需要。 怎么判断对方的ip是否与我在同一网段呢? 判断网络号是否相同。 电…

Android Studio 和 lombok 的版本适配、gradle依赖配置、插件安装及使用

文章目录 Intro注意事项Android Studio 和 lombok 的版本选择及下载下载链接 在 Android Studio 中安装一次 lombok 插件在每个 gradle 项目中添加 lombok 相关依赖(如要用到)使用ref Intro 用惯了 JavaMavenIDEA 开发后端服务,突然有一天用 JavaGradleAndroidStud…

【Flink】窗口实战:TUMBLE、HOP、SESSION

窗口实战:TUMBLE、HOP、SESSION 1.TUMBLE WINDOW1.1 语法1.2 标识函数1.3 模拟用例 2.HOP WINDOW2.1 语法2.2 标识函数2.3 模拟用例 3.SESSION WINDOW3.1 语法3.2 标识函数3.3 模拟用例 4.更多说明 在流式计算中,流通常是无穷无尽的,我们无法…

【PyQt】17.1-日历控件 不同风格的日期和时间、以及高级操作

日历控件puls版本 前言一、日历控件中不同风格的日期和时间1.1 代码1.2 注意事项格式设置m的大小写问题QTime和QDateTime的区别 1.3 运行结果 二、高级操作2.1 成倍调整2.2 下拉出日历2.3 事件函数2.4 获取设置的日期和时间 完整代码 前言 1、不同风格的日期和时间展示 2、高级…

Codeforces Round 930 (Div. 2)(A,B,C,D)

比赛链接 C是个交互,D是个前缀和加二分。D还是很难写的。 A. Shuffle Party 题意: 您将得到一个数组 a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1​,a2​,…,an​ 。最初,每个 1 ≤ i ≤ n 1 \le i \le n 1≤i≤n 对应 a i i a_ii…

深度学习十大算法之长短时记忆网络(LSTM)

一、长短时记忆网络(LSTM)的基本概念 长短时记忆网络(LSTM)是一种特殊类型的循环神经网络(RNN),主要用于处理和预测序列数据的任务。LSTM由Hochreiter和Schmidhuber于1997年提出,其…

41-Vue-webpack基础

webpack基础 前言什么是webpackwebpack的基本使用指定webpack的entry和output 前言 本篇开始来学习下webpack的使用 什么是webpack webpack: 是前端项目工程化的具体解决方案。 主要功能:它提供了友好的前端模块化开发支持,以及代码压缩混淆、处理浏览…

海康威视-AIOT的业务转型

海康威视的转型和定位为智能物联网(AIoT)解决方案和大数据服务的提供商。 公司不仅仅聚焦于其核心的视频监控业务,而且正在积极拓展到新的技术领域和市场。通过专注于物联感知、人工智能、大数据等技术的创新,对未来技术发展方向的…

golang import引用项目下其他文件内函数

初始化项目 go mod init [module名字] go mod init project 项目结构 go mod 文件 代码 需要暴露给外界使用的变量/函数名必须大写 在main.go中引入,当前项目模块名/要引用的包名 package mainimport (// 这里的路径开头为项目go.mod中的module"project/…

微信小程序----猜数字游戏.

目标:简单猜字游戏,系统随机生成一个数,玩家可以猜8次,8次未猜对,游戏结束;未到8次猜对,游戏结束。 思路和要求: 创建四个页面,“首页”,“开始游戏”&#…

hadoop基本概念

一、概念 Hadoop 是一个开源的分布式计算和存储框架。 Hadoop 使用 Java 开发,所以可以在多种不同硬件平台的计算机上部署和使用。其核心部件包括分布式文件系统 (Hadoop DFS,HDFS) 和 MapReduce。 二、HDFS 命名节点 (NameNode) 命名节点 (NameNod…

STM32 | Systick定时器(第四天)

STM32 第四天 一、Systick定时器 1、定时器概念 定时器:是芯片内部用于计数从而得到时长的一种外设。 定时器定时长短与什么有关???(定时器定时长短与频率及计数大小有关) 定时器频率换算单位:1GHZ=1000MHZ=1000 000KHZ = 1000 000 000HZ 定时器定时时间:计数个数…

Django缓存(二)

一、视图缓存 Django的缓存可以设置缓存指定的视图,具体方式使用django.views.decorators.cache.cache_page, 方法有2种方式: 装饰器:以方法以装饰器的方式使用 from django.views.decorators.cache import cache_page@cache_page(60 * 15,cache="default") def…

CRC计算流程详解和FPGA实现

一、概念 CRC校验,中文翻译过来是:循环冗余校验,英文全称是:Cyclic Redundancy Check。是一种通过对数据产生固定位数的校验码,以检验数据是否存在错误的技术。 其主要特点是检错能力强、开销小,易于电路实…

【prompt六】MaPLe: Multi-modal Prompt Learning

1.motivation 最近的CLIP适应方法学习提示作为文本输入,以微调下游任务的CLIP。使用提示来适应CLIP(语言或视觉)的单个分支中的表示是次优的,因为它不允许在下游任务上动态调整两个表示空间的灵活性。在这项工作中,我们提出了针对视觉和语言分支的多模态提示学习(MaPLe),以…

“架构(Architecture)” 一词的定义演变历史(依据国际标准)

深入理解“架构”的客观含义,不仅能使IT行业的系统架构设计师提升思想境界,对每一个积极的社会行动者而言,也具有长远的现实意义,因为,“架构”一词,不只限于IT系统,而是指各类系统(包括社会系统…