hadoop 之hdfs知识详细整理

大数据系列之Hadoop知识整理(五)Hdfs节点的服役与退役 Hdfs节点的服役与退役也就是节点的新增与删除。其中退役也就是把节点放在黑名单里,并且从白名单中删除,服役就是在白名单中新加入节点 具体配置如下: 黑白名单的组合情况 ------------------------- include //dfs.include(白名单) exclude //dfs.hosts.exclude(黑名单) include exclude Interpretat... 阅读详情

目录

 

hadoop四大组件

HDFS(Hadoop Distributed File System)

初步认知

核心概念

Block

BlockInfoContiguous(BlockInfo)

BlockMap

Package

Chunk

package 构建

块缓存

NameSpace

NameSpaceManagement

BlockManagement

HDFS Federastion

checkPoint(检查点)

fsimage与edits.log

HDFS 架构

​

 

HDFS角色

Client

NameNode(active)

DataNode

SecondaryNameNode

NameNode 与secondaryNameNode工作机制

HA架构

HA角色

HA工作流程

brain-split(脑裂)

参考链接


hadoop四大组件

hdfs:分布式文件管理系统

mapreduce:分布式的离线并行计算框架

yarn:作业调度与集群资源管理系统

comment:支持其他模块的工具模块

 

HDFS(Hadoop Distributed File System)

初步认知

1.一个文件系统,可以用于存储文件,通过目录树定位文件

2.由很多服务器共同实现文件存储功能

hdfs 适合一次写入,多次读出的场景,且不支持文件修改,只能追加

hdfs不适合用在:要求低时间延迟数据访问的应用,存储大量的小文件,并发写入,任意修改文件

核心概念

Block

hdfs 中的文件在物理上是分块(block)存储的。每个block 的标识是一个三元组(block id, numBytes,generationStamp),其中block id 由namenode 分配,具有唯一性。每个block文件和block meta 文件由datanode建立,每个block文件对应一个block meta 文件。比Block小的文件不会占用整个Block。一个block 会被拆分成多个package。

Block 类 实现writable 和comparable接口,可以对每个block对象进行序列化和针对block id 进行排序

block id: 唯一标识block对象

numBytes:这个数据块的大小,以字节为单位

generationStamp:数据块的时间戳

块的大小可以通过dfs.blocksize(hdfs-site.xml)来设置,hadoop2.x中默认128m

HDFS 的块比磁盘的块(512B)大,其目的是为了最小化寻址开销。如果块设置得足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。

当然,如果block 设置的过大,在MapReduce任务中,Map或者Reduce任务的个数 如果小于集群机器数量,会使得作业运行效率降低

BlockInfoContiguous(BlockInfo)

以下这两篇博客关于BlockInfoContiguous写的比较不错,可以对应着看。

https://www.cnblogs.com/tesla-turing/p/11488035.html

https://www.cnblogs.com/bianqi/p/12183791.html

邻近信息块,用于存储block 副本数及副本位置。有2个内部关键的对象信息BlockCollection和triplets。BlockCollection保存了副本数,副本位置等的一些信息。而triplets 可用于查找DataNode上所有block。

这个数组的长度是3*replication,replication表示数据块的备份数。这个数组中存储了该数据块所有的备份数据块对应的DataNode信息,我们现在假设备份数是3,那么这个数组的长度是3*3=9,这个数组存储的数据如下:

triplets包含的信息即为:

  • triplets[i]:Block所在的DataNode;
  • triplets[i+1]:该DataNode上前一个Block;
  • triplets[i+2]:该DataNode上后一个Block

BlockMap

利用blockid 快速定位BlockInfo。BlocksMap底层通过LightWeightGSet实现。LightWeightGSet本质上是利用链表解决碰撞冲突的HashTable。

Package

在DFSclient与DataNode之间通信的过程中,发送和接受数据过程都是以一个packet为基础的方式进行。package 大小由dfs.write.packet.size确定,默认64k。一个package 会包含多个chunk。

这个参数为参考值,是指真正在进行数据传输时,会以它为基准进行调整,调整的原因是一个packet有特定的结构,调整的目标是这个packet的大小刚好包含结构中的所有成员,同时也保证写到DataNode后当前block的大小不超过设定值

Chunk

它是DFSClient到DataNode数据传输中进行数据校验的粒度。

在DFSClient与DataNode之间通信的过程中,在发送数据的过程中是以packet的方式来进行的,每个packet包含了多个chunk。针对往package 中写入的每个chunk,会进行chunksum计算,同时生成chunksum bytes。

chunk校验的数据长度由io.bytes.per.checksum决定,默认512B。事实上一个chunk还包含4B的校验值,因而chunk写入packet时是516B;数据与检验值的比值为128:1,所以对于一个128M的block会有一个1M的校验文件与之对应。

package 构建

