No I am not using a multi-threaded application. I am using the native HDFS C
API to write into HDFS. I do not have access to the namenode log at the
moment. I will do that first thing in the morning and send out what I see.

Could you please tell me the intuition behind why the volatile would help ?
Writes work fine as if I constantly write in a loop and call
hdfsCloseFile(). However if I perform intermittent writes and then call
hdfsCloseFile() it seems that the FileSystem has already been closed. That
is what I do not understand. Why would the FileSystem close if
hdfsCloseFile() has not been called explicitly ?

Thanks
Avinash

On 6/21/07, Dhruba Borthakur <[EMAIL PROTECTED]> wrote:

Hi avinash,

The only suspicious thing I see is that DFSClient.running is defined as
boolean running = true;

Can you change this to
volatile boolean running = true

And see if your problem gets fixed? Also, can you pl let me know about the
following:

1. Are you using a multi-threaded application?
2. Do you use a DFSClient instance to access more than one file?
Simultaneously or sequentially?
3. Do you see any other types of exceptions in the Namenode log?

Thanks,
dhruba


-----Original Message-----
From: Phantom [mailto:[EMAIL PROTECTED]
Sent: Thursday, June 21, 2007 8:55 PM
To: [email protected]
Subject: HDFS remote client

Is it possible to keep a file open for say 1 hour and write to it every
once
in a while and then close it. I constantly get the same error on attempt
to
close the handle of the file when I am done with my writes. I can see all
the writes and flushes happening w/o any problems. I am using the Native C
API to achieve this. Does it have anything to do with  the client losing
some kind of a lease ?  How do I go about fixing this problem ?


This is the exception I get when I try to close the file. I am writing
into
HDFS from a remote machine. What am I doing wrong?

Exception in thread "main" java.io.IOException: Filesystem closed
        at org.apache.hadoop.dfs.DFSClient.checkOpen(DFSClient.java:168)
        at org.apache.hadoop.dfs.DFSClient.access$200(DFSClient.java:48)
        at org.apache.hadoop.dfs.DFSClient$DFSOutputStream.write(
DFSClient.java:1245)
        at org.apache.hadoop.fs.FSDataOutputStream$PositionCache.write(
FSDataOutputStream.java:38)
        at java.io.BufferedOutputStream.write(BufferedOutputStream.java
:105)
        at java.io.DataOutputStream.write (DataOutputStream.java:90)
        at org.apache.hadoop.fs.ChecksumFileSystem$FSOutputSummer.write(
ChecksumFileSystem.java:402)
        at org.apache.hadoop.fs.FSDataOutputStream$PositionCache.write(
FSDataOutputStream.java :38)
        at java.io.BufferedOutputStream.flushBuffer(
BufferedOutputStream.java:65)
        at java.io.BufferedOutputStream.flush(BufferedOutputStream.java
:123)
        at java.io.DataOutputStream.flush(DataOutputStream.java :106)
        at org.apache.hadoop.fs.FSDataOutputStream.close(
FSDataOutputStream.java:91)
Call to org/apache/hadoop/fs/FSDataOutputStream::close failed!
[Thu Jun 21 18:24:42 2007] "File closed -1"

Thanks
Avinash


Reply via email to