Hadhoop框架学习(1)

目录

  • Hadhoop框架学习(1)
    • 一、基本概念
      • 1、分布式系统
      • 2、Hadhoop简介
      • 3、TCP协议和UDP协议
        • (1)TCP协议
        • (2)UDP协议
      • 4、Socket原理
      • 5、RPC协议
    • 二、HDFS
      • 1、组成
        • (1)namenode
        • (2)secondaryNamenode
        • (3)datanode
      • 2、读取文件流程
      • 3、写文件流程
      • 4、删除文件流程
      • 5、一些问题

Hadhoop框架学习(1)

一、基本概念

1、分布式系统

  分布式系统(distributed system)是建立在网络上的软件系统。
分布式系统与计算机网络系统具有相同的物理结构。
分布式系统与一般网络的区别:

  1. 分布式系统具有很强的内聚性和透明性。存在一个协调全局的高层软件
  2. 分布式系统中存在一个以全局的方式管理计算机资源的分布式操作系统
  3. 通常,对用户来说,分布式系统只有一个统一的模型或泛型,由操作系统上一层的软件中间件实现。

2、Hadhoop简介

  Hadhoop是Apache基金会开发的分布式系统基础架构。用户可以在不了解分布式系统底层细节的基础上进行分布式程序开发,利用集群的威力实现大数据处理和分布式计算。其最核心的设计是HDFS和MapReduce。

  1. HDFS(Hadhoop Distributed File System)即Hadhoop的分布式文件系统。它容错性高,可以部署在价格低廉的硬件上,具有高吞吐量,适用于超大数据访问的应用程序。另外,它可以以流的形式访问文件系统中的文件。
  2. MapReduce适用于处理海量数据的一种编程模型。

  Hadhoop1.0完整的架构图如下,
Hadhoop框架学习(1)_第1张图片
接下来的学习就是围绕这个框架进行的。

3、TCP协议和UDP协议

(1)TCP协议

  TCP(Transfer Control Protocol)协议是面向连接的可靠通信协议。它的基本思路是通信的发送方和接收方需要首先建立可靠的连接,然后再进行数据传输。TCP协议获得的是顺序的无差错的数据流。发送方和接收方之间的连接通过的是socket套接字,类似于插座。
  TCP传输的连接需要经过三次握手,

  1. 第一次握手:客户端向服务器发送syn包,发送完毕后客户端进入SYN_SEND状态,等待服务器确认;
  2. 第二次握手:服务器接收到syn包并进行确认,然后向客户端发送syn+ack包,发送完毕后进入SYN_RECV状态;
  3. 第三次握手:客户端接收到syn+ack包后,再次向服务器发送确认包,发送完毕后,服务器和客户端进入ESTABLISHED状态。

(2)UDP协议

  UDP(User Datagram Protocol)即用户数据报协议。是一种无连接协议,每个数据报都包含了完整的源地址信息和目的地址信息。因而数据传输的可靠性和准确性无法得到保证。

4、Socket原理

  Socket套接字是支持TCP/IP协议通信的基石。它是网络中通信端点的抽象表示。它包含以下五个基本信息:

  1. 连接使用的协议;
  2. 本地主机的ip地址;
  3. 本地进程的协议端口;
  4. 远地主机的ip地址;
  5. 远地主机的协议端口;

  Socket是对TCP/IP协议的封装,套接字连接也分为三个步骤:

  1. 服务器监听。服务器初始化一个套接字对象,调用监听方法,开始监视网络状态,等待客户端连接;
  2. 客户端请求。客户端创建一个客户端套接字,并包含服务器端的地址和端口号,向服务器提出连接请求;
  3. 连接确认。服务器端监听到客户端的连接请求,确认请求后,建立一个新的线程,向客户端发送服务器端的套接字,客户端确认后连接建立。服务器继续处于监听状态,监听其他客户端套接字的连接请求。

5、RPC协议

  RPC(Remote Procedure Call)远程过程调用协议,它是对Socket套接字的封装,使得在调用远程终端服务时能像在本地调用一样。

二、HDFS

  分布式文件系统(DFS)中,文件被存储在集群中的多台机器和存储设备里,并允许多用户同时访问。HDFS是基于Java实现的分布式文件系统。在框架图里也可以看出来,Hadhoop以HFDS作为底层的存储系统来存放数据。

1、组成

  HFDS由三部分组成:namenode, secondaryNamednodedatanode

(1)namenode

  namenode用于管理文件系统的命名空间控制用户访问。它维护了文件存储位置切块数和文件存储的datanode地址

  1. fsimage存储了元数据;
  2. edits存储了HDFS的操作;
  3. fstime记录上一次更新的时间;

(2)secondaryNamenode

  进行fsimage和edits文件的合并,起到一定的备份namenode作用,但不是它的热备份。namenode的热备份依赖于journalnode。

(3)datanode

  datanode是一个大的数据块存储的节点。

2、读取文件流程

  HDFS对数据的读取采用RPC远程过程调用协议,终端读取文件的具体流程如下:

  1. 客户端发起RPC请求访问namenode;
  2. namenode查询元数据,找到其文件存储位置对应的数据块信息;
  3. namenode将文件对应的数据块存储节点的部分或全部地址放入一个队列中返回;
  4. 客户端接收节点地址;
  5. 客户端取出第一个数据块节点地址,并从最近的存储设备中进行读取;
  6. 数据块读取完毕后进行校验和,若校验失败,则向namenode发送读取失败信息,然后从其他设备中重新读取该数据块;
  7. 校验成功,客户端取出下一地址进行数据块的读取;
  8. 当地址队列为空,客户端向namenode继续发送请求,获取下一批数据块地址;
  9. 当文件全部读取完毕,客户端向namenode发送读取完毕信号,namenode关闭对应的文件。

3、写文件流程

  HDFS写文件流程如下:

  1. 客户端向HDFS的namenode发出RPC请求;
  2. namenode对请求进行验证,验证内容包括文件是否存在、权限等;
  3. 验证成功,namenode确定文件大小和分块数量,并寻找磁盘空间空闲的节点,并将其节点地址作为队列返回;
  4. 客户端收到地址队列,依次访问地址将文件存入;
  5. 客户端写文件结束后,向namenode发送写完毕信号,namenode向客户端发送关闭文件信号;
  6. datanode之间将会通过管道自动备份以保证复本数量;

4、删除文件流程

  HDFS删除文件流程如下:

  1. 客户端发送RPC请求至namenode;
  2. namenode收到请求后,将删除操作写入edits中,然后将元数据从内存中删掉,并向客户端返回删除成功信号;
  3. 客户端收到信号后,认为数据已被删除;
  4. 当datanode向namenode发送心跳信号(节点状态、节点数据)时,当namenode检查节点数据时发现其对应的元数据不存在,于是发出命令删除对应datanode节点下的数据;

*注:元数据指记录对应数据块属性的信息。

  HDFS读取操作的示意图如下所示,
Hadhoop框架学习(1)_第2张图片

上面的示意图说明了客户端与服务器访问的基本过程。

5、一些问题

(1)一个HDFS里namenode节点是仅有一个吗?如果是多个,什么在起协调作用?
答:Hadhoop1.0中仅有一个namenode存在,Hadhoop2.0中可有2个存在,namenode之间的协调是通过zookeeper来实现的,具体后续学习。

(2)datanode节点之间的备份管道遵循什么协议?
答:datanode节点之间并不通过RPC协议传输,而是一种专用的服务器与服务器之间的传输管道。

(3)实际应用程序(java)中该如何实现上述操作?

你可能感兴趣的:(程序设计)