在构建一个Packet的过程中,首先将字节流数据写入一个buffer缓冲区中,也就是从偏移量为25的位置(checksumStart)开始写Packet数据Chunk的Checksum部分,从偏移量为533的位置(dataStart,根据数据与检验值的比值为128:1计算)开始写Packet数据的Chunk Data部分,直到一个Packet创建完成为止。

当写一个文件的最后一个Block的最后一个Packet时,如果一个Packet的大小未能达到最大长度,也就是上图对应的缓冲区中,Checksum与Chunk Data之间还保留了一段未被写过的缓冲区位置,在发送这个Packet之前,会检查Chunksum与Chunk Data之间的缓冲区是否为空白缓冲区(gap),如果有则将Chunk Data部分向前移动,使得Chunk Data 1与Chunk Checksum N相邻,然后才会被发送到DataNode节点

块缓存

DataNode通常直接从磁盘读取数据,但是频繁使用的Block可以在内存中缓存。默认情况下,一个Block只有一个数据节点会缓存。但是可以针对每个文件可以个性化配置。 
作业调度器可以利用缓存提升性能,例如连接join 操作中使用的一个小的查询表就是块缓存的一个应用。 
用户或者应用可以向NameNode发送缓存指令(缓存哪个文件,缓存多久), 缓存池的概念用于管理一组缓存的权限和资源。

NameSpace

https://www.cnblogs.com/tesla-turing/p/11488015.html 

以上博文namespace解析的很不错。此博主也是一个宝藏博主。

在分布式存储系统中,分散在不同节点中的数据可能属于同一个文件,为了组织众多的文件,把文件可以放到不同的文件夹中,文件夹可以一级一级的包含。我们把这种组织形式称为命名空间。

HDFS的命名空间包含目录、文件和块。

NameSpaceManagement

命名空间管理:是指命名空间支持对HDFS中的目录、文件和块做类似文件系统的创建、修改、删除、列表文件和目录等基本操作。

BlockManagement

在块存储服务中包含两部分工作:块管理和物理存储。这是一个更通用的存储服务。其他的应用可以直接建立在Block Storage上,如HBase,Foreign Namespaces等。

块管理

1.处理Data Node向Name Node注册的请求,处理datanode的成员关系,处理来自Data Node周期性的心跳

2.处理来自块的报告信息,维护块的位置信息

3.处理与块相关的操作:块的创建、删除、修改及获取块信息

4.管理副本放置(replica placement)和块的复制及多余块的删除

物理存储

所谓物理存储就是:Data Node把块存储到本地文件系统中,对本地文件系统的读、写

 

HDFS Federastion

详见https://blog.youkuaiyun.com/u011955252/article/details/50541844

即为namenode的一个水平扩展。namenode在内存中保存文件系统中的每个文件和每个数据块的引用关系,这意味着对于一个拥有大量文件的超大集群来说,namenode内存将成为限制系统横向扩展的瓶颈。

通过引入联邦hdfs,系统可以通过添加namenode实现扩展,其中每个namenode管理文件系统命名空间的一部分。例如,一个namenode可能管理/usr目录下所有文件,而另一个namenode可能管理/share 目录下的所有文件。

在HDFS Federation中的Namenode之间是联盟关系,他们之间相互独立且不需要相互协调。HDFS Federation中的Namenode提供了提供了命名空间管理和块管理功能。HDFS Federation中的datanode被所有的Namenode用作公共存储块的地方。

访问HDFS Federastion 集群,客户端需要使用客户端挂载数据表(client side mount table)将文件路劲映射到namenode。

通过views://URI 进行配置。例如   /user -> hdfs://nn1/containingUserDir/user。前者为ViewFileSystem中的路径,后者才是代表的真正集群路径。

namenode的heap空间扩展不可行原因:

这样纵向扩展带来的第一个问题就是启动问题,启动花费的时间太长。当前具有50GB Heap Namenode的HDFS启动一次大概需要30分钟到2小时,那512GB的需要多久?

第二个潜在的问题就是Namenode在Full GC时,如果发生错误将会导致整个集群宕机。第三个问题是对大JVM Heap进行调试比较困难。优化Namenode的内存使用性价比比较低

其架构如下:

 

 Block Pool(块池)

由属于同一个命名空间的所有数据块(信息)组成,这个块池中的数据块可以存储在集群中的所有Datanode上,而每个Datanode都可以存储集群中所有块池的数据块。

Datanode是一个物理概念,而block pool是一个重新将block划分的逻辑概念

Block pool允许一个命名空间在不通知其他命名空间的情况下为一个新的block创建Block ID。

Datanode中的数据结构都通过块池ID(BlockPoolID)索引,即datanode中的BlockMap,storage等都通过BPID索引。

在HDFS中,所有的更新、回滚都是以Namenode和BlockPool为单元发生的。即同一HDFS Federation中不同的Namenode/BlockPool之间没有什么关系。

Namespace Volume(命名空间卷)

