Hadoop笔记

本文详细介绍了Hadoop的框架组成,包括MapReduce、HDFS、Common,以及Hadoop2.X针对1.X的问题改进,如NameNode高可用、Yarn资源调度等。还探讨了大数据的特点、Hadoop的优势,以及HDFS的读写流程、数据安全性和故障处理。此外,文章还涵盖了Hadoop的发行版本、运行模式、NameNode和SecondaryNameNode的角色,以及MapReduce的工作原理。最后,讨论了Hadoop的优化策略、数据倾斜处理和Yarn架构。
摘要由CSDN通过智能技术生成

Hadoop

  Hadoop框架
  1.0 MapReduce、HDFS、Common
  2.0 MapReduce、Yarn、HDFS、Common

  MapReduce: 1.X 计算+资源调度   2.X 计算
  Yarn:资源调度
  HDFS:文件存储
  Common:辅助工具
  Hadoop1.X 存在的问题:
    <1>NameNode不能高可用,存在单节点故障问题。
    <2>MR框架将资源和任务调度的耦合导致效率低。
    <3>MR框架基于磁盘计算导致性能低。
  Hadoop2.X 发行于2013年10月,解决Hadoop1.X中的问题
    <1>Namenode高可用,2.X只能起两台,3.X才能起3台。
    <2>增加了Yarn资源调度,将资源调度与任务调度解耦。
    <3>计算框架可插拔。
    
  大数据特点:大量、高速、多样、低价值密度 
  大数据:存储、分析+计算、传输
  Hadoop优势:高可靠、高扩展、高效、高容错
  数据量级别:TB、PB、EB

  Hadoop三大发行版本 
  1.Apache
  2.Cloudera(CDH)
  3.Hortonworks。

  Hadoop运行模式
  1.本地模式:只依赖与hadoop的一些jar包,跑简单的案例和程序,进行测试。无yarn等
  2.伪分布式模式:仅一台服务器。
  3.完全分布式模式 : 多节点 Hadoop102、Hadoop103、Hadoop104

  集群时间同步:找其中一台服务器作为时间服务器,让其他的节点每隔一段时间过来对一下时间

HDFS架构
  NameNode:负责管理和存储元数据;文件名、目录结构、文件属性(时间、副本、权限)、文件块列表,块所在DataNode(BlockId)。
  DataNode:本地文件系统中存储文件块数据、块校验和。
  SecondaryNameNode:定时将日志文件和镜像文件进行合并。
  说明:谁启动的hdfs谁具有最高权限。
  
  格式化namenode:
  1.创建文件存储的目录。
  2.创建编辑日志和镜像文件
  3.创建UID

  节点距离的计算:
  节点、机架、集群、数据中心
  不同的节点之间建立连接需要先到达通信节点可以共同到达的最小交汇点,然后再走向目标节点。
  同一节点的进程:0
  同一机架上不同节点进程:2
  同一集群不同机架节点上的进程:4
  同一数据中心不同集群中节点上的进程:6 
  
  HDFS数据写入流程:
  1.客户端将文件分块,默认块大小为128M,HDFS不支持并发写入,每次只能上传一个块。
  2.客户端通过分布式文件系统 DistributeFileSystem 向 NameNode 发送上传文件请求, 
    NameNode 收到请求后检查目标文件是否存在,父目录是否存在,之后响应客户端可以上传文件。
  3.客户端收到响应后向 NameNode 请求上传第一个块信息,并请求返回 DataNode,NameNode 
    收到请求后根据文件的备份数量返回相应数量的 DataNode 节点。
  4.客户端收到来自 NameNode 返回的节点信息,通过 FSDataOutPutStream 向离客户端最近的
    节点上传数据,第一个节点收到请求后会继续调用下一个的DataNode节点,然后下一个节点去调用自己的下一个节点,
    直到最后一个节点,将通信管道 PipeLine 建立,然后各个节点从后向前逐级应答客户端。
  5.通信管道 PipeLine 建立完成后,客户端先将磁盘中的块信息读到内存,然后通过 FSDataOutPutStream
    开始以 Packet 为单位传送块数据,其中 Packet 为64K由 Chunk 组成,每个 Chunk 为 512B 
    并且每个 Chunk 还包含了4B的 crc 校验信息,共516B。当 Packet 被 Chunk 填满以后就将 Packet 
    放入到应答队列 DataQueue 队列中等待,再从该队列中将 Packet 取出存入另一个队列 ACKQueue 队列中,
    然后将该 Patcket 发送给离客户端最近的 DataNode 。 
  6.第一个 DataNode 收到数据后,会将该数据传递给下一个 DataNode,每个节点收到数据后都会逐级传递给
    下个节点直至 PipeLine 中的最后一个节点。并且在传输 Packet 的过程中,每向 DataNode发送一个 Packet
    数据客户端都会等待来自 DataNode 的应答响应,若响应则代表当前节点收来自客户端发送的数据,若没有
    响应时会将 ACKQueun 中的 Packet 数据重新放回到 DataQueue 队列中等待再次发送,避免了数据丢失。
  7.当第一个Block 块信息传输完成后,客户端会再次请求 NameNode 上传第其他个 Block 块信息。
  说明:
  1.块大小的设置,受磁盘读写速度的影响,寻址时间为传输时间的1%为最佳状态,由于寻址时间为 10ms 所以传输时间为1S,
    而磁盘的传输速率约为 100MB/s 所以块大小约100M,但100不是2的整次幂,所以选离它较近的128M。
    如果块太小会导致文件被分的过多造成资源浪费;由于 MapReduce 的切片规则是默认是按照文件的块大小
    切分的,如果块太大了会导致切片过大会使 MapTask 的个数过少,单个 MapTask 的任务量过大,无法快速完成任务。   
  2.通信管道 PipeLine 的建立,如果在创建过程中其中某个节点没有应答,客户端会向 NameNode 重新请求 DataNode,
    NameNode 收到请求后会重新分配并发送新的 DataNode;如果在文件传输过程中,某个节点因为某种原因挂掉了,
    或者其他的原因该节点收不到数据没有应答,客户端会正常重新向其发送数据,再重复发一次之后还收不到应答
    则认为该节点不可用便会跳过该节点向其余的节点传送数据,传输完成之后,NameNode 在收到 DataNode 的
    上报信息时会发现少了一个备份,则会将其他节点上的文件自动备份一份。特别:如果是第一个节点有问题,则整个管道
    不会形成,或形成管道之后第一个节点有问题则直接导致任务失败。
  3.每个 Chunk 都会包含4B的 crc 校验信息,所以每传128M的信息都会包含1M的 crc 校验信息。
  4.HDFS不支持随机写,但支持追加写入。
  
  HDFS读出数据流程:
  1.客户端通过 DistributeFileSystem 向 NameNode 申请下载文件请求,NameNode 收到客户端下载请求后通过
    查询文件的元数据找到文件所在的 DataNode ,然后返回包含所有该下载文件的 DataNode 给客户端。 
  2.客户端收到 NameNode 发送回来的 DataNode 信息后,会寻找据当前节点最近的 DataNode 节点请求下载文件。
  3.DataNode 收到客户端下载请求后开始向客户端发送数据,先将磁盘中的块信息通过输入流读出到内存,然后以 Packet 
  作为单位校验,传输给客户端。
  4.客户端收到 Packet 后先将文件读入到内存然后通过输出流写出到磁盘存储。
  
  NameNode和DataNode:
  1.当开启 DataNode后,DataNode 会主动向 NameNode 申请注册。
  2.注册成功后, DataNode周期性的每隔1小时(默认6)向NameN

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值