Hadoop入门

 

一、大数据业务基本工作流程

数据源->数据采集->数据分析(Hdfs、ES、Hbase)->数据分析(MapReduce、Hive、Spark)->数据存储(关系型数据库)->页面读取展示

二、为什么使用Hadoop

1、为什么使用?

开源、java语言、跨平台、商用硬件、分布式、集群

2、优缺点分析

hadoop是一个开源的大数据框架,分布式计算的解决方案,两个核心解决了数据存储问题(HDFS分布式文件系统)和分布式计算问题(MapReduce)。

优点:

  • 支持超大文件,HDFS存储文件可以支持TB和PB级别的数据
  • 检测和快速应对硬件故障、数据备份机制,NameNode通过心跳机制来检测datanode是否还存在
  • 高扩展性,可建构在廉价机上,实现线性(横向)扩展,当集群增加新节点后,NameNode也可以感知,将数据分发和备份到相应的节点上。

缺点:

  • 不适合小文件存储
  • 文件修改效率低,适合一次写入,多次读取的场景

3、HDFS框架介绍:它是master和slave的主从结构,主要由Name-Node、Secondary NameNode、DataNode构成。

NameNode:管理HDFS的名称空间和数据块映射信存储元数据与文件到数据块映射的地方。如果NameNode挂掉了,文件就无法重组?有哪些容错机制?

hadoop可以配置成HA即高可用集群,集群中有两个Name Node节点,一台active主节点,另一台standby备用节点,两者数据时刻保持一致,当主节点不可用时,备用节点马上自动切换,用户感知不到,避免了NameNode的单点问题。

Secondary NameNode :辅助NameNode,分担NameNode的工作,紧急情况下恢复NameNode

DataNode:Slave节点,实际存储数据,执行数据的读写并汇报存储信息给NameNode。

4、HDFS文件读写

  • 文件按照数据块的方式进行存储在DataNode上,数据块是抽象块,作为存储和传输单元,而非整个文件
  • 按照文件块来存储是为了简化存储系统的设计,比如100t的文件大于磁盘的存储,需要把文件分成多个数据块进行存储,为了保证数据安全,经常还需要备份,而数据块非常适合数据的备份,进而提升数据的容错能力和可用性
  • 数据块大小设置:如果太小,访问时需要访问多个,效率并不高,如果太大,对内存消耗严重,并发能力不好,如果需要重启,内存块太大,系统恢复就会越长

5、HDFS文件读流程

  • 向Name Node通信查询元数据,找到文件块所在的DataNode服务器
  • 挑选一台DataNode(就近原则,然后随机)服务器,请求建立socket流
  • DataNode开始发送数据(从磁盘里面读出数据放入流,以packet为单位做校验)
  • 客户端以packet为单位接收,先在本地缓存,再写入目标文件,后面的block块详单与append到前面的block块最后合成最终需要的文件。

6、HDFS写入流程

  • 客户端向NameNode发出写文件请求。
  • 检查是否已存在文件、检查权限。若通过检查,直接先将操作写入EditLog,并返回输出流对象。
    (注:WAL,write ahead log,先写Log,再写内存,因为EditLog记录的是最新的HDFS客户端执行所有的写操作。如果后续真实写操作失败了,由于在真实写操作之前,操作就被写入EditLog中了,故EditLog中仍会有记录,我们不用担心后续client读不到相应的数据块,因为在第5步中DataNode收到块后会有一返回确认信息,若没写成功,发送端没收到确认信息,会一直重试,直到成功)
  • client端按128MB的块切分文件
  • client将NameNode返回的分配的可写的DataNode列表Data数据一同发送给最近的第一个DataNode节点,此后client端和NameNode分配的多个DataNode构成pipeline管道,client端向输出流对象中写数据。client每向第一个DataNode写入一个packet,这个packet便会直接在pipeline里传给第二个、第三个…DataNode。
    (注:并不是写好一个块或一整个文件后才向后分发)
  • 每个DataNode写完一个块后,会返回确认信息
    (注:并不是每写完一个packet后就返回确认信息,个人觉得因为packet中的每个chunk都携带校验信息,没必要每写一个就汇报一下,这样效率太慢。正确的做法是写完一个block块后,对校验信息进行汇总分析,就能得出是否有块写错的情况发生)
  • 写完数据,关闭输输出流。
  • 发送完成信号给NameNode。
    (注:发送完成信号的时机取决于集群是强一致性还是最终一致性,强一致性则需要所有DataNode写完后才向NameNode汇报。最终一致性则其中任意一个DataNode写完后就能单独向NameNode汇报,HDFS一般情况下都是强调强一致性)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值