专栏首页后端码事hadoop 基础入门

hadoop 基础入门

启动:

格式化节点:bin/hdfs namenode -format

全部启动:sbin/start-dfs:datanode、namenode

sbin/start-yarn:nodemanager、resourcemanager

访问:http://localhost:50070 查看管理

查看文件目录:bin/hdfs.cmd dfs -ls /

创建文件夹:bin/hdfs dfs -mkdir -p /test

复制文件:bin/hdfs dfs -put etc/hadoop hdfs://localhost:9000/test

查看文件:bin/hdfs dfs -cat /test/hadoop/*.xml

删除文件:bin/hdfs dfs -rm -r /test/*.xml

节点列表:bin/hdfs dfsadmin -report

节点恢复:bin/hdfs namenode -recover

节点检查:bin/hdfs fsck /test

snapshot文件夹:bin/hdfs lsSnapshottableDir

配置获取:

PS D:\hadoop-2.9.0> .\bin\hdfs getconf -namenodes

localhost

PS D:\hadoop-2.9.0> .\bin\hdfs getconf -secondaryNameNodes

account.jetbrains.com

PS D:\hadoop-2.9.0> .\bin\hdfs getconf -backupNodes

account.jetbrains.com

PS D:\hadoop-2.9.0> .\bin\hdfs getconf -includeFile

Configuration dfs.hosts is missing.

PS D:\hadoop-2.9.0> .\bin\hdfs getconf -nnRpcAddresses

localhost:9000

PS D:\hadoop-2.9.0> .\bin\hdfs classpath

D:\hadoop-2.9.0\etc\hadoop;D:\hadoop-2.9.0\share\hadoop\common\lib\*;D:\hadoop-2.9.0\share\hadoop\common\

.0\share\hadoop\hdfs;D:\hadoop-2.9.0\share\hadoop\hdfs\lib\*;D:\hadoop-2.9.0\share\hadoop\hdfs\*;D:\hadoo...

hdfs 拥有主从结构,hdfs集群包含一个单一的NameNode,称之为主服务器,负责管理文件系统命名空间及客户端对文件的访问权限。hdfs集群包含多个数据节点。hdfs暴露文件命名空间用以用户以文件形式存储数据。文件被分割为多个块儿,存储在一个或多个数据节点上。NameNode负责文件系统操作,包括打开,关闭,重命名文件和文件夹,决定数据块到数据节点的映射。数据节点负责系统客户端的读写请求,及数据块的创建,删除和根据NameNode的指导进行复制。

单个NameNode简化了hdfs架构,负责存储hdfs元数据,不存储用户数据。

hdfs支持传统的层级文件结构,用户或者系统客户端可以创建文件夹及在其下存储文件。支持文件数量级权限限制。不支持软,硬连接,但不妨碍其它对此的实现。

NameNode负责维护文件系统命名空间,记录所有变更。应用可以配置文件的备份数,即备份因子。

数据复制:默认三份

hdfs用来在集群间,跨机器存储文件。文件以一连串的数据块形式存储,数据块存在多个备份以提供容错能力,块儿大小及备份数可以根据每一个文件进行配置。

除了最后一个数据块,其它数据块大小均相同,

复制因子,可以在文件创建时配置,后续可以更改,hdfs中的文件是一次性写入的,并且严格限制一个操作者。

NameNode决定数据块的复制事宜。间隔的接收数据节点的心跳(数据几点是否工作正常)及数据块报告(数据节点所包含的所有数据块)

数据块备份的存放关系着hdfs的可靠性及性能。优化备份存储是hdfs区别于其它分布式文件系统的重要一点。rack aware机制是为了提高hdfs数据可靠性,可用性,网络带宽使用。

大规模的hdfs实例通常运行在跨不同机器不同平台架构的机器上,不同平台的节点之间通信需要经过交换机,同平台之间的带宽通常大于异构平台之间的带宽。

副本选择:

为了减少总体的带宽消耗和读延迟,hdfs尝试通过距离用户最近的副本来提供读服务。同架构节点优先提供服务,本地节点有限提供服务。

安全模式:

NameNode启动时,处于安全模式,此时数据节点不执行数据块复制,NameNode接收心跳及数据块报告,每一个数据块包含过个副本,当数据块副本数量匹配配置的复制因子,则NameNode认定数据块安全,当特定比例数据块被认定安

全后,NameNode离开安全模式,并检查还不满足复制因子的数据块,并进行复制操作。

系统元数据的持久化:

hdfs命名空间存储在NameNode。NameNode使用事务日志(Editlog)持续的记录系统元数据发生的所有变更,每次变更增加一条记录,Editlog存储在本地系统文件。全部的系统命名空间元数据,包括数据块到文件的映射及系统属性存储在文本地系统件FsImage中。

NameNode在内存中保存着一份系统命名空间及数据块映射镜像,当NameNode启动时,或者检测点触发,NameNode读取磁盘Fsimage及Editlog文件,将Editlog文件中的事务应用于内存中的Fsimage镜像,并将应用后的FsImage固化到磁盘生成新的FsImage文件。旧的Editlog即可被删除,这个过程称之为检测点,目的是通过系统元数据快照及固化FsImage来保持hdfs的一致性。FsImage的读取效率很高,但是修改效率低,为了避免FsImage的修改操作,NameNode将变更记录到Editlog,等到检测点触发,Editlog变更被应用固化到FsImage文件。

检测点( checkpoint )配置: dfs.namenode.checkpoint.period s间隔, dfs.namenode.checkpoint.txns 变更数间隔

数据节点将数据块存储在本地系统,数据节点无法识别hdfs文件,存储可能不同文件的不同数据块。数据节点避免将所有的文件数据块存储在同一文件目录下(本地文件系统限制),采用启发式算法来决定文件夹的创建及数据块的存放。

数据节点启动时,扫描本地文件系统产生一系列数据块到本地文件映射(blockreport),发送到NameNode。

通信协议

hdfs通信协议基于TCP/IP,客户端使用客户端协议于NameNode建立连接,数据节点使用数据节点协议(宝库奥客户端协议及数据节点协议)同NameNode建立连接,NameNode不主动发起连接,只回复客户端及数据节点的rpc连接请求。

健壮性:NameNode,数据节点,网络分区

数据节点保持着和NameNode之前的心跳,网络分区因素可能引起数据节点的失联。NameNode通过检测心跳信息识别失联数据节点,并标识节点失效,不再转发IO请求。失效节点存储的数据块将不再为hdfs使用,将会引起特定数据节点的复制因此不再满足,NameNode不间断的检测不满足复制因子的数据块,并在特定条件下(数据节点不可用,副本崩溃,硬盘损坏,文件复制因子变更)的时候启动复制。

数据节点失效判定超时配置:

数据一致性:

hdfs客户端文件实现了hdfs文件校验机制,客户端创建hdfs文件时,同时计算每个数据块校验和(CRC32算法),并将校验和存储在同一个hdfs命名空间的一个独立的隐藏文件中。当客户端接收到hdfs文件内容时,同时计算校验和和相关的校验和文件进行匹配。当某一个数据块不匹配,则执行从其它数据节点请求此数据块备份。

FsImage Editlog磁盘失效会引起hdfs无法工作,因此hdfs支持配置FsImage Editlog备份,备份间异步更新,可能引起吞吐量降低。NameNode重启时,选择最新的FsImage Editlog。

数据组织:

大数据文件,一次写入,多次读取,流式读取,标准大小数据块128m,一个文件会被分割为多个数据块,并尽可能的分配到不同的数据节点上。

当客户端向hdfs写入文件时,NameNode使用相应的目标选择算法获取特定复制因子数量的数据节点。客户端首先将数据写入第一个节点,第一个节点接收数据,写入本地存储,并传输给后续的数据节点,后续节点相应的执行。数据在数据节点间管道式流动复制。

备份因此修改后,只有等到下一次心跳,信息才会传送至数据节点,然后数据节点执行相应的数据块操作,存在操作时间差。

客户端请求NameNode获取文件元数据及修改信息,同数据节点执行实际的数据IO请求。

Secondary NameNode:

FsImage:最新的checkpoint文件。

主节点只在启动时执行FsImage及Editlog相关操作,二级节点运行期间定时管理FsImage及Editlog,控制FsImge在一定的大小范围。二级节点通常运行在不同的节点上。二级节点上最新的checkpoint和主节点上的checkpoint存储在相同的位置。以便可以让主节点使用。

定时与主节点同步(定期合并),并将最新FsImage传递给NameNode,清空Editlog,NameNode失效后,需要手动设置为主机。

checkpoint节点:

checkpoint节点不间断的创建命名空间的checkpoint文件。从活跃NameNode下载FsImage及Editlog,应用Editlog到FsImge,并将最新的FsImage到主NameNode。checkpoint运行在独立的服务器上。

配置地址: dfs.namenode.backup.address dfs.namenode.backup.http-address

配置启动: dfs.namenode.checkpoint.period 默认1h,执行checkpoint间隔; dfs.namenode.checkpoint.txns 间隔任务数

checkpoint节点存储最新checkpoint文件位置和主节点相同。

备份节点:

执行checkpoint节点相同的功能,同时保持一份内存镜像,实时和主节点异步更新,日常流式从主节点接收系统变更,固化到硬盘,同时应用到内存中的镜像。

备份节点不需要从主节点下载FsImage Editlog,因为内存中保存着最新的镜像备份。

配置备份节点可以不配置checkpoint节点。

暂时只支持一个本分节点,

bin/hdfs namenode -backup

配置:dfs.namenode.backup.address and dfs.namenode.backup.http-address

使用本分节点可以配置无持久化存储hdfs存储。

导入checkpoint:

* dfs.namenode.name.dir 配置空文件夹;

* dfs.namenode.checkpoint.dir配置chckepoint文件位置;

* 启动主NameNode -importCheckpoint option.

NameNode上传dfs.namenode.checkpoint.dir文件夹下checkpoint文件,保存到dfs.namenode.name.dir(确保空),。。。

* olicy to keep one of the replicas of a block on the same node as the node that is writing the block.

* Need to spread different replicas of a block across the racks so that cluster can survive loss of whole rack.

* One of the replicas is usually placed on the same rack as the node writing to the file so that cross-rack network I/O is reduced.

* Spread HDFS data uniformly across the DataNodes in the cluster.

数据节点存储热切换:

* If there are new storage directories, the user should format them and mount them appropriately.

* The user updates the DataNode configuration dfs.datanode.data.dir to reflect the data volume directories that will be actively in use.

* The user runs dfsadmin -reconfig datanode HOST:PORT start to start the reconfiguration process. The user can use dfsadmin -reconfig datanode HOST:PORT status to query the running status of the reconfiguration task.

* Once the reconfiguration task has completed, the user can safely umount the removed data volume directories and physically remove the disks.

HDFS两层架构:

命名空间(namespace):

文件夹、文件及数据块的一致性;支持所有和命名空间相关的文件系统操作(创建、删除、修改和文件及文件夹列表)

数据块存储服务:

数据块管理(NameNode)

维护数据节点关系(提供注册,心跳)

处理数据块报告及维护数据块存储位置

支持数据块相关的操作,创建,删除,修改及位置获取

管理数据块复制,复制不满足复制因子( under replicated)的数据块,删除超过复制因子 (over replicated)的数据块备份。

数据块存储(数据节点):

本地存储数据块,提供读写访问。

整个HDFS可存储的文件数受限于NameNode的内存大小

一个block在NameNode中对应一条记录,map task数量由splits决定,mapreduce处理大量小文件时,会产生大量map task,线程管理开销增加作业时间,建议处理大文件。

数据节点:

保存具体的block数据

负责数据的读写

定时向NameNode报告数据块信息,及更新信息

数据节点之前的通信,block复制,保证数据的冗余性。

读取:

配置:

core-site.xml:配置公共属性

hdfs-site.xml: 配置HDFS

yarn-site.xml: 配置YARN

mapred-site.xml: 配置MapReduce

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Zookeeper 分布式应用

    这篇文章是旨在为那些想要利用Zookeeper协调服务能力进行分布式应用创建的开发者的入门指导,包括一些理论性和实践性的内容。

    WindWant
  • 简述 zookeeper 基于 Zab 协议实现选主及事务提交

    Zab 协议:zookeeper 基于 Paxos 协议的改进协议 zookeeper atomic broadcast 原子广播协议。

    WindWant
  • JAVA Map 之元素定位,冲突碰撞

    // assert Integer.bitCount(length) == 1 : "length must be a non-zero power of 2"...

    WindWant
  • 必须理解的分布式系统中雷同的集群技术及原理

    在当今信息爆炸的时代,单台计算机已经无法负载日益增长的业务发展,虽然也有性能强大的超级计算机,但是这种高端机不仅费用高昂,也不灵活,一般的企业是负担不起的,而且...

    justmine
  • Hadoop(六)之HDFS的存储原理(运行原理)

    前言   其实说到HDFS的存储原理,无非就是读操作和写操作,那接下来我们详细的看一下HDFS是怎么实现读写操作的! 一、HDFS读取过程 ?   1)客户端通...

    用户1195962
  • 带着问题学习分布式系统之数据分片

    分布式系统(尤其是分布式存储系统)需要解决的两个最主要的问题,即数据分片和数据冗余,下面这个图片形象生动的解释了其概念和区别: ? 其中数据即A、B属于数据分片...

    用户1263954
  • 一文俯瞰Elasticsearch核心原理

    Lucene是一种高性能、可伸缩的信息搜索(IR)库,在2000年开源,最初由鼎鼎大名的Doug Cutting开发,是基于Java实现的高性能的开源项目。Lu...

    暴走大数据
  • 一文打尽分布式系统的数据分片难题

    分布式系统,尤其是分布式存储系统,需要解决的两个最主要的问题即数据分片和数据冗余,下图形象生动地解释了其概念和区别:

    MongoDB中文社区
  • 亿级流量下平滑扩容:TDSQL水平扩容方案实践

    为帮助开发者更好地了解和学习分布式数据库技术,2020年3月,腾讯云数据库、云加社区联合腾讯TEG数据库工作组特推出为期3个月的国产数据库专题线上技术沙龙《你想...

    分布式数据库TDSQL
  • 直播回顾 | 困扰多年的分库分表问题终于解决了

    腾讯云数据库国产数据库专题线上技术沙龙正在火热进行中,3月17日郑寒的分享已经结束,没来得及参与的小伙伴不用担心,以下就是直播的视频和文字回顾。

    腾讯云数据库 TencentDB

扫码关注云+社区

领取腾讯云代金券