<深度剖析Hadoop HDFS=""> 读书摘要 深度剖析Hadoop>
HDFS
的数据存储包括两块:内存存储、异构存储。HDFS
内存储存是一种十分特殊的存储方式,将会对集群数据的读写带来不小的性能提升;而 HDFS
异构存储则能帮助我们更合理地把数据存到应该存的地方。
内存存储
内存存储是用机器的内存作为存储数据的载体,与之相同的是 HDFS 缓存;但不同之处在于缓存需要用户对待缓存的文件、目录设置管理命令(类似 Spark
内持久化数据),而 HDFS 内存存储是只需设置 LAZY_PERSIST
就可以直接将内存当作磁盘,操作上对用户透明。
上图介绍了内存存储写文件流程,相比于其他不同之处在于第一步和第四-六步:
- 对目标文件目录设置
StoragePolicy
为LAZY_PERSIST
的内存存储策略 - 客户端进程向
NameNode
发起创建/写文件的请求 - 客户端请求到具体的
DataNode
后,DataNode
会把这些数据块写入到RAM
内存中,同时启动异步线程服务将内存数据持久化写到磁盘
由上可知,为了保证内存存储的可靠性,会将内存中的数据异步写到磁盘,这就是 LAZY_PERSIST
的由来。
内存存储流程分析分为三部分:策略设置、存储过程、内存存储使用
策略设置
设置文件的存储策略为 LAZY_PERSIST
(默认是 StoragePolicy.DEFAULT
磁盘存储) ,有以下三种方式。
一:命令行方式
hdfs storagepolicies -setStoragePolicy -path
-policy LAZY_ PERSIST
二:API 创建时设置策略
FSDataOutputStream fos = fileSystem.create(path,FsPermission.getFileDefault(),
EnumSet.of(CreateFlag.CREATE , CreateFlag.LAZY_PERSIST),
bufferLength,replicationFactor,blockSize,null);
以上两种最终都是调用 DFSClient
的 create
方法。
三:2.8 版本之后
fs.setStoragePolicy(path,”LAZY_PERSIST”);
此版本没研究