由命名空间的元数据和一个block Pool 组成。命名空间卷之间相互独立,两两之间并不通信,甚至其中一个namenode的失效也不会影响其他namenode维护的命名空间的可用性。

checkPoint(检查点)

在NameNode启动时候,会先将fsimage中的文件系统元数据信息加载到内存,然后根据eidts中的记录将内存中的元数据同步至最新状态,将这个新版本的 FsImage 从内存中保存到本地磁盘上,然后删除旧的 Editlog,这个过程称为一个检查点

checkponit阈值存在于hdfs-default.xml文件中,分为时间参数(默认一小时)与操作次数(一分钟检查一次操作次数,默认一百万次操作次数)

//时间参数设置
<property>
 <name>dfs.namenode.checkpoint.period</name>
 <value>3600</value>
</property>
//操作次数参数设置
<property>
 <name>dfs.namenode.checkpoint.txns</name>
 <value>1000000</value>
<description>操作动作次数</description>
</property>

<property>
 <name>dfs.namenode.checkpoint.check.period</name>
 <value>60</value>
<description> 1 分钟检查一次操作次数</description>
</property>

fsimage与edits.log

fsimage

内存元数据在本地磁盘的映射,用于管理维护文件系统树

其中包含 HDFS文件系统的所有目录和文件 inode 的序列化信息。 每个inode 是一个文件和目录的元数据的内部描述方式

简单的说,Fsimage就是在某一时刻,整个hdfs 的快照,就是这个时刻hdfs上所有的文件块和目录,分别的状态,位于哪些个datanode,各自的权限,各自的副本个数等。

文件名格式为fsimage_txid。fsimage文件个数通过dfs.namenode.num.checkpoints.retained来配置,默认是两个,超出部分会删除。

edits.log

存放 HDFS 文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到 edits 文件中

edit log文件以edits_开头,后面跟一个txid范围段,并且多个edit log之间首尾相连,正在使用的edit log名字edits_inprogress_txid

在启动HDFS时,只需要读入fsimage_0000000000000008927以及edits_inprogress_0000000000000008928就可以还原出当前hdfs的最新状况。fsimageid总会比edits.log小

fsImage文件和editsLog文件可以通过ID来互相关联。如果是非HA集群的话,这两个数据文件保存在dfs.namenode.name.dir设置的路径下,会保存fsImage文件和editsLog文件.

如果是HA集群的话,editsLog文件保存在参数dfs.journalnode.edits.dir设置的路径下,即edits文件由qjournal集群管理
 

HDFS BALANCER(均衡器)

https://www.cnblogs.com/BYRans/p/5128162.html

随着时间推移,各个datanode上的块分布会越来越不均衡。不均衡的集群会降低MapReduce的本地性,导致部分datanode更为繁忙。

Hadoop的开发人员在开发Balancer程序的时候,遵循了以下几点原则:

1.    在执行数据重分布的过程中,必须保证数据不能出现丢失,不能改变数据的备份数,不能改变每一个rack中所具备的block数量。

2.    系统管理员可以通过一条命令启动数据重分布程序或者停止数据重分布程序。

3.    Block在移动的过程中,不能暂用过多的资源,如网络带宽。

4.    数据重分布程序在执行的过程中,不能影响name node的正常工作。

 

HDFS 架构

 

HDFS角色

Client

即为客户端,主要功能包括

1.文件切分。文件上传 HDFS 的时候,Client 将文件切分成一个一个的 Block, 然后进行存储。

2.调用hdfs api操作文件

3.与namenode进行交互,获取文件元数据

4.与datanode进行交互进行数据读写

NameNode(active)

即为master,主要功能包括

1.管理元数据:hdfs的名称空间 ,inode和block的映射、block和DataNode的映射 。inode和block的映射,固化在磁盘上。而block和DataNode的映射在DataNode启动时上报给NameNode。

2.配置副本策略 

3.处理客户端读写请求

namenode中的文件系统树及整棵树内所有的文件和目录会永久保存在本地磁盘上:fsimage与edit.log 。

DataNode

即为slave,主要功能包括:

1.存储实际的数据块

2.执行数据块的读写操作。读写请求可能来自client和namenode

3.每个datanode会去每一个Namenode注册,并且周期性的给所有的Namenode发送心跳(heartbeat)及datanode的使用报告

SecondaryNameNode

其为当前namenode(active) 的冷备份。当 NameNode 挂掉的时候,它并不能马上替换 NameNode 并提供服务。存在于内存中的edits.log中记录的操作将会丢失。主要功能为:

1.辅助namenode,分担其工作量

2.定期合并fsimage与edit.log文件,并把合并成新的fsimage文件发送给namenode

3.紧急情况下辅助恢复namenode

