HDFS的存储策略
本文介绍hdfs的存储策略
译注:存储策略是在和经济妥协的一个技术产物。由于存储技术发展的日新月异,也许将来再考虑这种策略不是很有必要了。虽然从逻辑上来说,总是有相似的问题出现。但将来对于绝大部分问题而言,这些问题已经不是问题了。
1.简介
归档存储用于减少对存储的压力。具有高密度存,不那么贵的存储的节点,这些接节点的计算能力也一般般,这种节点可以在集群中承当冷存储(冷宫,冷点)。
可以根据策略要求,数据能从热点移动到冷点。
为更多的节点添加冷存储,可以提升集群存储。
这个框架由多种存储和归档存储构成,其中还包含SSD和内存。
用户可以选择在SSD和内存中存储数据,以便提升性能。
译注:原文说了那么多,有用的就是两点:存储、性能。 这种策略在很多其它系统都是透明的,也不需要它们自己管理。例如rdbms可以不它们的数据存储的任意地方,不需要特别设定策略。
hdfs之所以要这么做,是因为hdfs的应用现在变得更加多样,有的人期望提供类似即席查询的能力,而有的人仅仅要求偶尔计算一下。
2.存储类型和存储策略
译注:原文的一段内容没有特别含义,稍微啰嗦,所以摘其精要。
存储类型
- DISK-普通磁盘,存储
- SSD -SSD盘
- RAM_DISK 内存盘
- ARCHIVE -归档/压缩,不是实际的磁盘类型,而是数据被压缩存储。
存储策略
存储策略允许不同的文件存储在不同的存储类型上。
目前有以下策略:
- Hot - 存储和计算都热。 如果是热快,那么复制的目标也是DISK(普通的磁盘)。
- Cold -用于有限计算的存储。 数据不再使用,或者需要归档的数据被移动到冷存储。如果数据块是冷的,则复制使用ARCHIVE.
- Warm -半冷半热。warm块的复制内容,部分放置在DISK,其它的在ARCHIVE.
- All_SSD - 所有数据存储在SSD.
- One_SSD - 一个复制在SSD,其它的在DISK.
- Lazy_Persist -只针对只有一个复制的数据块,它们被放在RAM_DISK,之后会被写入DISK。
一个存储策略,包含以下部分
- Policy ID --策略ID
- Policy name --策略名称
- A list of storage types for block placement --块存放的有关存储类型(可以多个)
- A list of fallback storage types for file creation--如果创建失败的替代存储类型(可以多个)
- A list of fallback storage types for replication--如果复制失败的替代存储类型(可以多个)
当有足够空间的时候,块复制使用下表中第三列所列出的存储类型。
如果第三列的空间不够,则考虑用第四列的(创建的时候)或者第五列的(复制的时候)
| Policy ID | Policy Name | Block Placement (n replicas) | Fallback storages for creation | Fallback storages for replication |
|---|---|---|---|---|
| 15 | Lazy_Persist | RAM_DISK: 1, DISK: n-1 | DISK | DISK |
| 12 | All_SSD | SSD: n | DISK | DISK |
| 10 | One_SSD | SSD: 1, DISK: n-1 | SSD, DISK | SSD, DISK |
| 7 | Hot (default) | DISK: n | <none> | ARCHIVE |
| 5 | Warm | DISK: 1, ARCHIVE: n-1 | ARCHIVE, DISK | ARCHIVE, DISK |
| 2 | Cold | ARCHIVE: n | <none> | <none> |
注意LAZY_PERSIST策略只用于复制一个块(换言之,没有数据冗余)。
译注:原文的意思是如果数据一部分在RAM_DISK,一部分在磁盘上,不会提高性能,所以只能用于一个复制的情况。本人不太理解。不过原文这么说,就先这么记着吧。
存储策略的解析
当创建文件/目录的时候,并未为它们设定了存储策略。 但可以通过hdfs storagepolicies命令来管理。
文件/路径的存储策略按照如下规则解析:
如果有设定特定的策略,那么就是那个策略
如果没有设定,就返回上级目录的存储策略。如果是没有策略的根目录,那么返回默认的存储策略(hot-编号7的)。
配置
- dfs.storage.policy.enabled - 启用/关闭存储策略特性。默认是true(开启)
dfs.datanode.data.dir - 数据路径,多个以逗号分隔,但必须在前面带上存储类型。例如:
- A datanode storage location /grid/dn/disk0 on DISK should be configured with [DISK]file:///grid/dn/disk0
- A datanode storage location /grid/dn/ssd0 on SSD can should configured with [SSD]file:///grid/dn/ssd0
- A datanode storage location /grid/dn/archive0 on ARCHIVE should be configured with [ARCHIVE]file:///grid/dn/archive0
- A datanode storage location /grid/dn/ram0 on RAM_DISK should be configured with [RAM_DISK]file:///grid/dn/ram0
如果没有设定存储类型,那么使用默认的([DISK])
译注:例如DN1有两个存储类型 [DISK]file:///grid/dn/disk0,[SSD]file:///grid/dn/ssd0
每个节点可以具体配置,不需要都一样。当然如果都一样,可以稍微提升系统的性能。
3.MOVER-一个新的数据迁移工具
这个工具用户归档数据,它类似于Balancer(移动数据方面)。MOVER定期扫描HDFS文件,检查文件的存放是否符合它自身的存储策略。如果数据块不符合自己的策略,它会把数据移动到该去的地方。
语法
hdfs mover [-p <files/dirs> | -f <local file name>]
-p 指定要迁移的文件/目录,多个以空格分隔
-f 指定本地一个文件路径,该文件列出了需要迁移的文件或者目录(一个一行)
如果不指定参数,那么就移动根目录。
4.存储策略命令
列出所有存储策略
hdfs storagepolicies -listPolicies
设置存储策略
hdfs storagepolicies -setStoragePolicy -path <path> -policy <policy>
例如 hdfs storagepolicies -setStoragePolicy -path /tmp -policy ALL_SSD
取消存储策略
hdfs storagepolicies -unsetStoragePolicy -path <path>
之后该目录或者文件,以其上级的目录为准,如果是根目录,那么就是HOT
获取存取策略
hdfs storagepolicies -getStoragePolicy -path <path>
---
译注:如果你的项目很有钱,不放可以把一些不是太大的数据放在ALL_SSD中,例如个数据节点上放个10t。甚至如果有更多钱,可以组成ssd raid。
HDFS的存储策略的更多相关文章
- Hdfs存储策略
一.磁盘选择策略 1.1.介绍 在HDFS中,所有的数据都是存在各个DataNode上的.而这些DataNode上的数据都是存放于节点机器上的各个目录中的,而一般每个目录我们会对应到1个独立的盘,以便 ...
- 在ASP.NET Core中如何支持每个租户数据存储策略的数据库
在ASP.NET Core中如何支持每个租户数据存储策略的数据库 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: ht ...
- Hadoop(六)之HDFS的存储原理(运行原理)
前言 其实说到HDFS的存储原理,无非就是读操作和写操作,那接下来我们详细的看一下HDFS是怎么实现读写操作的! 一.HDFS读取过程 1)客户端通过调用FileSystem对象的open()来读取希 ...
- iOS 5的文件存储策略应对
苹果在iOS 5系统时,对app的文件存储提出了新的要求.从它的guildline来看,是推荐开发者尽量把app生成的文件放在Caches目录下的.原文如下: Only user-generated ...
- 再理解HDFS的存储机制
再理解HDFS的存储机制 1. HDFS开创性地设计出一套文件存储方式.即对文件切割后分别存放: 2. HDFS将要存储的大文件进行切割,切割后存放在既定的存储块(Block)中,并通过预先设定的优化 ...
- iOS原生数据存储策略
一 @interface NSCache : NSObject Description A mutable collection you use to temporarily store transi ...
- HDFS副本放置策略和机架感知
副本放置策略 的副本放置策略的基本思想是: 第一block在复制和client哪里node于(假设client它不是群集的范围内,则这第一个node是随机选取的.当然系统会尝试不选择哪些太满或者太忙的 ...
- Hadoop hdfs副本存储和纠删码(Erasure Coding)存储优缺点
body { margin: 0 auto; font: 13px / 1 Helvetica, Arial, sans-serif; color: rgba(68, 68, 68, 1); padd ...
- HDFS对象存储--Ozone架构设计
前言 如今做云存储的公司非常多,举2个比較典型的AWS的S3和阿里云.他们都提供了一个叫做对象存储的服务,就是目标数据是从Object中进行读写的,然后能够通过key来获取相应的Object,就是所谓 ...
随机推荐
- 深入理解读写锁—ReadWriteLock源码分析
转载:https://blog.csdn.net/qq_19431333/article/details/70568478 ReadWriteLock管理一组锁,一个是只读的锁,一个是写锁.读锁可以在 ...
- linux服务器上创建svn版本库
1. 创建存放各个svn版本库的目录svnrepos(自己定义路径) -bash: cd /usr/local/apache/htdocs/ -bash: mkdir svnrepos 2. 假设我要 ...
- scss-@mixin传参
混合器一个很重要特性就是可以传递参数,可以根据不同场景来定制css代码的复用.极大提高了混合器的适用性,看如下scss代码实例: @mixin makeradius($radius) { border ...
- 前端(三大框架、Bootstrap,jQuery,自整理)
前端,HTML(超文本标记语言),CSS(层叠样式表)和JavaScript(脚本语言) HTML,通常说的h5,其实按标准来说,HTML4的后续版本不带编号了,并保证向前的兼容性 CSS的版本3,增 ...
- MFCdll的两种调用方法
有同事问我mfcdll的掉用方法,这里总结了一下. 1 lib库调用 只要VS能找到dll对应的lib和h文件,就可以开发和调试.包含lib和h文件有两个方法. 第一种方法设置路径是 ...
- python数据分析工具安装集合
用python做数据分析离不开几个好的轮子(或称为科学棧/第三方包等),比如matplotlib,numpy, scipy, pandas, scikit-learn, gensim等,这些包的功能强 ...
- AE常用代码(标注要素、AE中画带箭头的线、如何获得投影坐标、参考坐标、投影方式、FeatureCount注意事项)
手上的电脑已经用了将近三年了,想入手一台Surface Pro,所以计划着把电脑上的资料整理下,部分资料打算发到博客上来,资料有同事.也有自己的.也有来自网络的,来源途径太多,也没法详细注明,请见谅! ...
- 【起航计划 033】2015 起航计划 Android APIDemo的魔鬼步伐 32 App->Service->Foreground Service Controller service使用,共享service,前台服务,onStartCommand
Android系统也提供了一种称为“Service”的组件通常在后台运行.Activity 可以用来启动一个Service,Service启动后可以保持在后台一直运行,即使启动它的Activity退出 ...
- phonegap2.0+在xcode4.5上的搭建
首先网上很多文章都是phonegap1.X的,可是自2.0后就没有相关的安装文件了,只有官网上写了怎么装 不过官网有时候打不开,可能是首页出了问题 但http://docs.phonegap.com这 ...
- OpenSSL.Net 在生产环境中无法正常加载的原因分析与解决 z
http://blog.csdn.net/wangjia184/article/details/6990098 http://www.openssl.org/ 在本地测试好好的代码部署到生产环境后,遇 ...