一、Hdfs磁盘存储策略

1、 指定本地目录存储策略

data目录为Hot策略对应DISK;

data1目录为Cold策略对应ARCHIVE;

dfs.datanode.data.dir

[DISK]/opt/beh/data/namenode/dfs/data,[ARCHIVE]/opt/beh/data/namenode/dfs/data1

重启hdfs

$ stop-dfs.sh

$ start-dfs.sh

2、指定hdfs目录的存储策略

查看hdfs存储策略

$ 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]}

创建2个hdfs目录

$ hadoop fs -mkdir /Cold_data

$ hadoop fs -mkdir /Hot_data

指定hdfs目录存储策略

$ hdfs storagepolicies -setStoragePolicy -path hdfs://breath:9000/Cold_data -policy COLD

Set storage policy COLD on hdfs://breath:9000/Cold_data

$ hdfs storagepolicies -setStoragePolicy -path hdfs://breath:9000/Hot_data -policy HOT

Set storage policy HOT on hdfs://breath:9000/Hot_data

查看2个目录的存储策略是否正确

$ hdfs storagepolicies -getStoragePolicy -path /Cold_data

The storage policy of /Cold_data:

BlockStoragePolicy{COLD:2, storageTypes=[ARCHIVE], creationFallbacks=[], replicationFallbacks=[]}

$ hdfs storagepolicies -getStoragePolicy -path /Hot_data

The storage policy of /Hot_data:

BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}

3、存储测试

查看未上传文件存储目录的大小

$ cd /opt/beh/data/namenode/dfs

$ du -sh *

38M data

16K data1

30M name

14M namesecondary

生成一个1000M大小的文件

$ dd if=/dev/zero of=test.txt bs=1000M count=1

记录了1+0 的读入

记录了1+0 的写出

1048576000字节(1.0 GB)已复制,3.11214 秒,337 MB/秒

将生成的文件上传到/Cold_data目录

$ hadoop fs -put test.txt /Cold_data

[x] 查看此时存储目录的大小

$ du -sh *

38M data

1008M data1

30M name

14M namesecondary

4、测试结果说明

上传的文件全部存储在了data1目录下

因为hdfs上的/Cold_data指定的是COLD 策略,与hdfs-site.xml里面ARCHIVE策略的data1目录相对应,所以文件存储达到了测试目的

二、Hdfs预留空间配置

1、参数修改

修改hdfs-site.xml配置文件,添加参数

dfs.datanode.du.reserved

32212254720

dfs.datanode.data.dir

[ARCHIVE]/opt/beh/data/namenode/dfs/data

说明

设置dfs.datanode.du.reserved参数,32212254720表示指定预留空间为30G;

修改dfs.datanode.data.dir,只保留一个本地存储目录;

-重启hdfs

$ stop-dfs.sh

$ start-dfs.sh

2、上传文件

查看磁盘空间

$ df -h

文件系统 容量 已用 可用 已用% 挂载点

/dev/mapper/centos-root 46G 14G 32G 31% /

devtmpfs 7.8G 0 7.8G 0% /dev

tmpfs 7.8G 0 7.8G 0% /dev/shm

tmpfs 7.8G 8.5M 7.8G 1% /run

tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup

/dev/vda1 497M 125M 373M 25% /boot

tmpfs 1.6G 0 1.6G 0% /run/user/0

tmpfs 1.6G 0 1.6G 0% /run/user/1000

往hdfs上上传文件,一次上传一个2G大小的文件

$ hadoop fs -put test1.txt /Cold_data/test1.txt

$ hadoop fs -put test1.txt /Cold_data/test2.txt

$ hadoop fs -put test1.txt /Cold_data/test7.txt

$ hadoop fs -put test1.txt /Cold_data/test8.txt

16/11/12 16:30:54 INFO hdfs.DFSClient: Exception in createBlockOutputStream

java.io.EOFException: Premature EOF: no length prefix available

at org.apache.hadoop.hdfs.protocolPB.PBHelper.vintPrefixed(PBHelper.java:2239)

at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.createBlockOutputStream(DFSOutputStream.java:1451)

