Hadoop在2.6.0版本中引入了一个新特性异构存储。异构存储关键在于异构2个字,异构存储可以根据各个存储介质读写特性的不同发挥各自的优势。一个很适用的场景就是冷热数据的存储。
针对冷数据,采用容量大的,读写性能不高的存储介质存储,比如最普通的Disk磁盘。而对于热数据而言,可以采用SSD的方式进行存储,这样就能保证高效的读性能,在速率上甚至能做到十倍于或百倍于普通磁盘读写的速度。换句话说,HDFS的异构存储特性的出现使得我们不需要搭建2套独立的集群来存放冷热2类数据,在一套集群内就能完成。所以这个功能特性还是有非常大的实用意义的。
异构存储都有哪些类型?
RAM_DISK:内存,当之无愧是最快的,但官方有句提醒:We have observed that the latency overhead from network replication negates the benefits of writing to memory. 也就是说因为网络的延迟抵消写入内存带给我们的速度。经过测试的实际情况是,这种配置方式和SSD可能差不了太多。
SSD:固态磁盘,主要用来存储热数据,即访问频繁的数据。
DISK:普通的磁盘,例如,SATA盘。
ARCHIVE:是一种支持PB级的高容量存储,主要用于归档数据使用,有很小的计算能力,而我们所谓的冷数据适合使用archive存储类型。
做大数据的基本都有这种感觉:最近一周内的数据会被经常使用到,而最近几周的数据使用率会有下降,每周仅仅被访问几次;3月以前的数据使用率会大幅下滑,存储的数据可能一个月才被访问几次。
异构存储如何配置目录?
在hdfs-site.xml 的配置属性dfs.datanode.data.dir 中进行本地对应存储目录的设置,同时带上一个存储类型标签,声明此目录用的是哪种类型的存储介质,如果目录前没有带上[SSD]/[DISK]/[ARCHIVE]/[RAM_DISK]这4种中的任何一种,则默认是DISK类型。
# 此参数用于启用或禁用异构存储策略,其默认值为"true",即允许用户更改文件和目录的存储策略<property><name>dfs.storage.policy.enabled</name><value>true</value></property># 此参数表示用,分隔的目录列表,用来存储hdfs的数据,对于HDFS存储策略,应使用相应的存储类型#([SSD] [DISK] [ARCHIVE] [RAM_DISK])标记目录。如果不加存储类型,则默认为[DISK]类型<property><name>dfs.datanode.data.dir</name><value>[SSD]file:///hdfsdata/ssd0,[SSD]file:///hdfsdata/ssd1,file:///hdfsdata/sata0,file:///hdfsdata/sata1</value></property>
HDFS异构存储策略有哪些?
HDFS允许根据预测将不同的文件存储在不同的存储类型中。可以设置以下类型的存储策略。
HOT:应用于当前正在处理的数据,所有副本都存储在DISK存储类型上。
COLD:存储冷数据,所有副本都存储在基于ARCHIVE存储类型的介质中。
WARM:1个副本存储在磁盘(DISK存储类型)上,其它副本存储在归档存储(ARCHIVE存储类型)上。
ALL_SSD:所有副本都存储在SSD中。
ONE_SSD:1个副本存储在SSD中,其它副本存储在DISK中。
LAZY_PERSIST:用于在内存中写入单个副本的块,该副本首先在RAM_DISK中写入,后续持久化到DISK中。
# 查看当前有哪些存储策略可以用hdfs storagepolicies –listPoliciesBlock Storage Policies:BlockStoragePolicy{COLD:2, storageTypes=[ARCHIVE], creationFallbacks=[], replicationFallbacks=[]}BlockStoragePolicy{WARM:5, storageTypes=[DISK, ARCHIVE], creationFallbacks=[DISK, ARCHIVE], replicationFallbacks=[DISK, ARCHIVE]}BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}BlockStoragePolicy{ONE_SSD:10, storageTypes=[SSD, DISK], creationFallbacks=[SSD, DISK], replicationFallbacks=[SSD, DISK]}BlockStoragePolicy{ALL_SSD:12, storageTypes=[SSD], creationFallbacks=[DISK], replicationFallbacks=[DISK]}BlockStoragePolicy{LAZY_PERSIST:15, storageTypes=[RAM_DISK, DISK], creationFallbacks=[DISK], replicationFallbacks=[DISK]}# 获取指定路径的存储策略hdfs storagepolicies -getStoragePolicy -path xxxx# 指定路径的储存策略 文件目录均可hdfs storagepolicies -setStoragePolicy -path xxxx -policy ONE_SSD# 取消存储策略hdfs storagepolicies -unsetStoragePolicy -path xxxx# Schedule blocks to move based on file’s/directory’s current storage policy.hdfs storagepolicies -satisfyStoragePolicy -path <path>
creationFallbacks(写入时)和replicationFallbacks(复制时)分别指存储策略对应的介质空间不足时(第三列),会fallback到哪种介质做写入和复制。

HDFS MOVER一个新的数据迁移工具
这个工具用户归档数据,它类似于Balancer(移动数据方面)。MOVER定期扫描HDFS文件,检查文件的存放是否符合它自身的存储策略。如果数据块不符合自己的策略,它会把数据移动到该去的地方。
hdfs mover [-p <files/dirs> | -f <local file name>]-p 指定要迁移的文件/目录,多个以空格分隔-f 指定本地一个文件路径,该文件列出了需要迁移的文件或者目录(一个一行)如果不指定参数,那么就移动根目录。
Administrator notes:
StoragePolicySatisfier and Mover tool cannot run simultaneously. If a Mover instance is already triggered and running, SPS will be disabled while starting. In that case, administrator should make sure, Mover execution finished and then enable external SPS service again. Similarly when SPS enabled already, Mover cannot be run. If administrator is looking to run Mover tool explicitly, then he/she should make sure to disable SPS first and then run Mover. Please look at the commands section to know how to enable external service outside NN or disable SPS dynamically.