Secondary Namenode通常运行在另一台机器,因为合并操作需要耗费大量的CPU和内存。其数据落后于Namenode,因此当Namenode崩溃时,Secondary Namenode 只能恢复到最新的fsiamge所对应的时刻,而存在于editlog中还没合并到fsimage中的操作会丢失

由于secondaryNameNode 并不能很好解决NameNode 单节点故障问题,所以通常会配置HA,使用另外一个Namenode(stand by)来作为namenode 的热备份。

NameNode 与secondaryNameNode工作机制

 

namenode启动

1.如果是namenode第一次启动,那么namenode会创建fsimage与edits.log文件。如果不是namenode第一次启动,那么会加载fsimage与edits.log文件到内存

2.客户端对元数据进行增删改的请求

3.namenode记录操作日志并且滚动更新edits.log

4.namenode 在内存中对元数据进行增删改

secondaryNameNode 工作

1.Secondary NameNode 询问 namenode 是否需要 checkpoint(checkpoint参数见上文)。直接带回 namenode 是否检查结果。

2.Secondary NameNode 请求执行 checkpoint

3.namenode 滚动正在写的 edits 日志,该文件名为edit_inprogress_txid

4.将滚动前的编辑日志和镜像文件拷贝到 Secondary NameNode(通过http)

5.Secondary NameNode 加载编辑日志和镜像文件到内存,并合并

6.生成新的镜像文件 fsimage.chkpoint

7.拷贝 fsimage.chkpoint 到 namenode

8.namenode 将 fsimage.chkpoint 重新命名成 fsimage

 

HA架构

preview

HA角色

ZKFailoverController

内部维护着两个两个重要的类,HealthMonitor和ActiveStandbyElector

HealthMonitor:用于namenode的健康检查

ActiveStandbyElector:当active的namenode出现异常,调用ActiveStandbyElector相关方法进行主备选举,选举成功之后,进行相应的主备切换。

HA工作流程

1.启动zookpeer,启动hadoop集群。当namenode,datanode启动时,ZKFailoverController也会作为一个独立线程启动,实际启动的是其子类dfszkfailovercontroller。通过ZKFailoverController类的main方法中创执行create()方法对ZKFailoverController对象进行初始化,在其父类的doRun方法中执行initZK()对zookeeper进行初始化,在初始化方法中会建立 ZK连接和ZK event watcher,构造主备选举的类。

ZKFailoverController对象中会存在NameNode的命名服务ID:NamenodeNameServiceId,NameNode ID,封装了网络连接的相关地址参数,包括socket地址等的对象

接下来通过initRPC()方法初始化相应的rpc服务,然后通过initHM()方法来初始化HealthMonitor,并注册回调函数,HealthMonitor监测namenode的状态,通过这个回调函数来通知ZKFailoverController,以便做相应的主备选举工作。

HealthMonitor启动时会在namenode 内部启动HADeamon,定时和DFSZKFailoverController的HealthMonitor进行心跳检测,HealthMonitor 主要检测 NameNode 的两类状态,分别是 HealthMonitor.State 和 HAServiceStatus

HealthMonitor.State 主要包括:

NITIALIZING:HealthMonitor 在初始化过程中,还没有开始进行健康状况检测; 
SERVICE_HEALTHY:NameNode 状态正常; 
SERVICE_NOT_RESPONDING:调用 NameNode 的 monitorHealth 方法调用无响应或响应超时; 
SERVICE_UNHEALTHY:NameNode 还在运行,但是 monitorHealth 方法返回状态不正常,磁盘存储资源不足; 
HEALTH_MONITOR_FAILED:HealthMonitor 自己在运行过程中发生了异常,不能继续检测 NameNode 的健康状况,会导致 ZKFailoverController 进程退出

通过监控ha.health-monitor.check-interval.ms去设置监控的间隔时间和通过参数ha.health-monitor.rpc-timeout.ms设置timeout时间,当集群变大的时候,需要适当的设置改值,让ZKFC的HealthMonitor没那么“敏感”。

回调函数(HealthCallbacks)中主要用于检查namenode健康状态,NN健康(SERVICE_HEALTHY)就加入选举,如果不健康就退出选举(SERVICE_UNHEALTHY,SERVICE_NOT_RESPONDING)

2.其启动后的namenode都会进入standBy,此时的HealthMonitor监控NN,发现是HEALTH的状态。

其实监控部分,就是一个rpc不断的发送请求,让NN自检测然后在返回相应的数据

执行enterState会通知回调函数,进行处理。对于HEALTH状态的开始调用ActiveStandbyElector的joinElectio方法进行namenode的主备选举工作,最终调用了createLockNodeAsync方法在zookeeper上创建了一个临时节点。

Zookeeper 的写一致性会保证最终只会有一个 ActiveStandbyElector 成功创建一个路径为/hadoop-ha//ActiveStandbyElectorLock 的临时节点 (${dfs.nameservices} (为 Hadoop 的配置参数 dfs.nameservices 的值)

