eBay:如何用HDFS分层策略优化数千节点数百PB的数据存储

Posted CSDN云计算

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了eBay:如何用HDFS分层策略优化数千节点数百PB的数据存储相关的知识,希望对你有一定的参考价值。

eBay对于大家来说都非常熟悉,是美国的一家电商网站,对于他们来讲每天的数据都是海量的。目前在eBay的Hadoop集群有数千个节点(具体不方便透漏),支持成千上万的用户使用。他们的Hadoop集群存储数百PB的数据。这篇文章中将探讨eBay如何基于数据使用频率优化大数据存储。这种方法有助于有效地降低成本。


Hadoop


众所周知,商品硬件可以集合创建出具有大数据存储和计算能力的Hadoop集群。部分数据存储在每个单独的机器上,数据处理逻辑也同样在相同的机器上运行。


例如:以每个节点20 TB的存储容量计算,一个1000个节点的Hadoop集群可以存储多达20 PB的数据。所有这些机器都有足够的计算能力来实现Hadoop “把运算带给数据”的座右铭。


数据温度


集群里通常存储着不同类型的数据集,运行不同类型工作负荷的团队使用这些数据集运算数据。每时每刻,数据管道都传来大量的数据增加到这些数据集中。


数据集的一个共同特点是重初始使用。在此期间,数据集被认为是“热的”(HOT)。根据分析,我们发现数据集的使用频率随着时间的推移呈现明显下降局势,这时存储的数据一周被访问几次,这个阶段的数据我们称其为“温的”(WARM)数据。接下来的90天,当数据使用率下降到每月几次,它被定义为 “冷的”(COLD)数据。


因此在最初几天数据可以被认为是“热的”(HOT),然后它会在“温的”(WARM)阶段持续一个月。在此期间,工作或应用程序会使用这些数据几次。接下来数据使用率进一步下滑;数据变为“冷的”(COLD),在之后的九十天里,数据使用只有为数不多的那么几次。最后,当数据使用屈指可数,频率降低到一年一两次的地步,数据的“温度”就称为“冻结”。


数据时间

使用频率

温度

时间 < 7 天

每天20次

热的

7 天 < 时间 < 1个月

每周5 次

温的

1 个月< 时间 < 3个月

每月5次

冷的

3 个月< 时间 < 3 年

每年2次

冻结


一般情况来说,数据温度与所有数据集息息相关。从上面可以看出,温度与数据时间是成反比的。其他因素也可以影响一个特定数据集的温度。你还可以写出计算数据集温度的算法。


HDFS的分层存储


HDFS从Hadoop 2.3版本开始支持分层存储。


它是如何工作的呢?


正常情况下,一台机器添加到集群,本地文件系统目录会被指定存储该块的副本。用于指定本地存储目录的参数是dfs.datanode.data.dir。另一层,如归档层(ARCHIVE),则可以使用名为StorageType的枚举进行添加。为了表明一个本地目录是属于归档层的,该目录的前缀会配置为[ARCHIVE]。从理论上讲,Hadoop集群管理员规定多层是次可以存在的。


例如:一个1000个节点的现有集群,它能存储总计20 PB的数据,现在,在此基础上添加每个节点存储量为200 TB的100个节点到该集群上。这些新添加的节点与原有的1000个节点相比,计算能力十分有限。让我们把所有本地数据目录的前缀改为ARCHIVE。这100个节点形成了现在的归档层,并且可以存储20 PB的数据。现在,集群的总容量为40 PB,分为两层——磁盘层和 归档层,每层有20 PB的容量。


基于温度将数据映射到一个存储层


在这个例子中,我们将高使用率的热(HOT)数据存储在具有更好的计算能力节点的磁盘层内。


温(WARM)数据的大部分副本也保留在磁盘层。至于replication factor为3的数据,我们将在磁盘层存放两个副本,在归档层存放一个副本。


如果是冷(COLD)数据,我们会将每个冷数据块的至少一个副本存放在磁盘层,所有其他副本存在归档层。


当一个数据集被视为是冷冻(FROZEN)的,这意味着它几乎不会再被使用,将其存储在具有大量CPU功率以运行多个任务或容器的节点上显然不是明智的决定。我们会将其保存在具有最小计算能力的节点上。因此,冷冻数据所有数据块的一切副本都保存在存档层。


跨层数据流


当数据被添加到集群中,它首先被存储在默认层,即磁盘层。之后,根据该数据的温度,它的一个或多个副本被移动到存档层。Mover可以协助数据从一个存储层移动到另一个存储层。Mover的工作方式类似于Balancer,除了它是专门用于跨层数据块副本移动的工具。Mover接受HDFS路径、副本数量和目的层信息,然后根据层信息识别要移动的副本,并安排数据从源数据节点移动到目标数据节点。


Hadoop2.6版本用以支持分层存储的更新


Hadoop 2.6版本的许多改进进一步支持分层存储。你可以在目录上挂上存储策略,以表示数据的温度。存储策略规定副本数量需定位在每一层。改变目录的存储策略,然后调用该目录的Mover来使存储策略起到效果是有可能的。


使用数据的应用程序


根据数据温度分类,数据的部分或全部副本可能在任意一层上。但对于通过HDFS使用该数据的应用程序来说,数据位置却是显而易见的。


即使冷冻数据的所有副本都存储在归档层,应用程序仍然可以访问它,就像访问任何HDFS数据。但因为归档层节点没有计算能力,在磁盘层节点上运行的映射任务将读取归档层节点的数据,从而导致该应用程序的网络流量增加。如果这种情况发生太过频繁,你可以宣布该数据已成为温/冷数据,Mover会将其一个或多个副本运回磁盘层。


数据温度的确定和指定副本移动到预先定义的分层存储可以做到完全自动化。


在eBay的分层存储


分层存储是在eBay一个非常大的集群中已经实现。该集群存有40 PB的数据。我们增加了计算能力有限的额外10 PB存储空间。目前,每个新机可以存储220 TB数据。额外的存储空间已标记为ARCHIVE,一些目录则根据数据温度确认为温数据、冷数据或冻结数据。根据其温度,所有或其中几个副本已移动到归档存储空间。


归档层每GB的价格仅为磁盘层价格的四分之一,这主要是由于归档层的机器只具有非常有限的计算能力,从而降低了成本。


总结


无计算能力的存储比有计算能力的存储便宜。我们可以利用数据温度确保有效使用有计算能力的存储空间。因为每个数据块都会被复制几次(默认为3),根据数据温度,一些副本可以移动到低成本存储空间。HDFS支持分层存储,并提供跨层移动数据的必要工具。分层存储现已在eBay一个非常大规模的集群中实现归档数据功能。

以上是关于eBay:如何用HDFS分层策略优化数千节点数百PB的数据存储的主要内容,如果未能解决你的问题,请参考以下文章

eBay 基于 Istio 的统一流量管理实践

VLFeat 分层 k-means:词汇树中的节点数

如何用策略模式,优化你代码里的的if-else?

请问在matlab中,如何用bp神经网络进行建模,节点的选取有啥规律吗?

字节二面:如何用策略模式,优化你代码里的的if-else?

字节二面:如何用策略模式,优化你代码里的的if-else?