一、数据存储
内存存储:lazy_persist 直接将内存作为数据存放的载体,即节点的内存也充当一块“磁盘”。
异步存储步骤:
1)对目标文件目录设置存储策略为LAZY_PERSIST;
2)客户端向nameNode发送读写请求
3)客户端请求到具体对DataNode后,dataNode把数据写入RAM,同时启动异步线程服务将内存数据持久化写到磁盘上。
二、内存存储流程分析
1、设置内存存储策略:
三种方式:命令、调用对应的程序方法、通过FileSystem的setStoragePolicy方法;
2、LAZY_PERSIST内存存储(原理)
数据存储的同时会有一批数据被异步地持久化,会涉及多个服务对象的合作。这些服务对象的指挥者就是FSDataSetImpl, 是一个管理dataNode所有磁盘读写的管家。
RamDiskAsyncLazyPersistService:异步持久化线程服务
LazyWriter:线程服务,不断从数据块列表中读取数据块,把数据块加入到异步持久化线程池中去执行
RamDiskReplicaLruTracker:副本块跟踪类,维护了所有持久化、未持久化的副本及总副本数据信息。
3、LAZY_PERSIST内存存储的使用
第一步,使用该存储策略需要有对应的存储介质,内存存储介质对应的类型上RAM_
DISK
第二步,设置具体的文件策略类型。
在HDFS异构存储方式中,除了内存存储外还有Arichival Storage, 是一种高密度的存储,一般用于冷数据的存储。
三、异构存储
3.1、类型
四种:RAM_DISK(true) SSD(false). DISK(false). ARCHIVE.(false) (存储速度由快到慢)
1.RAM_DISK(内存)
2.SSD(固态硬盘)
3.DISK(机械硬盘)
4.ARCHIVE(高密度存储介质)
true:代表转瞬即逝,并非持久化的
配置属性dfs.datanode.data.dir可对本地对应存储目录进行设置,带上存储类型标签,如:
[SSD] file://grid/dn/ssd0
默认为DISK。
3.2、原理
1」DataNode存储目录汇报
2』存储心跳信息的更新处理
3」目标存储介质类型节点的请求
3.3、块存储类型选择策略
块存储指的是对hdfs文件的数据块副本储存,其中有6种策略:
HOT
COLD
WARM
ALL_SSD
ONE_SSD
LAZY_PERSIST
前三种根据冷热数据区分,后三种根据磁盘性质区分
存储策略速度如下:
四、HDFS存储策略的使用
列出现有存储策略:
hdfs storagepolicies -listPolicies
设置指定路径的存储策略
hdfs -setStroagePolicy -path <path> -policy <policy>
获取指定路径的存储策略
hdfs -getStroagePolicy -path <path>
手动迁移数据
数据迁移工具能扫描HDFS上的文件,如果不满足内部设置的存储策略,就重新迁移数据到目标存储类型节点上
hdfs mover -p <file/dirs> | -f <local file>