在zk上创建节点之后,会回调processResult方法返回成功创建zkLockPath的节点,行becomeActive()方法将此节点变成active,如果执行成功,继续监控节点状态,其他namenode节点变成standby,继续监控Lock节点状态。如果执行失败,继续进行主备选举。

3.处于active状态的namenode会接收和处理来自client端与datanode的请求,并通过JournalSet把edits.log文件写入本地磁盘和journalnode本地磁盘。 namenode 会同时向所有journalnode并行写文件,只要有(n-1)/2个节点写成功则认为此次写操作成功

Active NameNode 在完成一个 EditLog Segment 的写入之后,就会向 JournalNode 集群发送 finalizeLogSegment RPC 请求,将完成写入的 EditLog Segment finalized,然后开始下一个新的 EditLog Segment。从 JournalNode 集群上同步的 EditLog 都是处于 finalized 状态的 EditLog Segment。

提交 EditLog 失败会导致 Active NameNode 关闭 JournalSet 之后退出进程,留待处于 Standby 状态的 NameNode 接管之后进行数据恢复。

写本地由配置中参数dfs.namenode.name.dir控制,写JN由参数dfs.namenode.shared.edits.dir控制

4.处于standby状态的namenode会定期检查journalnode上edit.log文件的变化,并且将edit.log文件拉回本地。当standyby的namenode检查到checkpoint的条件满足,standybynamenode会将当前状态的元数据保存到一个临时的fsimage文件(fsimage.ckpt)然后比对从JN上拉到的最新EditLog的事务ID,将fsimage.ckpt_中没有,EditLog中有的所有元数据修改记录合并一起并重命名成新的fsimage文件,同时生成一个md5文件。将最新的fsimage再通过HTTP请求传回ActiveNameNode

5.如果 Active NameNode 对应的 HealthMonitor 检测到 NameNode 的状态异常时, ZKFailoverController 会主动删除当前在 Zookeeper 上建立的临时节点/hadoop-ha//ActiveStandbyElectorLock。

处于 Standby 状态的 NameNode 的 ActiveStandbyElector 注册的监听器就会收到这个节点的 NodeDeleted 事件。收到这个事件之后,会马上再次进入到创建/hadoop-ha//ActiveStandbyElectorLock 节点的流程,如果创建成功,这个本来处于 Standby 状态的 NameNode 就选举为主 NameNode 并随后开始切换为 Active 状态。

brain-split(脑裂)

假死

所谓的“假死”是指如果 Zookeeper 客户端机器负载过高或者正在进行 JVM Full GC,那么可能会导致 Zookeeper 客户端到 Zookeeper 服务端的心跳不能正常发出,一旦这个时间持续较长,超过了配置的 Zookeeper Session Timeout 参数的话,Zookeeper 服务端就会认为客户端的 session 已经过期从而将客户端的 Session 关闭

脑裂

具体到本文所述的 NameNode,假设 NameNode1 当前为 Active 状态,NameNode2 当前为 Standby 状态。如果某一时刻 NameNode1 对应的 ZKFailoverController 进程发生了“假死”现象,那么 Zookeeper 服务端会认为 NameNode1 挂掉了,根据前面的主备切换逻辑,NameNode2 会替代 NameNode1 进入 Active 状态。但是此时 NameNode1 可能仍然处于 Active 状态正常运行,即使随后 NameNode1 对应的 ZKFailoverController 因为负载下降或者 Full GC 结束而恢复了正常,感知到自己和 Zookeeper 的 Session 已经关闭,但是由于网络的延迟以及 CPU 线程调度的不确定性,仍然有可能会在接下来的一段时间窗口内 NameNode1 认为自己还是处于 Active 状态。这样 NameNode1 和 NameNode2 都处于 Active 状态,都可以对外提供服务。

Zookeeper 社区对这种问题的解决方法叫做 fencing。

隔离双写

1.当NameNode 成为active时,都会被赋予一个EpochNumber。

每个EpochNumber是惟一的,不会有相同的EpochNumber出现。EpochNumber有严格顺序保证,每次NN切换后EpochNumber都会自增1,后面生成的EpochNumber都会大于前面的EpochNumber

2.namenode要对edits.log进行修改之前,Namenode会把EpochNumber传递给QuorumJournalManager

3. QJM把自己的EpochNumber通过newEpoch(N)的方式发送给所有JN结点

4.当JN收到newEpoch请求后,会把QJM的EpochNumber保存到一个lastPromisedEpoch变量中并持久化到本地磁盘

5. ActiveNameNode同步日志到JN的任何RPC请求(如logEdits(),startLogSegment()等),都必须包含ActiveNameNode的EpochNumber

6.JN在收到RPC请求后,会将之与lastPromisedEpoch对比,如果请求的EpochNumber小于lastPromisedEpoch,将会拒绝同步请求,反之,会接受同步请求并将请求的EpochNumber保存在lastPromisedEpoch

 

 

