hadoop学习笔记(一)

来源:互联网 发布:手机英文软件翻译器 编辑:程序博客网 时间:2024/06/07 03:37

hadoop学习笔记(一)

我的个人博客站点地址:孙星的个人博客主页
后续的学习笔记:hadoop学习笔记

1 HDFS介绍

Hadoop Distributed File System (HDFS™): A distributed file system that provides high-throughput access to application data.
翻译过来就是:一种提供高吞吐量访问应用数据的分布式文件系统

hdfs是hadoop的基础,主要用于数据的存储,在数据存储的基础上,MapReduce程序等就可以在相应的分布式节点上进行数据的处理,HDFS简单点就是
文件系统,比如操作系统中的文件系统等,文件系统对外提供文件的各种操作,比如读写,创建,删除等等操作,同时文件系统中还有文件的属主等等权限问题,这些在HDFS中都有。

HDFS运行机制* 一个名字节点和多个数据节点* 数据复制(副本,冗余机制)* 故障检测    -- 数据节点        心跳包(检验是否宕机)        块报告(安全模式下检测)        数据完整性检测(校验和比较)    -- 名字节点        日志文件,镜像文件* 空间回收机制HDFS优点* 高容错性    数据自动保存多个副本    副本丢失自动回复* 适合批处理    移动计算而非数据    数据位置暴露给计算框架* 适合大数据处理    GB,TB,PB级别数据* 可以构建在廉价的机器上HDFS缺点* 低延迟数据访问    比如毫秒级别,毫秒级相应的数据是不适合在hadoop中存储的    低延迟和高吞吐率* 小文件存取    占用NameNode大量内存    寻道时间超过读取时间* 并发写入,文件随机修改    一个文件只能有一个写者    仅支持appendHDFS数据存储单元(block)* 文件被切分成固定大小的数据块    默认数据块大小为64M,可配置    若文件大小不到64M,可单独存成一个block* 一个文件存储方式    按照大小切分成若干个block,存储在不同的节点上    默认情况下每个block都有上个副本集,这个需要配置    配置副本集的方式: 设置dfs.replication值* Block大小和副本数通过client端上传文件的时候进行设置,文件上成功以后副本数可以改变,BlockSize不可变

2 NameNode

NameNode管理文件系统的命名空间。它维护着文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:
命名空间镜像文件和编辑日志文件。NameNode也记录着每个文件中各个块所在的数据节点信息,但它并不永久保存块的位置信息,因为这些信息在系统启动时由数据节点重建

- NameNode 主要功能:接收客户端的读写请求服务- NameNode 保存metadata信息    * 文件owership和permissions(文件权限,所有者等)    * 文件包含哪些块    * Block保存在哪个DataNode(由DataNode启动时上报)- NameNode的metadata信息,在启动后会加载到内存中     * metadata存储到磁盘文件名为:fsimage    * block的位置信息不会保存到fsimage    * edits记录对metadata的操作信息NameNode的处理流程:-启动集群,初始化读取fsimage,将相应的文件的元数据和相应的权限数据以及分布节点数据加载到内存中-接收到客户端的操作读写请求,将接收到的客户端请求到写入到edits中,同时这个时候文件目录数据都已经在内存中改过了,

同时定期会将操作流水也就是edits合并到fsimage中,如果这个合并的动作也需要让NameNode来进行操作,对NameNode的压力比较大,因此SecondaryNameNode来进行这个操作,同时可以进行数据的备份。

3 SecondaryNameNode(SNN)

- 它不是nn的备份(但是可以做备份),它主要的工作是帮助nn合并edits-log,减少nn启动的时间- SNN执行合并时机    根据配置文件设置的时间间隔fs.checkpoint.period 默认3600秒    根据配置文件设置edits.log大小 fs.checkpoint.size规定edits文件的最大默认是64M

