`
nlslzf
  • 浏览: 1046162 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HDFS quota 設定

 
阅读更多

http://fenriswolf.me/2012/04/04/hdfs-quota-%E8%A8%AD%E5%AE%9A/

 

在多人共用的狀況下,quota 的設定非常重要。尤其是在 Hadoop 處理大量資料的環境,不小心就容易把所有的空間用完造成別人無法存取

Hadoop quota 的設定是針對目錄,而不是針對帳號。所以在管理上最好讓每個帳號只能寫入某一個目錄(例如 /user/fenriswolf),然後對各別目錄加上 quota 設定
設定方式有兩種

  • Name Quotas : 等於 ulimit 裡的 hard limit,也就是設定某個目錄下檔案及目錄的總數
  • Space Quotas : 設定某個目錄下使用的空間大小

預設是沒有任何 quota 限制的,可以用 hadoop fs -count 來看

1 hadoop fs -count -q /user/fenriswolf

 

以下是結果,none 及 inf 表示沒有設定

1 QUOTA            REMAINING_QUOTA  SPACE_QUOTA      REMAINING_SPACE_QUOTA  DIR_COUNT   FILE_COUNT    CONTENT_SIZE  FILE_NAME
2 none             inf              none             inf                    6           15            2598367       hdfs://localhost:9000/user/fenriswolf

 

1. Name Quotas
計算公式為
QUOTA – (DIR_COUNT + FILE_COUNT) = REMAINING_QUOTA

設定方式,這裡的 10000 是指 DIR_COUNT + FILE_COUNT = 10000
最大值為 Long.Max_Value

1 hadoop dfsadmin -setQuota 10000 /user/fenriswolf/

 

用 hadoop fs -count 來看現在的設定

1 QUOTA            REMAINING_QUOTA  SPACE_QUOTA      REMAINING_SPACE_QUOTA  DIR_COUNT   FILE_COUNT    CONTENT_SIZE  FILE_NAME
2 10000            9000             none             inf                    60          940           45343100      hdfs://localhost:9000/user/fenriswolf

 

如果要寫入的檔案數已經超過設定值會看到下面的錯誤訊息

1 put: org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: The NameSpace quota (directories and files) of directory /user/fenriswolf is exceeded: quota=10000 file count=10001

 

清除設定

1 hadoop dfsadmin -clrQuota /user/fenriswolf/

 

2. Space Quotas
計算公式為
SPACE_QUOTA – CONTENT_SIZE = REMAINING_SPACE_QUOTA

設定方式,這裡的 1g 是指 1GB,可用 m, g, t 來代表 MB, GB, TB

1 hadoop dfsadmin -setSpaceQuota 1g /user/fenriswolf/

 

這裡要特別注意的是,space quota 的設定所看的不是上傳的檔案大小,是寫入 HDFS 的所有 block size
假設一個檔案要寫入 2 個 blocks,在 core-site.xml 裡設定 dfs.block.size 為 64MB,dfs.replication 為 3
那所需要的空間為 2 x 64MB x 3 = 384MB

還有一件另人困擾的地方是,就算只存入一個小檔案,例如 1KB,實際寫入 HDFS 並不會占滿整個 block
但 Hadoop 的 validation rule 仍然是用 1 x 64MB x 3 = 192MB 的方式去做計算

用 hadoop fs -count 來看現在的設定

1 QUOTA            REMAINING_QUOTA  SPACE_QUOTA      REMAINING_SPACE_QUOTA  DIR_COUNT   FILE_COUNT    CONTENT_SIZE  FILE_NAME
2 10000            9000             1073741824       1028398724             60          940           45343100      hdfs://localhost:9000/user/fenriswolf

 

如果要寫入的檔案數已經超過設定值會看到下面的錯誤訊息

01 12/03/19 05:44:51 ERROR hdfs.DFSClient: Exception closing file /user/fenriswolf/hive/lib/py/queryplan/ttypes.py : org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: The DiskSpace quota of /user/fenriswolf is exceeded: quota=1073741824 diskspace consumed=1.5g
02 org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: The DiskSpace quota of /user/fenriswolf is exceeded: quota=1073741824 diskspace consumed=1.5g
03     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
04     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
05     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
06     at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
07     at org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:95)
08     at org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:57)
09     at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.locateFollowingBlock(DFSClient.java:3558)
10     at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:3421)
11     at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2100(DFSClient.java:2627)
12     at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:2822)

 

清除設定

1 hadoop dfsadmin -clrSpaceQuota /user/fenriswolf/

 

4. 其他
Quota 的設定是跟著目錄走的,目錄如果改名字設定依然會存在
麻煩的是,設定之後如果超過限制,雖然檔案寫不進 HDFS,但是檔案名稱卻已經存在,只是 size 為 0。造成加大 quota 還要先把已存在的檔案砍掉才能再寫入
另外如果設定的 quota 值小於該目錄既存的 Name Quotas 及 Space Quotas 並不會出錯
例如

1 hadoop dfsadmin -setQuota 100 /user/fenriswolf

 

只是從 hadoop fs -count 會看到 REMAINING_QUOTA 變負值,當然也就無法再寫資料進去

1 QUOTA            REMAINING_QUOTA  SPACE_QUOTA      REMAINING_SPACE_QUOTA  DIR_COUNT   FILE_COUNT    CONTENT_SIZE  FILE_NAME
2 100              -900             1073741824       1028398724             60          940           45343100      hdfs://localhost:9000/user/fenriswolf

 

 
 
執行環境
CentOS 6.2
JDK 1.6.0_31
Cloudera CDH3U3

參考資料
HDFS Quotas Guide

<!--EndFragment-->

分享到:
评论

相关推荐

    HDFS Comics HDFS 漫画

    HDFS是Hadoop分布式计算的存储基础。HDFS具有高容错性,可以部署在通用硬件设备上,适合数据密集型应用,并且提供对数据读写的高吞 吐量。HDFS能 够提供对数据的可扩展访问,通过简单地往集群里添加节点就可以解决...

    HDFS管理工具HDFS Explorer下载地址、使用方法.docx

    **HDFS管理工具HDFS Explorer** HDFS Explorer是一款专为Windows平台设计的HDFS文件管理系统,它使得用户能够像操作本地文件系统一样便捷地管理和浏览Hadoop分布式文件系统(HDFS)。尽管官方已经停止更新此软件,...

    HDFS实例基本操作

    Hadoop分布式文件系统(HDFS)是Apache Hadoop项目的核心组件之一,它为大数据处理提供了可靠的、可扩展的分布式存储解决方案。在这个“HDFS实例基本操作”中,我们将深入探讨如何在已经安装好的HDFS环境中执行基本...

    HDFS文件系统基本文件命令、编程读写HDFS

    HDFS 文件系统基本文件命令、编程读写 HDFS HDFS(Hadoop Distributed File System)是一种分布式文件系统,用于存储和管理大规模数据。它是 Hadoop 云计算平台的核心组件之一,提供了高效、可靠、可扩展的数据存储...

    hdfs源码分析整理

    hdfs源码分析整理 在分布式文件系统中,HDFS(Hadoop Distributed File System)扮演着核心角色,而HDFS的源码分析则是深入了解HDFS架构和实现机理的关键。本文将对HDFS源码进行详细的分析和整理,涵盖了HDFS的目录...

    14、HDFS 透明加密KMS

    【HDFS 透明加密KMS】是Hadoop分布式文件系统(HDFS)提供的一种安全特性,用于保护存储在HDFS中的数据,确保数据在传输和存储时的安全性。HDFS透明加密通过端到端的方式实现了数据的加密和解密,无需修改用户的应用...

    大数据实验二-HDFS编程实践

    ### 大数据实验二-HDFS编程实践 #### 实验内容概览 本次实验的主要目标是通过对HDFS(Hadoop Distributed File System)的操作实践,加深学生对HDFS在Hadoop架构中的作用及其基本操作的理解。实验内容包括两大部分...

    大数据技术基础实验报告-HDFS常用操作命令.doc

    在大数据技术领域,Hadoop 分布式文件系统(HDFS)是核心组件之一,它为大规模数据存储提供了可扩展和高容错性的解决方案。本实验报告主要关注HDFS的常用操作命令,这些命令是管理员和数据分析师日常工作中不可或缺...

    HDFS文件的查看

    hdfs文件的查看 hdfs fs -cat /文件名

    hdfs-over-ftp安装包及说明

    【标题】"hdfs-over-ftp安装包及说明"涉及的核心技术是将FTP(File Transfer Protocol)服务与HDFS(Hadoop Distributed File System)相结合,允许用户通过FTP协议访问和操作HDFS上的数据。这个标题暗示了我们将在...

    hdfs-java-api

    HDFS Java API 详解 HDFS(Hadoop Distributed File System)是 Hadoop 项目中的一部分,是一个分布式文件系统。HDFS Java API 是一组 Java 类库,提供了一组接口来操作 HDFS。下面我们将对 HDFS Java API 进行详细...

    HDFS基本命令.docx

    HDFS基本命令 HDFS(Hadoop Distributed File System)是一种分布式文件系统,提供了对大规模数据的存储和管理能力。在HDFS中,基本命令是最基础也是最常用的命令,掌握这些命令是使用HDFS的基础。本节我们将详细...

    hdfs源码.zip

    第1章 HDFS 1 1.1 HDFS概述 1 1.1.1 HDFS体系结构 1 1.1.2 HDFS基本概念 2 1.2 HDFS通信协议 4 1.2.1 Hadoop RPC接口 4 1.2.2 流式接口 20 1.3 HDFS主要流程 22 1.3.1 HDFS客户端读流程 22 1.3.2 ...

    HDFS命令指南相关学习

    在大数据处理领域,Hadoop HDFS(Hadoop Distributed File System)是核心组件之一,它提供了分布式存储的能力。本文将深入探讨HDFS的一些基本命令,帮助用户更好地管理和操作HDFS中的数据。 1. `appendToFile`命令...

    分布式存储系统——HDFS

    Hadoop分布式文件系统(HDFS)就是一种典型的分布式存储系统,它是Hadoop项目的核心组件之一,适用于大规模数据集的存储。 HDFS的设计理念是以高容错性为目标,它假定硬件故障是常态而不是异常。因此,HDFS会自动地...

    MR处理HDFS日志样例

    标题中的“MR处理HDFS日志样例”指的是使用MapReduce框架处理存储在Hadoop分布式文件系统(HDFS)上的日志数据。MapReduce是一种编程模型,由Google提出,广泛应用于大数据处理,尤其是在Hadoop生态系统中。在这个...

    HDFS shell

    Hadoop分布式文件系统(HDFS)是Hadoop项目的核心子项目之一,它是一个高度容错性的系统,适合在廉价硬件上运行。HDFS提供了高吞吐量的数据访问,非常适合大规模数据集的应用。为了更好地管理和操作HDFS中的数据,...

    上传文件到HDFS

    在分布式计算领域,Hadoop Distributed File System(HDFS)是一个广泛使用的开源文件系统,它设计用于处理和存储大规模数据集。HDFS具有高容错性和高可扩展性,是大数据处理的重要基础设施。当我们需要将本地文件...

    HDFS实验手册.pdf

    ### HDFS实验手册知识点概述 #### 一、HDFS简介 HDFS(Hadoop Distributed File System)是Hadoop生态系统中的一个重要组成部分,它是一种分布式文件系统,设计用于在大量硬件上存储大量的数据集。HDFS的设计目标是...

Global site tag (gtag.js) - Google Analytics