百PB级Hadoop集群存储空间治理

发布者:上海IT外包来源:http://www.lanmon.net点击数:1838

现在这个世界上,任何一家公开关闭大数据的公司,甚至十几个人的问卷都敢于调用大数据调查分析。它是无知和无所畏惧的。
但也有很多公司确实拥有足够大量的数据,他们确实在做大数据。这些公司通常都很小,但利润并不一定理想。即使它可以稳定利润,也必须有不小的成本压力。因为大数据,如果真的够大,真的很贵。
以我公司为例。每年的服务器采购成本已经达到数千万,我将运行8位数。
因此,我们有强大的成本节约动力。
另一方面,我正在思考如何在没有赚钱的情况下如何在没有做生意的情况下表达我作为公共部门和基础设施部门的价值。最重要的一点是省钱意味着赚钱。这反映在公司的收入和支出上。
在计算资源可重用且灵活的情况下,存储空间通常是成本的最重要原因。本文将简要介绍我们在过去几年中在数十个PB到100 PB级别的数据上对存储空间所做的一些治理工作。
1,减少备份次数
每个人都知道HDFS依赖3份副本来确保数据高度可用。但也是这三个副本带来了三倍的成本。减少成本以减少份数是很自然的。
这种方法看起来很愚蠢,但确实解决了这个问题。当然,考虑到牺牲某些高可用性的风险,它实际上并不是一种普遍的方法。
我们对临时文件或在线业务不直接使用的数据使用此方法。即使它真的丢失了,也不会直接影响业务。它真的没用,如果丢失它就会丢失,或者你可以从其他数据中恢复。
因为我们对Hive库有严格的权限管理,但为了给每个人一些开发调试和实验的灵活性,非在线业务已经赶到了tmp库。虽然我们已经设置了定时删除策略,但是tmp库的存储开销仍然保持在相对较高的水平。
因此,我们编写了一个脚本,该脚本定期遍历以将tmp库的文件副本数设置为2.这会将tmp库的存储消耗减少1/3。这可能是数百万人民币。
当然,我还考虑修改Hadoop的源代码,并在分配块时自动执行此操作,而不是之后更改副本数。经过简短的讨论,我觉得一个小脚本可以解决问题,之后不会花费太多。不需要入侵代码来增加复杂性。还值得一提的是,如果节点数量足够且网络带宽足够大,如果存储压力非常大,您可以考虑将更多数据设置为2个副本。因为即使一台机器挂起,它也可以通过网络从其他机器快速重新填充2份副本。当然,存在风险。如果运气不好,两个副本所在的机器会同时报废,因此数据会丢失。
2,压缩
除了删除数据和减少副本之外,另一种简单的方法是压缩。
上图列出了Hadoop最常用的压缩格式。在native确定单个文件的处理性能的地方,毕竟Java在这个计算密集型生活中仍然比C系列更好。 splitable确定文件是否可以拆分为多个映射器处理,即文件是否可以并行处理,这对性能也有很大影响。
所以从定性的角度来看,单独看表现,lzo和bzip2似乎是首选。
但是性能如何,你要看实际的性能测试结果,因为时间太长,无法在当时找到数据。从互联网上寻找基准。不要与绝对数字纠缠在一起,只知道相对差距。
显然,bzip2压缩和解压缩速度太慢,一个数量级更差,第一个被消除。
其余三个,gzip压缩比最高,这是最节省空间的,但处理速度相对较慢,但并不像bzip2那样夸张。无论压缩比或处理速度如何,Lzo和snappy都很好。考虑到可拆分,似乎lzo应该是首选。
但实际上,lzo有一个不容忽视的功能。 Lzo的splitable需要额外的索引文件才能支持,每个文件都需要有一个同名的索引文件。此索引文件需要单独生成。这并不是说,索引文件会导致实际文件数翻倍,这会给大型集群NameNode带来很大压力。
结合这些情况,实际的生产环境,我们正在使用这种方法:
收集原始日志时使用snappy压缩,同时考虑存储空间和处理速度。
定期清理已清理的日志文件,并将snappy文件转换为gzip以节省空间
对于结构化数据,主要是Hive表,使用parquet + gzip,gzip节省空间,相对于snappy的性能劣势,它可以通过镶木地板的性能优势得到补偿。这样,您就可以在存储空间和性能之间找到一个很好的平衡点。
3,冷热分层
存储领域有一个非常流行的词,称为异构存储。在本地语言中,不同类型的存储被放置在系统中,例如RAM,SSD,DISK等。像Spark这样的许多框架都对异构存储提供了广泛的支持。
异构存储通常用于解决访问性能问题,这很容易理解,并且不同存储介质的访问速度通常会更糟。然而,与此同时,空间的大小和成本也是不同的数量级,因此它也可以用于节省成本。
HDFS定义了两个支持异构存储的概念。
第一个概念Storage Type用于表示不同类型的存储,包括:
ARCHIVE实际上是一个更大更便宜的硬盘,它可以用相同数量的人民币保存更多数据。我们生产单一的128 TB环境。
DISK,一个普通的普通硬盘,我们生产48TB的单一空间。
SSD,一种常见的固态硬盘。
事实上,RAM_DISK是内存,通常不那么奢侈。
显然,它从上到下越来越快,但它变得越来越昂贵。
第二个概念,即存储策略,用于指示不同的存储策略,这些策略可以对应于冷热数据的程度,即使用频率。包括:
热,热数据,经常访问的数据,所有副本都保存到DISK
冷,冷数据,很少访问的数据,所有副本都保存到ARCHIVE
温暖,温暖的数据,冷热数据,一个副本保存在DISK中,其他所有数据都保存在ARCHIVE中
All_SSD,没有冷热对应,所有副本都保存在SSD中
One_SSD,没有冷热对应,一个副本保存在SSD中,其他副本保存在DISK中
上述两个概念的不同版本可能略有不同。由于它是为了节省成本,SSD自然被淘汰,离线大数据处理的场景并不真正需要SSD。
通常,根据这个想法,数据是冷热的,然后设置存储策略可以解决大多数问题。至于如何定义和测量数据的热量,这是另一个可以单独打开的主题。只需提一下这个想法,您可以根据数据时间和访问时间的两个维度划分间隔,并计算HDFS审核日志的结果。
除了社区的默认支持外,我们在炎热的寒冷天气上添加了一层冷冻以保存最冷的数据。
考虑到ARCHIVE已经是最便宜的存储介质,特定冻结的效果无法对存储类型大惊小怪。我们将注意力转向第一部分中提到的备份数量。当然,你不能简单地设置repica,否则这部分将直接放在第一部分。我们正在使用HDFS擦除代码。
通俗地说,它是HDFS上的RAID。长期以来,Facebook和腾讯等公司在生产环境中大规模实施了RAID。毕竟,他们绝对是第一家满足并解决存储成本问题的公司。遗憾的是,旧版本不再更新和维护,或者封闭源不会回馈社区。
幸运的是,Hadoop 3.0正式支持此功能。当然,也有缺点。首先,代码稳定性尚未经过测试。毕竟,这个行业没有大规模的3.0踩踏经验。其次,CDH尚未发布Hadoop 3.0的官方版本,因此部署和维护不是那么方便和统一。
因此,只有长时间非常旧且未使用的数据才适合在启用了删除删除代码的3.0群集上设置为冻结。
根据我们的生产环境,机器的成本约为磁盘机的1/3。分层存储的空间和成本开销如下:
看到这种形式,我相信每个人都有足够的动力做分层存储。
4,大型储物机
然而,近年来,有一种说法逐渐颠覆了每个人的传统认知。
据说没有必要将DISK和ARCHIVE模型直接划分到大型存储机器中。
考虑到10Gb网卡的普及,再加上网卡绑定和改进的交换机性能,网络IO不再是瓶颈。
考虑到数据的大小,DISK/Memory比率也没有意义,因此不需要考虑相对较少的计算资源的问题。更重要的是,那里有大量的冷数据,没有必要为它们预留计算资源。
它看起来非常合理,值得一试。后者不是那么忙,我们将专注于测试性能比较。每个有经验的人都可以留言来讨论。
主要内容是这样的,并且跳过其他分散的治理方法。
随着数据量的增长,元数据也将急剧扩展,很快NameNode将成为集群的瓶颈。解决方案是HDFS Federation,我们在生产环境中有很好的实践。但这是另一个复杂的话题。下次我有机会打开一篇单独的文章并详细说明。
IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部