主要是因为namenode节点的主要任务是用于接收客户端的读写请求服务,因此如果namenode的主要任务用于去进行对edits进行合并,
也就是客户端读写请求的日志文件的合并操作,会浪费cpu资源,因此独立出来一个SecondaryNameNode进行操作日志的合并动作

SNN合并流程* 在namenode上的edits文件和fsimage进行合并:* secondNamenode 从namenode中拷贝edits和fsimage拷贝过来,由于在secondnamenode* 进行拷贝合并的时候,namenode还需要继续进行接收客户端发过来的请求,因此会生产性的edits用户操作日志文件* 用于写行接收到的。* 拷贝过来以后新生成的edits文件用于接收用户操作日志,那么secondnamenode相当于针对namenode的冷备份* secondnamenode拷贝edits和fsimage文件后,针对这两个文件进行合并成行的fsimage,并将这个文件拷贝到namenode上* 用户更新fsimage

SecondaryNameNode的合并流程图:
流程图如下:
流程图

3 DataNode

主要作用:* 存储数据(Block)* 启动DataName线程的时候会向NameNode汇报Block信息* 通过向Namenode发送心跳包保持与其的联系(3秒一次),如果十分钟没有收到DataName的心跳* 认为其已经lost,也就是挂了,NameNode往DataNode发送消息,告诉它们哪些文件副本数不够,DataNode上根据剩余的副本数其中的一个拷贝一份* 发送到其他的机器上,也就是挂了一台DataNode,将副本数不够的block拷贝补足副本数Block的放置策略* 第一个副本:放置在上传文件的DataNode    如果是集群外提交的,则随机挑选一台,磁盘不太满,cpu不太忙的节点* 第二个副本:放置在于第一个副本不同的机架节点上* 第三个副本:与第二个副本相同的机架的节点上* 更多副本:随机节点

4 HDFS读流程

HDFSClient -->  代用Distributed FileSystem接口打开文件            -->  Distributed FileSystem接口从namenode获取block的地址信息           -->  拿到相应的block位置信息后,找到副本所在的位置信息,找一台比较空闲的机器进行读取信息,至于那些机器是空闲的,    DataNode会向NameNode发送消息,上报自己的情况,也就是NameNode知道DataNode的状态           -->  同时可以并行的读取其他block的数据,最后在client进行合并文件           -->  合并好了后关闭这个文件流

读取流程图如下:
读取流程图

5 HDFS写流程

HDFSClient -->  代用Distributed FileSystem接口创建接口,传递文件名,文件大小,文件所有者等信息给NameNode           -->  NameNode向client返回时需要切分的block数据块以及对应的每个block存储的位置           -->  client将block根据NameNode发送过来的DataNode地址写入到相应的节点上           -->  由于每个block有副本集,因此,在写入这个数据的同时,写入的block那个节点会进行数据的复制到其他DataNode           -->  DataNode复制完数据以后会返回数据给client           -->  client会上报处理完成给NameNode

读取流程图如下:
写取流程图

6 安全模式

namenode启动时候,首先将映像问价(fsimage)载入到内存,并执行编辑日志中的各项操作
一旦在内存中成功建立文件系统元数据的映像,则创建一个新的fsimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志文件
此刻namenode运行在安全模式,即namenode的文件系统对于客户端来说是只读的(显示目录,显示文件的内容等,写删除重命名等操作会失败)
在此阶段NameNode收集各个DataNode的报告,当数据库达到了直销副本数以上时,会被认为是安全的在一定的数据库被劝人为安全后, 在过若干时间,安全模式结束
当检测到副本数不足的数据块时,该数据块会被复制直到达到最小副本数,系统中数据块的位置并不是由NameNode维护的,而是以块列的形式存储在DataNode中

7 Hadoop核心组件–MR(MapReduce)

- Hadoop 分布式计算框架(MapReduce)- MapReduce设计理念    * 何为分布式计算    * 移动计算而不是移动数据
0 0
原创粉丝点击