at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1373)

at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:600)

16/11/12 16:30:54 INFO hdfs.DFSClient: Abandoning BP-456596110-192.168.134.129-1450512233024:blk_1073744076_3254

16/11/12 16:30:54 INFO hdfs.DFSClient: Excluding datanode DatanodeInfoWithStorage[10.10.1.31:50010,DS-01c3c362-44f4-46eb-a8d8-57d2c2d5f196,ARCHIVE]

16/11/12 16:30:54 WARN hdfs.DFSClient: DataStreamer Exception

org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /Cold_data/test8.txt._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 1 datanode(s) running and 1 node(s) are excluded in this operation.

at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:1541)

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:3289)

at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:668)

at org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.addBlock(AuthorizationProviderProxyClientProtocol.java:212)

at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:483)

at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)

at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:619)

at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1060)

at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2044)

at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2040)

at java.security.AccessController.doPrivileged(Native Method)

at javax.security.auth.Subject.doAs(Subject.java:415)

at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)

at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2038)

at org.apache.hadoop.ipc.Client.call(Client.java:1468)

at org.apache.hadoop.ipc.Client.call(Client.java:1399)

at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:232)

at com.sun.proxy.$Proxy9.addBlock(Unknown Source)

at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.addBlock(ClientNamenodeProtocolTranslatorPB.java:399)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:187)

at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)

at com.sun.proxy.$Proxy10.addBlock(Unknown Source)

at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.locateFollowingBlock(DFSOutputStream.java:1544)

at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1361)

at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:600)

put: File /Cold_data/test8.txt._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 1 datanode(s) running and 1 node(s) are excluded in this operation.

分析

此时数据目录/opt/beh/data/namenode/dfs的空间大小如下

$ cd /opt/beh/data/namenode/dfs

$ du -sh *

15G data

12K data1

34M name

19M namesecondary

[x] 查看此时的磁盘空间

$ df -h

文件系统 容量 已用 可用 已用% 挂载点

/dev/mapper/centos-root 46G 27G 19G 59% /

devtmpfs 7.8G 0 7.8G 0% /dev

tmpfs 7.8G 0 7.8G 0% /dev/shm

tmpfs 7.8G 8.5M 7.8G 1% /run

tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup

/dev/vda1 497M 125M 373M 25% /boot

tmpfs 1.6G 0 1.6G 0% /run/user/0

tmpfs 1.6G 0 1.6G 0% /run/user/1000

3、总结

出现报错说明磁盘预留空间配置生效,但是查看磁盘空间可以看到,本地目录剩余可用空间并不是Hdfs设置的预留空间;

Hdfs对一个数据目录的可用存储认定是当前目录所在磁盘的总空间(此处为/目录46G),并不是当前目录的可用空间。

实际上的HDFS的剩余空间计算:

当前目录(磁盘)的总空间46G - Hdfs已使用的总空间15G=31G

而此时预留空间为30G,因此hdfs剩余的可用空间为1G,所以当再次上传一个大小为2G的文件时,出现以上的报错。

因为此处测试直接使用了/目录的存储,其它非Hdfs占用了部分空间,当hdfs的数据目录对单块磁盘一一对应,每块磁盘的剩余可用空间大小与预留空间配置的值相当时,就不会再往该磁盘写入数据。

