hadoop-hdfs-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <tate...@nttdata.co.jp>
Subject RE: HDFS Quota
Date Tue, 26 Jan 2010 07:04:44 GMT
Hi Boris,

Thank you for your reply.

> From your example it looks like you have namespace quota (not diskspace),
> i.e. quota for quantities of files (not size)
I used following command.

$ ./bin/hadoop dfsadmin -setSpaceQuota 192000 /user/root/input/

I thought this was a limit on total size(192000) of all the files 
under the directory tree(/user/root/input/).

Does quota for quantities of files (not size) mean Name Quotas?

I found the following sentences.
Name Quotas is a hard limit on the number of file and directory.
Space Quotas is a hard limit on the number of bytes used by files.

Sorry,I'm confused about the difference between namespace and diskspace.

> Yes, I think this is by design. When HDFS creates a file, it doesn't know
> how big the file will be. So diskspace quota is checked on writing to the
> file (not on creation).
I understood that.
However, I think that the system recognize that the file exists even by 0 bytes. 
Therefore, should I take the action deleted on the application side when it becomes 0 bytes?

> What is your block size. I don't think it make sense to put quota for less
> then a blocksize.
My block size is 64MByte(default setting).
I understood that I should have set the quota larger than the block size.

File size is 134217728/1024^2=128MByte.(larger than the block size(64MByte))
Quota size is 256MByte(256*1024^2=268435456).(larger than the block size(64MByte))
Number of replication is 2.

# ls -ltr xaa
-rw-r--r-- 1 root root 134217728 Jan 26 01:45 xaa
# ls -ltr xab
-rw-r--r-- 1 root root 134217728 Jan 26 01:45 xab
# ./bin/hadoop dfsadmin -setSpaceQuota 256m /user/root/input/
# ./bin/hadoop fs -count -q /user/root/input
        none             inf       268435456       268435456            1            0   
              0 hdfs://drbd-test-vm03/user/root/input
# ./bin/hadoop dfs -put xaa /user/root/input/
# ./bin/hadoop fs -count -q /user/root/input
        none             inf       268435456               0            1            1   
      134217728 hdfs://drbd-test-vm03/user/root/input
# ./bin/hadoop dfs -put xab /user/root/input/
# ./bin/hadoop fs -count -q /user/root/input
        none             inf       268435456      -268435456            1            2   
      268435456 hdfs://drbd-test-vm03/user/root/input

I thought that it became an error when the quota size was exceeded.
However, it was a "-" mark without becoming an error.
Why didn't the Space Quota setting(hard limit on the number of bytes) become effective?

