存档

‘HDFS’ 分类的存档

Reed Solomon Erasure Codes

2014年7月12日 没有评论

[latexpage]
上一篇文章《Finite Field Arithmetic》介绍了有限域上的运算,理解有限域上的运算,是理解erasure编码的基础。今天这篇文章就来介绍一下erasure编码。在分布式存储系统中,通常会通过多副本的方式来保证数据的可靠性,但是多副本带来的成本问题也是显而易见的。在类HDFS这样的系统中,通常数据都会保留三副本,三副本可以容有两副本故障的场景,但同时成本也是一副本的三倍。如何在保证同等的数据可靠性的前提下,减少副本数,降低成本,是分布式存储系统中很重要的一个课题。Erasure编码正是用来解决这个问题的,它能将副本降到1.x的同时,保证同等的数据可靠性保证。本文会以最常用的Reed Solomon erasure编码为例来介绍。

基本思想

erasure-codes
如上图所示,我们总共有$n$块盘,其中$k$块用来存放数据,m块用来存储erasure编码($k+m=n$),在上面的$n$块盘中,任意坏$m$块,都可以通过erasure编码将其余的恢复出来。也就是说,通常$k+m$的erasure编码,能容$m$块盘故障的场景,这时候的存储成本是$1+m/k$, 通常$m 阅读全文…

HDFS ZKFC手记

2013年6月13日 6 条评论

1.基本原理

zk的基本特性:
(1) 可靠存储小量数据且提供强一致性
(2) ephemeral node, 在创建它的客户端关闭后,可以自动删除
(3) 对于node状态的变化,可以提供异步的通知(watcher)

zk在zkfc中可以提供的功能:
(1) Failure detector: 及时发现出故障的NN,并通知zkfc
(2) Active node locator: 帮助客户端定位哪个是Active的NN
(3) Mutual exclusion of active state: 保证某一时刻只有一个Active的NN

2. 模块

(1) ZKFailoverController(DFSZKFailoverController): 驱动整个ZKFC的运转,通过向HealthMonitor和ActiveStandbyElector注册回调函数的方式,subscribe HealthMonitor和ActiveStandbyElector的事件,并做相应的处理
(2) HealthMonitor: 定期check NN的健康状况,在NN健康状况发生变化时,通过回调函数把变化通知给ZKFailoverController
(3) ActiveStandbyElector: 管理NN在zookeeper上的状态,zookeeper上对应node的结点发生变化时,通过回调函数把变化通知给ZKFailoverController
(4) FailoverController: 提供做graceful failover的相关功能(dfs admin可以通过命令行工具手工发起failover) 阅读全文…

分类: BigData, HDFS 标签: , , ,

HDFS datanode阅读手记

2013年1月28日 没有评论

1. Hign Level Module View

datanode modules

  • HttpServer: 提供http service, 展示内部状态信息
  • IPCServer: Rpc service framework, 模块间的交互都通过rpc来完成(Block数据传输除外)
  • DataXceiverServer: 数据传输server, 提供Block数据的读写修改等功能
  • BlockPoolManager: 提供管理BlockPool的相关API。其中,BlockOfferService为每个Namespace下每个BlockPool一个实例,提供BlockPool对它所对应的Namespace的操作的相关API, BlockServiceActor为指定Namespace中每个namenode一个实例,自已持有线程,定时向它所对应的namenode发heartbeat, blockreport, 并执行namenode通过heartbeat/blockreport response传回来的command
  • FsDataset: 封装了datanode所管理的所有的block相关数据,提供相关的API,其中FsVolume封装了对单块盘的相关的操作
  • 阅读全文…

分类: BigData, HDFS 标签: , ,

Hadoop/Hbase配置集成Ganglia

2012年11月11日 3 条评论

Hadoop/Hbase是开源版的google Bigtable, GFS, MapReduce的实现,随着互联网的发展,大数据的处理显得越发重要,Hadoop/Hbase的用武之地也越发广泛。为了更好的使用Hadoop/Hbase系统,需要有一套完善的监控系统,来了解系统运行的实时状态,做到一切尽在掌握。Hadoop/Hbase有自己非常完善的metrics framework, 里面包种各种维度的系统指标的统计,另外,这套metrics framework设计的也非常不错,用户可以很方便地添加自定义的metrics。更为重要的一点是metrics的展示方式,目前它支持三种方式:一种是落地到本地文件,一种是report给Ganglia系统,另一种是通过JMX来展示。本文主要介绍怎么把Hadoop/Hbase的metrics report给Ganglia系统,通过浏览器来查看。

介绍后面的内容之前有必要先简单介绍一下Ganglia系统。Ganglia是一个开源的用于系统监控的系统,它由三部分组成:gmond, gmetad, webfrontend, 三部分是这样分工的:

  • gmond: 是一个守护进程,运行在每一个需要监测的节点上,收集监测统计,发送和接受在同一个组播或单播通道上的统计信息
  • gmetad: 是一个守护进程,定期检查gmond,从那里拉取数据,并将他们的指标存储在RRD存储引擎中
  • webfrontend: 安装在有gmetad运行的机器上,以便读取RRD文件,用来做前台展示

简单总结它们三者的各自的功用,gmond收集数据各个node上的metrics数据,gmetad汇总gmond收集到的数据,webfrontend在前台展示gmetad汇总的数据。Ganglia缺省是对系统的一些metric进行监控,比如cpu/memory/net等。不过Hadoop/Hbase内部做了对Ganglia的支持,只需要简单的改配置就可以将Hadoop/Hbase的metrics也接入到ganglia系统中进行监控。 阅读全文…