参考链接

https://www.jianshu.com/p/0fe0b1d2ff09(详解block,package,chunk)

https://www.cnblogs.com/wujing-hubei/p/6005354.html

https://blog.youkuaiyun.com/sjmz30071360/article/details/79877846

https://blog.youkuaiyun.com/l1394049664/article/details/82534900(block 解析)

https://blog.youkuaiyun.com/u012736748/article/details/79545991(haoop1.x与2.x架构对比)

https://www.cnblogs.com/tesla-turing/p/11488035.html(blockInfo与block解析)

https://www.cnblogs.com/bianqi/p/12183791.html(blockInfo 详解)

https://www.aboutyun.com/thread-7604-1-1.html

https://www.cnblogs.com/PigeonNoir/articles/9116127.html(ha机制源码级详解)

https://blog.youkuaiyun.com/qq_26562641/article/details/50344787(inode相关源码分析)

https://blog.youkuaiyun.com/czz1141979570/article/details/86735695(QJM详解)

https://my.oschina.net/hadooper/blog/336809(这个博主写了一系列包含HA的解析)

https://blog.youkuaiyun.com/zhangjun5965/article/details/76796998?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase(zkfailover 解析)

大数据基础--习题整理(1) 习题一 1Hive是由哪家公司开源的大数据处理组件?(单选题)b a.Google    b.Apache    c.Facebook 2Hive的计算引擎是什么?(单选题)b a.Spark    b.MapReduce     c.HDFS 3Hive加载数据文件到数据表中的关键语法是?(单选题)d a.LOAD DATA [LOCAL] I 阅读详情

相关推荐

大数据 hadoop 面试题

1.0 简要描述如何安装配置apache的一个开源hadoop,只描述即可,无需列出具体步骤,列出具体步骤更好。 答:第一题:1使用root账户登录 2 修改IP 3 修改host主机名 4 配置SSH免密码登录 5 关闭防火墙 6 安装JDK 6 解压hadoop安装包 7 配置hadoop的核心文件 hadoop-env.sh,core-site.xml , mapred-si...

zzq_0916s的博客 5141

Hadoop HDFS概述

在现代的企业环境中,单机容量往往无法存储大量数据,需要跨机器存储。统一管理分布在集群上的文件系统称为分布式文件系统。

懒猫的脚印 1909

西门子V90 PN伺服控制核心:FB284功能块详解与实战

在工业自动化中,伺服定位控制是运动控制的基础环节,其本质是PLC通过PROFINET协议与伺服驱动器实现高速、确定性数据交互。FB284作为西门子为V90 PN定制的标准化功能块,封装了GSD映射、状态机管理与周期性PDO同步机制,将底层寄存器操作抽象为高可靠调用接口。相比MOVE指令或MC_MoveAbsolute等通用方案,FB284显著降低时序错乱风险,提升多轴同步精度与故障响应能力。它广泛应用于包装、灌装、装配等中端产线,尤其适配S7-1200/1500平台下的快速部署与现场维护。本文聚焦V90 P

weixin_42696271的博客 300

hadoop生态圈面试精华之HDFS部分

hadoop生态圈面试精华之HDFS部分

m0_46914845的博客 1880

开发者体验度量:构建DevEx评估体系的方法论与工具

在深入讨论度量方法前,我们需要明确什么是开发者体验(DevEx)。许多人将其简化为"开发工具好不好用",这是一个危险的误解。开发者体验是指开发者在完成工作过程中的整体感受和效率,它由三大核心维度组成:工具与基础设施:开发、测试、部署工具链的效能流程与协作:工作流程的顺畅度和团队协作的效率文化与成长:支持实验、学习和专业发展的环境这三个维度相互作用,共同决定了开发者能否高效且愉悦地完成工作。开发者体验不是一个目的地,而是一段持续的旅程。

2401_88760782的博客 1429

软考中级-系统集成项目管理工程师**的超详细知识点笔记。

软考中级系统集成项目管理工程师核心知识点摘要 综合知识:涵盖信息化基础(国家信息化六要素、信息系统开发方法)、系统集成特点(高技术性、团队协作)、IT服务管理(ITIL流程)、网络技术(OSI模型、TCP/IP)、信息安全(CIA三要素、加密技术)、软件工程(生命周期、测试类型)、面向对象分析与设计(UML图)、新一代信息技术(云计算、大数据、物联网)。 案例分析:聚焦项目管理十大知识领域,重点包括: 整体管理(项目章程、变更控制流程) 范围管理(WBS分解、需求跟踪矩阵) 进度管理

最爱で毛毛熊的博客 1990

Hadoop3.2.1 【 HDFS 】源码分析 : BlockPoolManager 解析