Best regards,
Tadashi.
> -----Original Message-----
> From: Boris Shkolnik [mailto:borya@yahoo-inc.com]
> Sent: Tuesday, January 26, 2010 5:20 AM
> To: hdfs-user@hadoop.apache.org
> Subject: Re: HDFS Quota
> 
> >>> /user/root/input is exceeded: namespace quota=-1 file count=2,
> From your example it looks like you have namespace quota (not diskspace),
> i.e. quota for quantities of files (not size)
> 
> 
> > Quota exceed exception,but it creates file of size 0.
> Yes, I think this is by design. When HDFS creates a file, it doesn't know
> how big the file will be. So diskspace quota is checked on writing to the
> file (not on creation).
> 
> >Q3:Why did input file's capacity exceed the limit(space quota)?
> What is your block size. I don't think it make sense to put quota for less
> then a blocksize.
> 
> Boris.
> 
> On 1/25/10 1:01 AM, "tatebet@nttdata.co.jp" <tatebet@nttdata.co.jp> wrote:
> 
> > Hi everyone,
> >
> > I set Space Quotas for the amount of space on HDFS.
> > But I have some questions.
> >
> > ■Question
> > Q1:Why does diskspace become MByet when the file of KByte is input?(1024
> > calculations in HDFS)
> > Q2:Is there a person who has information for this problem that quota exceed
> > exception,but it creates file of size 0?
> > Q3:Why did input file's capacity exceed the limit(space quota)?
> >
> >
> > ■Details of question
> > ★First time
> > Even when I put file which was smaller than the capacity set in Space Quota,
> > it became an error.
> >
> > The input file's capacity which I put is 64000=64kbyte.
> >
> > ・input file
> > $ ls -ltr
> > $ -rw-r--r-- 1 root root  64000 Jan 21 04:42 xaa
> > $ du -h xaa
> > 68K     xaa
> >
> > ・hdfs-site.xml(replication)
> > <property>
> >   <name>dfs.replication</name>
> >   <value>2</value>
> >  </property>
> >
> > ・Space Quota
> > $ ./bin/hadoop dfsadmin -setSpaceQuota 192000 /user/root/input/
> > $ ./bin/hadoop fs -count -q /user/root/input/
> >         none             inf          192000          192000
> 1
> > 0                  0 hdfs://drbd-test-vm03/user/root/input
> > $ ./bin/hadoop dfs -put input/xaa /user/root/input/
> > 10/01/21 19:35:58 WARN hdfs.DFSClient: DataStreamer Exception:
> > org.apache.hadoop.hdfs.protocol.QuotaExceededException:
> > org.apache.hadoop.hdfs.protocol.QuotaExceededException: The quota of
> > /user/root/input is exceeded: namespace quota=-1 file count=2, diskspace
> > quota=192000 diskspace=134217728
> >         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
> > Method)
> >         at
> >
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAc
> cesso
> > rImpl.java:39)
> >         at
> >
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConst
> ructo
> > rAccessorImpl.java:27)
> >         at
> java.lang.reflect.Constructor.newInstance(Constructor.java:513)
> >         at
> >
> org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteExceptio
> n.jav
> > a:96)
> >         at
> >
> org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteExcepti
> on.ja
> > va:58)
> >         at
> >
> org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.locateFollowingBlock(DFS
> Clien
> > t.java:2875)
> >         at
> >
> org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DF
> SClie
> > nt.java:2755)
> >         at
> >
> org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2000(DFSClient.ja
> va:20
> > 46)
> >         at
> >
> org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClie
> nt.ja
> > va:2232)
> > Caused by: org.apache.hadoop.ipc.RemoteException:
> > org.apache.hadoop.hdfs.protocol.QuotaExceededException: The quota of
> > /user/root/input is exceeded: namespace quota=-1 file count=2, diskspace
> > quota=192000 diskspace=134217728
> >         at
> >
> org.apache.hadoop.hdfs.server.namenode.INodeDirectoryWithQuota.verifyQuot
> a(INo
> > deDirectoryWithQuota.java:161)
> >         at
> >
> org.apache.hadoop.hdfs.server.namenode.INodeDirectoryWithQuota.updateNumI
> temsI
> > nTree(INodeDirectoryWithQuota.java:134)
> >         at
> >
> org.apache.hadoop.hdfs.server.namenode.FSDirectory.updateCount(FSDirector
> y.jav
> > a:859)
> >         at
> >
> org.apache.hadoop.hdfs.server.namenode.FSDirectory.addBlock(FSDirectory.j
> ava:2
> > 65)
> >         at
> >
> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.allocateBlock(FSNames
> ystem
> > .java:1427)
> >         at
> >
> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FS
> Names
> > ystem.java:1274)
> >         at
> >
> org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:42
> 2)
> >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >         at
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java
> :39)
> >         at
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorI
> mpl.j
> > ava:25)
> >         at java.lang.reflect.Method.invoke(Method.java:597)
> >         at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:508)
> >         at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:959)
> >         at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:955)
> >         at java.security.AccessController.doPrivileged(Native Method)
> >         at javax.security.auth.Subject.doAs(Subject.java:396)
> >         at org.apache.hadoop.ipc.Server$Handler.run(Server.java:953)
> >
> >         at org.apache.hadoop.ipc.Client.call(Client.java:739)
> >         at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:220)
> >         at $Proxy0.addBlock(Unknown Source)
> >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >         at
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java
> :39)
> >         at
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorI
> mpl.j
> > ava:25)
> >         at java.lang.reflect.Method.invoke(Method.java:597)
> >         at
> >
> org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvoc
> ation
> > Handler.java:82)
> >         at
> >
> org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationH
> andle
> > r.java:59)
> >         at $Proxy0.addBlock(Unknown Source)
> >         at
> >
> org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.locateFollowingBlock(DFS
> Clien
> > t.java:2873)
> >         ... 3 more
> >
> > 10/01/21 19:35:58 WARN hdfs.DFSClient: Error Recovery for block null bad
> > datanode[0] nodes == null
> > 10/01/21 19:35:58 WARN hdfs.DFSClient: Could not get block locations. Source
> > file "/user/root/input/xaa" - Aborting...
> > put: org.apache.hadoop.hdfs.protocol.QuotaExceededException: The quota of
> > /user/root/input is exceeded: namespace quota=-1 file count=2, diskspace
> > quota=192000 diskspace=134217728
> >
> > When I saw the above error messages,it was described as diskspace=134217728.
> > Perhaps, I think that it is "134217728/1024^2=128MByte".
> >
> > I understood that this is why The quota(192000=192Kbyte) of /user/root/input
> > was exceeded.
> >
> > Q1:Why does diskspace become MByet when the file of KByte is input?(1024
> > calculations in HDFS)
> >
> > [root@drbd-test-vm03 current]# ./bin/hadoop dfs -lsr /user/root/input/xaa
> > -rw-r--r--   2 root supergroup          0 2010-01-21 19:35
> > /user/root/input/xaa
> >
> > Quota exceed exception,but it creates file of size 0.
> >
> > It seems that this is the similar problem as the problem described in
> > following URL.
> > http://issues.apache.org/jira/browse/HDFS-172
> >
> > Has not this problem solved yet?
> >
> > Q2:Is there a person who has information for this problem that quota exceed
> > exception,but it creates file of size 0?
> >
> > ★Since the second times
> > The result was different the first time and the second times.
> > It doesn't make an error even if it exceeds capacity since the second times.
> >
> > Imput file's capacity is 64000=64k.
> > Reprication figure is 2.
> > Calculated result
> > 102400-(64000×2)=-25600<-- Why does it become a "-" mark without becoming
> an
> > error?
> >
> > I thought that the space quota is a limit on the number of bytes used by
> files
> > at that directory.
> > However, the result shows the thing to which my assumption is wrong.
> >
> > Q3:Why did input file's capacity exceed the limit(space quota)?
> >
> > [root@drbd-test-vm03 current]# ./bin/hadoop dfsadmin -setSpaceQuota 100K
> > /user/root/input/
> > [root@drbd-test-vm03 current]# ./bin/hadoop fs -count -q /user/root/input/
> >         none             inf          102400          102400
> 1
> > 0                  0 hdfs://drbd-test-vm03/user/root/input
> > [root@drbd-test-vm03 current]# ./bin/hadoop dfs -put xaa /user/root/input/
> > [root@drbd-test-vm03 current]# ./bin/hadoop fs -count -q /user/root/input/
> >         none             inf          102400          -25600
> 1
> > 1              64000 hdfs://drbd-test-vm03/user/root/input
> >
> > Best regards,
> > Tadashi.
> >


Mime
View raw message