继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

HDFS内存存储 LAZY_PERSIST

幕布斯6054654
关注TA
已关注
手记 1135
粉丝 218
获赞 1009

hdfs内存存储的策略是异构持久化(LAZY_PERSIST),在内存存储新数据的同时,持久化先前存储的数据,新的数据块不断加入,老的快不断从内存切换到磁盘。原理如下图所示。

webp

  1. 客户端向namenode发起数据块请求(创建/追加)

  2. namenode返回具体的datanode

  3. client进程和datanode进程通信

  4. datanode进程写数据到内存

  5. 返回写数据结果到client进程

  6. 本步骤是个异步的过程,检查是否满足落盘条件,满足时写入磁盘

设置内存策略

想让文件存放在内存中,我们需要设置内存策略(默认策略是DEFAULT,存储在磁盘),两种方法设置内存策略。

挂载tmpfs

挂载一块内存到linux文件系统,以tmpfs为例(目前hdfs仅支持tmpfs,ramfs还在开发中),默认情况下tmpfs挂载到/dev/shm,我们自己再挂载2g内存到/mnt/dn-tmpfs,操作步骤如下:

[root@node11 local]# mkdir /mnt/dn-tmpfs[root@node11 local]# mount -t tmpfs -o size=2g tmpfs /mnt/dn-tmpfs/[root@node11 local]# df -hFilesystem                                                                   Size  Used Avail Use% Mounted on
/dev/mapper/vg_node11-lv_root                                                 50G   26G   21G  56% /
tmpfs                                                                        7.8G   72K  7.8G   1% /dev/shm
/dev/sda1                                                                    485M   39M  421M   9% /boot
/dev/mapper/vg_node11-lv_home                                                 42G  596M   39G   2% /home
/opt/de/DataEngine-E0103P01-RHEL6-X86_64/iso/CentOS-6.5-x86_64-bin-DVD1.iso  4.2G  4.2G     0 100% /media/cdrom
tmpfs                                                                        2.0G     0  2.0G   0% /mnt/dn-tmpfs

可以看出,有两块内存盘,分别为/dev/shm和/mnt/dn-tmpfs。我们每个datanode节点做一次上述步骤,挂载个tmpfs。大家可以参考一些网上博文,将挂载关系写到/etc/fstab下,这样将会在节点启动时自动挂载好。

查看hdfsdatanode其他目录的用户及用户组,并设置dn-tmpfs

ll /hadoop/hdfs/data
chown hdfs:hadoop /mnt/dn-tmpfs/
配置hdfs

修改hdfs-site.xml,添加挂载好的tmpfs,注意要加上RAM_DISK,否则默认使用DISK存储。

<property>
  <name>dfs.datanode.data.dir</name>
  <value>/hadoop/hdfs/data,[RAM_DISK]/mnt/dn-tmpfs</value></property>

获取hdfs有哪些存储策略:

[hdfs@node1 local]$ hdfs storagepolicies -listPolicies
Block 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]}

创建test目录,并设置存储策略为LAZY_PERSIST

[hdfs@node1 local]$ hdfs dfs -mkdir /test/
[hdfs@node1 local]$ hdfs storagepolicies -setStoragePolicy -path /test/ -policy LAZY_PERSIST
Set storage policy LAZY_PERSIST on /test/
[hdfs@node1 hadoop-hdfs]$ hdfs storagepolicies -getStoragePolicy -path /test/
The storage policy of /test/:
BlockStoragePolicy{LAZY_PERSIST:15, storageTypes=[RAM_DISK, DISK], creationFallbacks=[DISK], replicationFallbacks=[DISK]}

上传一个文件测试,通过df -h可以看出,/mnt/dn-tmpfs已存入数据。

[hdfs@node1 hadoop]$ hdfs dfs -put mapreduce.tar.gz /test/
[hdfs@node1 hadoop]$ df -h
Filesystem                                                                   Size  Used Avail Use% Mounted on
/dev/mapper/vg_node11-lv_root                                                 50G   27G   20G  58% /
tmpfs                                                                        7.8G   72K  7.8G   1% /dev/shm
/dev/sda1                                                                    485M   39M  421M   9% /boot
/dev/mapper/vg_node11-lv_home                                                 42G  596M   39G   2% /home
/opt/de/DataEngine-E0103P01-RHEL6-X86_64/iso/CentOS-6.5-x86_64-bin-DVD1.iso  4.2G  4.2G     0 100% /media/cdrom
tmpfs                                                                        2.0G  203M



作者:dingyuanpu
链接:https://www.jianshu.com/p/b584991889ce


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP