Hadoop学习笔记

Hadoop是大数据处理生态系统,拥有许多 组件,就像操作系统一样,用户可以自己编写数据处理应用运行在该系统上。
Hadoop1.0提供集群资源管理和MapReduce处理相结合的整体式处理引擎,Hadoop2.0将MapReduce处理框架抽离,实现系统的插件化,使之可以与其他处理框架相结合,功能更强大,因此本博客仅讨论Hadoop2.0。

HDFS

HDFS是一种用户空间文件系统,直观理解就是管理文件的代码运行在OS上,使得文件系统易修改,安全灵活。同时,HDFS是一种分布式文件系统,这使得扩容非常方便,且数据不易丢失。

基本数据块

数据传送的基本元,简单地理解就是一次写入或读取的最大连续的数据块。数据块越大,IO耗费越低。hdfs默认是64M,可根据需要增大到128M,甚至1G。

数据保护

一个数据块默认被复制成3份副本(replica)存储到不同的主机中,并且数据块一旦写入将不可变,当份数低于默认值时自动复制增补。故应用程序可以访问任何一个副本来实现对文件的访问,通常会选择离应用程序最近的副本。

守护进程

所谓守护进程(daemon),就是运行在多任务系统后的背景进程(用户不能直接操作),命名时通常以字母d结尾。hdfs文件系统中需要三个守护进程来 “守护数据”

  1. namenode进程:名称节点进程,运行在namenode上,负责保护元数据,维护文件系统的全景图。
  2. datanode进程:数据节点进程,运行在datanode上,负责数据的流动,以及定时向namenode报告数据流动信息(block report)。
  3. secondary namenode进程: 次名称节点进程, 运行在namenode上。负责辅助更新元数据。

读取数据

客户端首先访问(通过调用hadoop库函数)namenode获取数据的位置,然后直接根据namenode返回的数据的元数据信息,访问datanode获取数据。

写入数据

客户端首先向namenode申请打开文件,并获取可以存储数据块的datanode列表。然后向第一个datanode写入数据,该datanode复制一份存入下一个datanode,就像水流一样依次流过datanode组成的管道。

管理文件系统的元数据

元数据存储在namenode上。最重要的时fsimage和edits。fsimage是所有元数据的完整快照,edits是快照之后的增量修改(可以类比PS的操作)。这样设计的目的无非就是为了减少IO操作。仅当edits容量超出默认容量或达到默认时间间隔才被并入fsimage。再回到secondary namenode,之所以引入这个进程是考虑到当namenode运行时没有足够的计算资源来处理元数据,说白了就是没有闲工夫来更新元数据,那么secondary namenode就专门负责更新fsimage,并将更新结果发送给namenode使用。
HDFS对数据的保护很到位,是因为由很多个datanode存储副本,但namenode如果宕机,整个集群将不能使用,为了保证namenode的高可用性(HA),需要设置一个备用namenode,两个namenode间共享元数据。若元数据非常大,还可以仿照datanode,设立多个namenode,称为namenode联盟。

操作文件系统

需要通过调用API来对hdfs文件系统进行操作。较本地OS文件系统,更像一个远程文件系统。命令为hadoop fs
例如:列出文件和目录:hadoop fs -ls /user/…

YARN

YARN是一种通用资源管理器。分为如下几个部分:

  1. 资源管理器(Resource Manager):统管整个集群资源。
  2. 节点管理器(Node Manager):接受来自资源管理器的请求,为应用程序管理器分配容器,每个节点都运行该进程。
  3. 应用程序管理器(Application Master): 与1.0版最大的不同之处,给任务分配资源(根据具体计算框架而变)。与资源管理器沟通,从节点管理器获取系统资源。
  4. 容器(Container):计算单元,拥有系统资源(一部分CPU内核和一部分内存),相当于1.0版本中的任务执行器。一个应用程序运行在一组容器中。
  5. 调度器(Scheduler):包括计算能力调度器和公平调度器,是资源管理器的核心组件,负责为多个应用程序分配集群资源。
    示意图

Hive

Hive是运行在Hadoop上的开源数据仓库,底层是HDFS。Hive可以执行HiveQL查询,这是一种类SQL查询。

基本概念

  1. 数据库:包含表和视图的最高级别容器
  2. 视图:无关底层存储的逻辑对象
  3. 分区:按表的列进行分区,例如时间、地点等
  4. 桶:分区中数据可进一步被拆分成桶,且桶的数目是固定的。使用某一列取值的哈希值将数据打散分配到桶中,哈希函数的选取要依据依据的列的数据类型。
  5. 索引:建立在表的某些列上

Hbase

Hbase是典型的NoSQL分布式数据库,适用于实时响应场景,底层同样是HDFS。

基本概念

逻辑存储

  1. 表:记录存储的逻辑单元,由行组成,行由列簇组成。行键没有数据类型,以字节数组的形式保存
  2. 单元格:行与列的交集。单元格内的值依版本号降序排列
  3. 列簇:一张表内列簇不超过5格,列簇内的列有序且数目没有限制。列簇名为字符串。列簇内列的标识同行键没有数据类形。

物理存储

以列簇为单位存储数据,列簇内部数据以key-value方式存储,如下:
[row_key, column_family, column_qualifier, timestamp]=>value
行按键升序排列;列簇中列按列标识升序排列;单元格内记录按时间戳降序排列。

架构

Hbase包含如下组件:

  1. ZooKeeper:Hadoop生态系统中通用的分布式协同服务,用于leader的选举。
  2. 主节点(Master):执行集群管理操作,跟踪数据位于哪个数据节点,控制负载均衡及故障切换。存在多个备用主节点
  3. 分区服务器:管理数据节点上的分区
    1. 块缓存:内存数据结构
    2. 分区:存储一张表内某个行键范围内的行数据,不同列簇是分开存储的。各个分布分布式存储道HDFS系统上。
    3. MemStore:数据更新时,先写入WAL和MemStore,待大小达到阈值在持久化,即写入HFile
    4. WAL:若发生故障,可从中回复未保存数据
    5. Hfile:保存行文件,且只包含一个列簇

架构图

参考资料

深入理解Hadoop [美] Sameer Wadkar等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值