hadoop 文件存放策略_Hdfs磁盘存储策略和预留空间配置相关推荐

  1. Windows用户管理、文件权限、本地策略、组策略说明

    Windows用户管理 一.用户账户 net user # 查看计算机用户whoami /user # 列出用户名和sidsecpol.msc(本地安全策略)net user name passwor ...

  2. 服务器的日志用数据库还是文件,日志是写数据库好还是文件好,以及日志策略...

    日志是写数据库好还是文件好,以及日志策略 电脑版发表于:2019/6/4 21:36 先来看看大佬的一句话:离开需求谈技术都是扯淡 主要是看你的日志是为了只做一个存储归档,还是要把数据对统计与分析 如 ...

  3. python数据分析及可视化(十七)聚宽(双均线分析、因子选股策略、多因子选股策略、均值回归理论、布林带策略、PEG策略、权重收益策略)

    聚宽 聚宽是一个做金融量化的网站,https://www.joinquant.com,登录注册,如果你写的文章.策略被别人采纳,增加积分,积分用于免费的回测时长.在我的策略,进入策略列表,里面有做好的 ...

  4. hadoop文件存储位置_Hadoop文件的存储格式实例详解

    sequence文件存储格式 1.txt 纯文本格式,若干行记录.默认用字符编码存储 2.SequenceFile格式(顺序文件格式,可进行切割) key-value 格式进行存储,最终形成的是一个二 ...

  5. 关于组策略软件限制策略规则

    关于组策略软件限制策略规则 一.软件限制策略的作用 首先说一下HIPS的3D AD--程序保护    保护应用程序不被恶意修改.删除.注入 FD--文件保护    保护关键的文件不被恶意修改.删除,禁 ...

  6. 本地策略和组策略,更改安全设置和用户权限分配兼容性问题

    如果您更改安全设置和用户权限分配,则可能会导致客户端.服务和程序问题发生 适用于: Microsoft Windows Server 2003 Standard Edition (32-bit x86 ...

  7. Redis的持久化机制、过期策略、淘汰策略

    文章目录 一.持久化机制 1. RDB机制 2. AOF机制 RDB的优缺点 AOF的优缺点 持久化机制选择 二.过期策略 常见过期策略 Redis过期策略 1. 定期删除 2. 惰性删除 RDB对过 ...

  8. Hadoop(三)-Hadoop文件配置

    一.修改hadoop的配置文件(五个) • 修改hadoop-env.sh • 修改core-site.xml <configuration> <!--用来指定HDFS的老大(Nam ...

  9. 计算机策略编辑器,组策略及组策略编辑器基础知识

    组策略是什么?有什么作用?如何启用和使用组策略编辑器呢?下文一一给出了详细的解答. 使用组策略 在MicrosoftWindowsXP中,可以使用组策略为用户和计算机组定义用户和计算机配置.通过使用组 ...

最新文章

  1. android2.2编译,Android NDK编译Box2D_V2.2
  2. iOS之浅谈纯代码控制UIViewController视图控制器跳转界面的几种方法
  3. 将Sublime Text 3设置为Python全栈开发环境
  4. 一个由于Pricing RFC引起的UI超时问题
  5. eclipse打开当前文件夹
  6. springcloud中config和bus的使用
  7. Kakao Talk母公司第四季净利润暴跌80%
  8. windows10下搭建spark平台
  9. 产品经理必看书籍推荐
  10. 总结:86版五笔输入法
  11. python炫酷gui界面_如何炫酷的使用Python
  12. 爬虫案例:自动登录抽屉新热榜
  13. 深度优先搜索/广度优先搜索
  14. Zedboard(一)开发环境Vivado
  15. vue 单页面背景图片设置
  16. C++实现随机点名器(支持文件读入、手动输入、不重复点名)
  17. 华硕主板+ubuntu18.04+3090驱动安装踩坑记录
  18. uniapp 搜索关键字高亮显示实现
  19. Edwards推出市场上抽吸速度最高的新款紧凑型干式真空泵
  20. 有关颜色敏感度测试的软件是啥,色彩敏感度测试:你是色盲吗?

热门文章

  1. JS parseInt() 、parseFloat()、Number()
  2. 【LRPP-GRR】Low-Rank Preserving Projection Via Graph Regularized Reconstruction
  3. Centos配置samba文件共享服务器
  4. React Native调用Android接口
  5. html5 手机端 select,适配性强的移动端select选项框
  6. php 微信打赏功能,微信打赏是什么功能?微信怎么打赏?
  7. linux软件时间同步硬件时间,linux系统时间同步,硬件时钟和系统时间同步,时区的设置...
  8. Runas命令:能让域用户/普通User用户以管理员身份运行指定程序。
  9. Wwise工程里,音频文件不出声
  10. 无损放大图片的软件叫什么?这篇文章来告诉你