一. 前言 BlockPoolManager类负责管理所有的BPOfferService实例, 对外提供添加、 删除、 启动、 停止、 关闭BPOfferService类的接口。 所有对BPOfferService的操作, 都必须通过BlockPoolManager类提供的方法来执行。 DataNode.startDataNode()方法初始化了BlockPoolManager对象, 然后调用BlockPoolManager.refreshNamenodes()方法完成对BlockPoolManager的构

张伯毅的专栏 3724

偷懒必备:3种方法快速移植MFC界面资源(含.rc文件打不开解决方案)

本文针对MFC桌面应用开发,详细介绍了三种快速移植界面资源的实战方法:直接编辑.rc文件、利用Visual Studio“添加现有项”进行可视化挂载,以及双实例拖拽应急方案。文章重点剖析了.rc文件无法打开的常见问题,提供了通过修复rc.exe等关键文件来根治此问题的解决方案,帮助开发者高效复用资源,规避ID冲突等陷阱。

weixin_28358083的博客 273

Hadoop3.2.1 【 HDFS 】源码分析 : 文件系统数据集 [一]

一. 前言 Datanode可以配置多个存储目录保存数据块文件(这里要注意, Datanode的多个存储目录存储的数据块并不相同, 并且不同的存储目录可以是异构的, 这样的设计可以提高数据块IO的吞吐率) , 所以Datanode将底层数据块的管理抽象为多个层次, 并定义不同的类 来实现各个层次上数据块的管理。 ■ BlockPoolSlice: 管理一个指定块池在一个指定存储目录下的所有数据块。 由于Datanode可以定义多个存储目录, 所以块池的数据块会分布在多个存储目录下。一个块池会拥有多个Blo

张伯毅的专栏 4685

VQGAN实战:从文本到高清图像的保姆级生成教程(含PyTorch代码)

本文详细介绍了VQGAN(Vector Quantized Generative Adversarial Network)在文本到高清图像生成中的应用,提供了从环境配置到模型加载、文本编码及图像生成的完整PyTorch代码教程。通过实战案例和高级调优技巧,帮助开发者快速掌握VQGAN的核心技术,实现百万像素级的高清图像生成。

u8v9w0x1y的博客 649

别再自己写组件了!用uni-app的midButton属性5分钟搞定中间凸起TabBar(H5/小程序通用)

本文详细介绍了uni-app官方提供的midButton属性,帮助开发者5分钟内实现中间凸起的TabBar效果,无需编写繁琐的自定义组件代码。该方案兼容H5和微信小程序平台,配置简单且维护成本低,大幅提升开发效率和性能表现。

weixin_30431445的博客 347

深入理解HDFS:Hadoop分布式文件系统

文本详细介绍了HDFS中的许多概念,对于理解Hadoop分布式文件系统很有帮助。1. 介绍在现代的企业环境中,单机容量往往无法存储大量数据,需要跨机器存储。统一管理分布在集群上的文件系统称为分布式文件系统。而一旦在系统中,引入网络,就不可避免地引入了所有网络编程的复杂性,例如挑战之一是如果保证在节点不可用的时候数据不丢失。传统的网络文件系统(NFS)虽然也称为分布式文件系统,但是其存在一些限制。由于

Spring , Hadoop, Spark , BI , ML 5万+

【Claude Code 源码解析教程】总体大纲

本教程旨在深入解析 Anthropic Claude Code 项目的源码架构和实现细节。Claude Code 是一个基于 TypeScript + Bun 构建的 AI 编程助手 CLI 工具,代号 "Tengu",具有复杂的多模块架构和丰富的功能特性。本教程基于Claude Code 的源码分析来生成,将帮助您全面掌握 Claude Code 的源码架构和实现细节,为开发类似 AI 编程助手工具奠定坚实基础。

rengang66的博客 387

HADOOP-HDFS ( hadoop 分布式系统文件) 相关知识点整理(1)

HADOOP-HDFS ( hadoop 分布式系统文件) 相关知识点整理(1)

桂林算啦粉的博客 256

在Simulink中实现一个基于SiC MOSFET的高效率电机驱动系统

本文介绍了在Simulink中构建基于SiC MOSFET的高效率电机驱动系统的详细流程。系统由直流电源模块、SiC MOSFET逆变器模块、PMSM电机模型、控制策略模块(包括矢量控制和PWM生成)以及反馈测量模块组成。文章逐步指导了从模型创建到参数设置的完整过程,包括各模块的具体实现方法。通过仿真可以评估系统在不同负载条件下的响应速度、效率、功率密度等性能指标。该建模方法为电机驱动系统的设计和优化提供了有效工具,同时建议根据实际硬件规格和工程需求进行参数调整和定制化开发。

xiaoheshang_123的博客 249

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Hadoop-HDFS核心知识笔记整理

本文内容主要从《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》一书中摘录总结成文,可以让我们以最快的速度回顾Flink相关的核心知识点。文章成文以常见的领域模块组织。

月光冷锋的博客 1215

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

hadoop知识整理(1)之HDFS

一、HDFS是一个分布式文件系统   体系架构:   hdfs主要包含了3部分,namenode、datanode和secondaryNameNode   namenode主要作用和运行方式:   1)管理hdfs的元数据信息,文件名字,大小,切成几块,有几个副本,切成块和副本分别存储在datanode的位置,块id、大小;   2)通过rpc心跳机制,来检测datanode的...

weixin_30840573的博客 203

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Hadoop/HDFS/MapReduce/Spark/HBase重要知识点整理

Hadoop的功能和作用:高效地存储,管理,分析海量数据Hadoop采用分布式存储方式, 提高了读写速度,并扩大了存储容量,通过冗余存储保证了安全性。MapReduce可以高效地分析和处理数据。为什么不用关系型数据库加上更多磁盘来做大规模批量分析?B树适合更新小部分数据,在更新大部分数据库数据的时候,B 树的效率没有 MapReduce 的效率高,因为它需要使用排序/合并来重建数据库。MapReduce适合批处理,关系型数据库适合交互型访问和批处理。

mavis2003的博客 1628

大数据知识梳理(Hadoop、HDFS)(整理中。。。)

大数据知识梳理(Hadoop、HDFS)(更新中。。。) 第1讲 大数据概述1.1 大数据时代1.2 大数据概念和影响1.3 大数据的应用1.4 大数据的关键技术1.5 大数据与云计算、物联网 第2讲 大数据处理架构Hadoop2.1 概述2.2 Hadoop项目结构2.3 Hadoop的安装与使用2.4 Hadoop集群的部署和使用 第3讲 分布式文件系统HDFS3.1 分布式文件系统...

菜鸟-传奇 3266

大数据技术之Hadoop分布式文件系统HDFS系统知识整理(从入门到熟练操作)

文章目录一、HDFS概述1.1 HDFS产生背景1.2 HDFS定义1.3 HDFS使用场景1.4 HDFS优缺点1.4.1 优点1.4.2 缺点 一、HDFS概述 1.1 HDFS产生背景   随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种 1.2 HDFS定义   HDFS(Hadoop Dis

IronmanJay 1816

知识框架(2-2)一遍搞定云计算——Hadoop/HDFS #面试常见 #教科书式整理

参考资料 HKU Cloud Computing Course Material 云计算知识点梳理 https://zhuanlan.zhihu.com/p/38532674 云计算知识点 https://blog.youkuaiyun.com/Gosick_Geass_Gate/article/details/92979971 【云计算与大数据】知识点总结 https://blog.youkuaiyun.com/qq...

NiniLive的博客 1162

Hadoop配置文件参数整理(2)---hdfs-site.xml

占个坑,慢慢整理。

海贼的船 773

Hadoop期末考试选择题整合--助力期末绩点提高!

HDFS默认的当前工作目录是/user/$USER, fs.default.name的值需要在哪个配置文件内说明? A、mapred-site.xml B、hdfs_site.xml C、core-site.xml D、以上均不是 如何启动ssh服务? == A、 service sshd start== B、service ssh start C、/etc/init.d/ssh status D、service ssh status 关于服务启动正确的是() A、sbin/hadoop-dae..

考研渣渣斌斌的博客 3788

74道Hadoop高频题整理(附答案背诵版)

Hadoop的序列化和反序列化是其处理数据的一个重要方面,特别是在MapReduce过程中。在Hadoop中,序列化涉及将对象转换成可以在网络上发送或写入磁盘的格式,而反序列化则是将这些格式还原回原始对象。Hadoop使用自己的序列化框架,不同于Java的原生序列化,因为它更加高效和灵活。为了在Hadoop中有效地传输自定义对象,通常需要让这些对象实现Writable接口。实现Writable接口:自定义的Bean类需要实现Writable接口,这要求定义和方法。这两个方法分别用于序列化和反序列化对象。

Angela_L的博客 753

Hadoop大数据面试题

1、hadoop操作命令mv 对比copy? mv 性能更高,copy会改变时间属性,mv不会。 2、操作HDFS有哪几种方式? JAVA API 、Web UI 、Shell 3、MR的执行流程(yarn的工作流程、作业执行过程)? 客户端提交一个作业,ResourceManager为该作业分配第一个Container,并与对应的NodeManager通信,要求NodeMa...

曹利荣的博客 1440

全网最不靠谱的大数据思维导图,带你提前了解Hadoop生态系统,解锁新手福利!!!

        在之前的博客《全网最全Python学习路线图+14张思维导图,让python初学者不走弯路!》发布出去之后,也算是小小地"火"了一吧。最直观的表现就在于原来两百出头的粉丝数到现在翻了一倍(入驻优快云不到2个月)。        &...

大数据梦想家 3717
上一篇: hadoop shuffle 过程理解
下一篇: HashMap(红黑树,线程不安全)详解
date-date
博客等级 码龄9年 6粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值