You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-user@hadoop.apache.org by Niranjan Subramanian <ni...@webaction.com> on 2015/10/30 17:20:33 UTC

Exception while appending to an existing file in HDFS

Hi guys, 

I'm basically trying to append data to an already exisiting file in HDFS. This is the exception I get

03:49:54,456WARN org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run:628 DataStreamer Exception
java.lang.NullPointerException
at com.google.protobuf.AbstractMessageLite$Builder.checkForNullValues(AbstractMessageLite.java:336)
at com.google.protobuf.AbstractMessageLite$Builder.addAll(AbstractMessageLite.java:323)
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$UpdatePipelineRequestProto$Builder.addAllStorageIDs(ClientNamenodeProtocolProtos.java)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.updatePipeline(ClientNamenodeProtocolTranslatorPB.java:842)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.setupPipelineForAppendOrRecovery(DFSOutputStream.java:1238)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:532)
My replication factor is 1. I'm using 2.5.0 of Apache's Hadoop distribution. This is the code snippet which I'm using for creating a file if it doesn't exist or create in append mode if it exists

String url = getHadoopUrl()+fileName;
    Path file = new Path(url);
    try {
        if(append) {
            if(hadoopFileSystem.exists(file))
                fsDataOutputStream = hadoopFileSystem.append(file);
            else
                fsDataOutputStream = hadoopFileSystem.create(file);
        }
        else
            fsDataOutputStream = hadoopFileSystem.create(file); 
Appending stack trace that I found in datanode's log

2015-10-30 16:19:54,435 INFO  org.apache.hadoop.hdfs.server.datanode.DataNode: Receiving BP-1012136337-192.168.123.103-1411103100884:blk_1073742239_1421 src: /127.0.0.1:54160  dest: /127.0.0.1:50010
 2015-10-30 16:19:54,435 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Appending to FinalizedReplica, blk_1073742239_1421, FINALIZED
 getNumBytes()     = 812
 getBytesOnDisk()  = 812
 getVisibleLength()= 812
 getVolume()       = /Users/niranjan/hadoop/hdfs/datanode/current
 getBlockFile()    = /Users/niranjan/hadoop/hdfs/datanode/current/BP-        1012136337-192.168.123.103-1411103100884/current/finalized/blk_1073742239
 unlinked          =false
2015-10-30 16:19:54,461 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Exception for BP-1012136337-192.168.123.103-1411103100884:blk_1073742239_1422
java.io.IOException: Premature EOF from inputStream
    at org.apache.hadoop.io.IOUtils.readFully(IOUtils.java:194)
    at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doReadFully(PacketReceiver.java:213)
    at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doRead(PacketReceiver.java:134)
    at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.receiveNextPacket(PacketReceiver.java:109)
    at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receivePacket(BlockReceiver.java:435)
    at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receiveBlock(BlockReceiver.java:693)
    at org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:569)
    at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:115)
    at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:68)
    at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:221)
    at java.lang.Thread.run(Thread.java:745)

It's not quite clear what is causing this exception. Also I'm quite confused after reading various sources whether appending is supported in HDFS or not. Let me know what I'm missing here

Regards,
Niranjan

Re: Exception while appending to an existing file in HDFS

Posted by ABHISHEK SINGH <23...@gmail.com>.
Hi Niranjan,

Glad to hear your issue was resolved. Actually, upgrading was a wise 
decision.

Thanks,
Abhishek

On Monday 02 November 2015 03:59 PM, Niranjan Subramanian wrote:
> Hi Abhishek,
>
> Thanks for your pointer on letting me know there is an issue from 
> 2.2.0 to 2.5.1, I just upgraded to 2.7.1 and without adding any of 
> these properties, it is working fine.
>
> Regards,
> Niranjan
> On 02-Nov-2015, at 1:38 pm, Niranjan Subramanian 
> <niranjan@webaction.com <ma...@webaction.com>> wrote:
>
>> Hey Abhishek,
>>
>> I tried both tweaks, still I ended up with same exception. Maybe I 
>> should try upgrading to 2.6.0 and see?
>>
>> Regards,
>> Niranjan
>> On 01-Nov-2015, at 3:49 pm, ABHISHEK SINGH <23singhabhishek@gmail.com 
>> <ma...@gmail.com>> wrote:
>>
>>> ("dfs.datanode.socket.write.timeout", "20000");
>>
>


Re: Exception while appending to an existing file in HDFS

Posted by ABHISHEK SINGH <23...@gmail.com>.
Hi Niranjan,

Glad to hear your issue was resolved. Actually, upgrading was a wise 
decision.

Thanks,
Abhishek

On Monday 02 November 2015 03:59 PM, Niranjan Subramanian wrote:
> Hi Abhishek,
>
> Thanks for your pointer on letting me know there is an issue from 
> 2.2.0 to 2.5.1, I just upgraded to 2.7.1 and without adding any of 
> these properties, it is working fine.
>
> Regards,
> Niranjan
> On 02-Nov-2015, at 1:38 pm, Niranjan Subramanian 
> <niranjan@webaction.com <ma...@webaction.com>> wrote:
>
>> Hey Abhishek,
>>
>> I tried both tweaks, still I ended up with same exception. Maybe I 
>> should try upgrading to 2.6.0 and see?
>>
>> Regards,
>> Niranjan
>> On 01-Nov-2015, at 3:49 pm, ABHISHEK SINGH <23singhabhishek@gmail.com 
>> <ma...@gmail.com>> wrote:
>>
>>> ("dfs.datanode.socket.write.timeout", "20000");
>>
>


Re: Exception while appending to an existing file in HDFS

Posted by ABHISHEK SINGH <23...@gmail.com>.
Hi Niranjan,

Glad to hear your issue was resolved. Actually, upgrading was a wise 
decision.

Thanks,
Abhishek

On Monday 02 November 2015 03:59 PM, Niranjan Subramanian wrote:
> Hi Abhishek,
>
> Thanks for your pointer on letting me know there is an issue from 
> 2.2.0 to 2.5.1, I just upgraded to 2.7.1 and without adding any of 
> these properties, it is working fine.
>
> Regards,
> Niranjan
> On 02-Nov-2015, at 1:38 pm, Niranjan Subramanian 
> <niranjan@webaction.com <ma...@webaction.com>> wrote:
>
>> Hey Abhishek,
>>
>> I tried both tweaks, still I ended up with same exception. Maybe I 
>> should try upgrading to 2.6.0 and see?
>>
>> Regards,
>> Niranjan
>> On 01-Nov-2015, at 3:49 pm, ABHISHEK SINGH <23singhabhishek@gmail.com 
>> <ma...@gmail.com>> wrote:
>>
>>> ("dfs.datanode.socket.write.timeout", "20000");
>>
>


Re: Exception while appending to an existing file in HDFS

Posted by ABHISHEK SINGH <23...@gmail.com>.
Hi Niranjan,

Glad to hear your issue was resolved. Actually, upgrading was a wise 
decision.

Thanks,
Abhishek

On Monday 02 November 2015 03:59 PM, Niranjan Subramanian wrote:
> Hi Abhishek,
>
> Thanks for your pointer on letting me know there is an issue from 
> 2.2.0 to 2.5.1, I just upgraded to 2.7.1 and without adding any of 
> these properties, it is working fine.
>
> Regards,
> Niranjan
> On 02-Nov-2015, at 1:38 pm, Niranjan Subramanian 
> <niranjan@webaction.com <ma...@webaction.com>> wrote:
>
>> Hey Abhishek,
>>
>> I tried both tweaks, still I ended up with same exception. Maybe I 
>> should try upgrading to 2.6.0 and see?
>>
>> Regards,
>> Niranjan
>> On 01-Nov-2015, at 3:49 pm, ABHISHEK SINGH <23singhabhishek@gmail.com 
>> <ma...@gmail.com>> wrote:
>>
>>> ("dfs.datanode.socket.write.timeout", "20000");
>>
>


Re: Exception while appending to an existing file in HDFS

Posted by Niranjan Subramanian <ni...@webaction.com>.
Hi Abhishek, 

Thanks for your pointer on letting me know there is an issue from 2.2.0 to 2.5.1, I just upgraded to 2.7.1 and without adding any of these properties, it is working fine. 

Regards,
Niranjan
On 02-Nov-2015, at 1:38 pm, Niranjan Subramanian <ni...@webaction.com> wrote:

> Hey Abhishek,
> 
> I tried both tweaks, still I ended up with same exception. Maybe I should try upgrading to 2.6.0 and see? 
> 
> Regards,
> Niranjan
> On 01-Nov-2015, at 3:49 pm, ABHISHEK SINGH <23...@gmail.com> wrote:
> 
>> ("dfs.datanode.socket.write.timeout", "20000");
> 


Re: Exception while appending to an existing file in HDFS

Posted by Niranjan Subramanian <ni...@webaction.com>.
Hi Abhishek, 

Thanks for your pointer on letting me know there is an issue from 2.2.0 to 2.5.1, I just upgraded to 2.7.1 and without adding any of these properties, it is working fine. 

Regards,
Niranjan
On 02-Nov-2015, at 1:38 pm, Niranjan Subramanian <ni...@webaction.com> wrote:

> Hey Abhishek,
> 
> I tried both tweaks, still I ended up with same exception. Maybe I should try upgrading to 2.6.0 and see? 
> 
> Regards,
> Niranjan
> On 01-Nov-2015, at 3:49 pm, ABHISHEK SINGH <23...@gmail.com> wrote:
> 
>> ("dfs.datanode.socket.write.timeout", "20000");
> 


Re: Exception while appending to an existing file in HDFS

Posted by Niranjan Subramanian <ni...@webaction.com>.
Hi Abhishek, 

Thanks for your pointer on letting me know there is an issue from 2.2.0 to 2.5.1, I just upgraded to 2.7.1 and without adding any of these properties, it is working fine. 

Regards,
Niranjan
On 02-Nov-2015, at 1:38 pm, Niranjan Subramanian <ni...@webaction.com> wrote:

> Hey Abhishek,
> 
> I tried both tweaks, still I ended up with same exception. Maybe I should try upgrading to 2.6.0 and see? 
> 
> Regards,
> Niranjan
> On 01-Nov-2015, at 3:49 pm, ABHISHEK SINGH <23...@gmail.com> wrote:
> 
>> ("dfs.datanode.socket.write.timeout", "20000");
> 


Re: Exception while appending to an existing file in HDFS

Posted by Niranjan Subramanian <ni...@webaction.com>.
Hi Abhishek, 

Thanks for your pointer on letting me know there is an issue from 2.2.0 to 2.5.1, I just upgraded to 2.7.1 and without adding any of these properties, it is working fine. 

Regards,
Niranjan
On 02-Nov-2015, at 1:38 pm, Niranjan Subramanian <ni...@webaction.com> wrote:

> Hey Abhishek,
> 
> I tried both tweaks, still I ended up with same exception. Maybe I should try upgrading to 2.6.0 and see? 
> 
> Regards,
> Niranjan
> On 01-Nov-2015, at 3:49 pm, ABHISHEK SINGH <23...@gmail.com> wrote:
> 
>> ("dfs.datanode.socket.write.timeout", "20000");
> 


Re: Exception while appending to an existing file in HDFS

Posted by Niranjan Subramanian <ni...@webaction.com>.
Hey Abhishek,

I tried both tweaks, still I ended up with same exception. Maybe I should try upgrading to 2.6.0 and see? 

Regards,
Niranjan
On 01-Nov-2015, at 3:49 pm, ABHISHEK SINGH <23...@gmail.com> wrote:

> ("dfs.datanode.socket.write.timeout", "20000");


Re: Exception while appending to an existing file in HDFS

Posted by Niranjan Subramanian <ni...@webaction.com>.
Hey Abhishek,

I tried both tweaks, still I ended up with same exception. Maybe I should try upgrading to 2.6.0 and see? 

Regards,
Niranjan
On 01-Nov-2015, at 3:49 pm, ABHISHEK SINGH <23...@gmail.com> wrote:

> ("dfs.datanode.socket.write.timeout", "20000");


Re: Exception while appending to an existing file in HDFS

Posted by Niranjan Subramanian <ni...@webaction.com>.
Hey Abhishek,

I tried both tweaks, still I ended up with same exception. Maybe I should try upgrading to 2.6.0 and see? 

Regards,
Niranjan
On 01-Nov-2015, at 3:49 pm, ABHISHEK SINGH <23...@gmail.com> wrote:

> ("dfs.datanode.socket.write.timeout", "20000");


Re: Exception while appending to an existing file in HDFS

Posted by Niranjan Subramanian <ni...@webaction.com>.
Hey Abhishek,

I tried both tweaks, still I ended up with same exception. Maybe I should try upgrading to 2.6.0 and see? 

Regards,
Niranjan
On 01-Nov-2015, at 3:49 pm, ABHISHEK SINGH <23...@gmail.com> wrote:

> ("dfs.datanode.socket.write.timeout", "20000");


Re: Exception while appending to an existing file in HDFS

Posted by ABHISHEK SINGH <23...@gmail.com>.
Hi Niranjan,

Try these tweaks in hdfs-site.xml

1) <property>
     <name>dfs.datanode.max.transfer.threads</name>
     <value>8192</value>
     <description>
         Specifies the maximum number of threads to use for transferring 
data
         in and out of the DN.
     </description>
</property>


<property>
         <name>dfs.socket.timeout</name>
         <value>20000</value>
     </property>

     <property>
         <name>dfs.datanode.socket.write.timeout</name>
         <value>20000</value>
     </property>


2) In the code part, try this implementatin if above fails.

     Configuration testConfig = new Configuration();
testConfig.set("fs.defaultFS", "hdfs://localhost:8020");
// deprecated key
// testConfig.set("dfs.socket.timeout", "20000");
testConfig.set("dfs.client.socket-timeout", "20000");
testConfig.set("dfs.datanode.socket.write.timeout", "20000");



This problem is witnessed in Hadoop version 2.2.0 to 2.5.1. Probable 
solution could be to either use  a lower idleTimeout or set higher 
socket timeouts in hadoop config.

This is an issue with configuration.

Looking forward to hear from you.


Thanks,
Abhishek Singh



On Sunday 01 November 2015 02:52 PM, Niranjan Subramanian wrote:
> Bumping this. Any idea? What's wrong here?
>
> On Fri, Oct 30, 2015 at 9:50 PM, Niranjan Subramanian 
> <niranjan@webaction.com <ma...@webaction.com>> wrote:
>
>     Hi guys,
>
>     I'm basically trying to append data to an already exisiting file
>     in HDFS. This is the exception I get
>
>     |03:49:54,456WARNorg.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run:628DataStreamerExceptionjava.lang.NullPointerExceptionat
>     com.google.protobuf.AbstractMessageLite$Builder.checkForNullValues(AbstractMessageLite.java:336)at
>     com.google.protobuf.AbstractMessageLite$Builder.addAll(AbstractMessageLite.java:323)at
>     org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$UpdatePipelineRequestProto$Builder.addAllStorageIDs(ClientNamenodeProtocolProtos.java)at
>     org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.updatePipeline(ClientNamenodeProtocolTranslatorPB.java:842)at
>     org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.setupPipelineForAppendOrRecovery(DFSOutputStream.java:1238)at
>     org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:532)|
>
>     My replication factor is 1. I'm using 2.5.0 of Apache's Hadoop
>     distribution. This is the code snippet which I'm using for
>     creating a file if it doesn't exist or create in append mode if it
>     exists
>
>     |Stringurl =getHadoopUrl()+fileName;Pathfile
>     =newPath(url);try{if(append){if(hadoopFileSystem.exists(file))fsDataOutputStream
>     =hadoopFileSystem.append(file);elsefsDataOutputStream
>     =hadoopFileSystem.create(file);}elsefsDataOutputStream
>     =hadoopFileSystem.create(file);|
>
>     Appending stack trace that I found in datanode's log
>
>     |2015-10-3016:19:54,435INFO
>     org.apache.hadoop.hdfs.server.datanode.DataNode:ReceivingBP-1012136337-192.168.123.103-1411103100884:blk_1073742239_1421
>     src:/127.0.0.1:54160dest:/127.0.0.1:500102015-10-3016:19:54,435INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl:Appendingto
>     FinalizedReplica,blk_1073742239_1421,FINALIZED
>     getNumBytes()=812getBytesOnDisk()=812getVisibleLength()=812getVolume()=/Users/niranjan/hadoop/hdfs/datanode/current
>     getBlockFile()=/Users/niranjan/hadoop/hdfs/datanode/current/BP-1012136337-192.168.123.103-1411103100884/current/finalized/blk_1073742239
>     unlinked =false2015-10-3016:19:54,461INFO
>     org.apache.hadoop.hdfs.server.datanode.DataNode:ExceptionforBP-1012136337-192.168.123.103-1411103100884:blk_1073742239_1422
>     java.io.IOException:PrematureEOF from inputStream at
>     org.apache.hadoop.io.IOUtils.readFully(IOUtils.java:194)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doReadFully(PacketReceiver.java:213)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doRead(PacketReceiver.java:134)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.receiveNextPacket(PacketReceiver.java:109)at
>     org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receivePacket(BlockReceiver.java:435)at
>     org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receiveBlock(BlockReceiver.java:693)at
>     org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:569)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:115)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:68)at
>     org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:221)at
>     java.lang.Thread.run(Thread.java:745)|
>
>
>     It's not quite clear what is causing this exception. Also I'm
>     quite confused after reading various sources whether appending is
>     supported in HDFS or not. Let me know what I'm missing here
>
>     Regards,
>     Niranjan
>
>


Re: Exception while appending to an existing file in HDFS

Posted by ABHISHEK SINGH <23...@gmail.com>.
Hi Niranjan,

Try these tweaks in hdfs-site.xml

1) <property>
     <name>dfs.datanode.max.transfer.threads</name>
     <value>8192</value>
     <description>
         Specifies the maximum number of threads to use for transferring 
data
         in and out of the DN.
     </description>
</property>


<property>
         <name>dfs.socket.timeout</name>
         <value>20000</value>
     </property>

     <property>
         <name>dfs.datanode.socket.write.timeout</name>
         <value>20000</value>
     </property>


2) In the code part, try this implementatin if above fails.

     Configuration testConfig = new Configuration();
testConfig.set("fs.defaultFS", "hdfs://localhost:8020");
// deprecated key
// testConfig.set("dfs.socket.timeout", "20000");
testConfig.set("dfs.client.socket-timeout", "20000");
testConfig.set("dfs.datanode.socket.write.timeout", "20000");



This problem is witnessed in Hadoop version 2.2.0 to 2.5.1. Probable 
solution could be to either use  a lower idleTimeout or set higher 
socket timeouts in hadoop config.

This is an issue with configuration.

Looking forward to hear from you.


Thanks,
Abhishek Singh



On Sunday 01 November 2015 02:52 PM, Niranjan Subramanian wrote:
> Bumping this. Any idea? What's wrong here?
>
> On Fri, Oct 30, 2015 at 9:50 PM, Niranjan Subramanian 
> <niranjan@webaction.com <ma...@webaction.com>> wrote:
>
>     Hi guys,
>
>     I'm basically trying to append data to an already exisiting file
>     in HDFS. This is the exception I get
>
>     |03:49:54,456WARNorg.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run:628DataStreamerExceptionjava.lang.NullPointerExceptionat
>     com.google.protobuf.AbstractMessageLite$Builder.checkForNullValues(AbstractMessageLite.java:336)at
>     com.google.protobuf.AbstractMessageLite$Builder.addAll(AbstractMessageLite.java:323)at
>     org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$UpdatePipelineRequestProto$Builder.addAllStorageIDs(ClientNamenodeProtocolProtos.java)at
>     org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.updatePipeline(ClientNamenodeProtocolTranslatorPB.java:842)at
>     org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.setupPipelineForAppendOrRecovery(DFSOutputStream.java:1238)at
>     org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:532)|
>
>     My replication factor is 1. I'm using 2.5.0 of Apache's Hadoop
>     distribution. This is the code snippet which I'm using for
>     creating a file if it doesn't exist or create in append mode if it
>     exists
>
>     |Stringurl =getHadoopUrl()+fileName;Pathfile
>     =newPath(url);try{if(append){if(hadoopFileSystem.exists(file))fsDataOutputStream
>     =hadoopFileSystem.append(file);elsefsDataOutputStream
>     =hadoopFileSystem.create(file);}elsefsDataOutputStream
>     =hadoopFileSystem.create(file);|
>
>     Appending stack trace that I found in datanode's log
>
>     |2015-10-3016:19:54,435INFO
>     org.apache.hadoop.hdfs.server.datanode.DataNode:ReceivingBP-1012136337-192.168.123.103-1411103100884:blk_1073742239_1421
>     src:/127.0.0.1:54160dest:/127.0.0.1:500102015-10-3016:19:54,435INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl:Appendingto
>     FinalizedReplica,blk_1073742239_1421,FINALIZED
>     getNumBytes()=812getBytesOnDisk()=812getVisibleLength()=812getVolume()=/Users/niranjan/hadoop/hdfs/datanode/current
>     getBlockFile()=/Users/niranjan/hadoop/hdfs/datanode/current/BP-1012136337-192.168.123.103-1411103100884/current/finalized/blk_1073742239
>     unlinked =false2015-10-3016:19:54,461INFO
>     org.apache.hadoop.hdfs.server.datanode.DataNode:ExceptionforBP-1012136337-192.168.123.103-1411103100884:blk_1073742239_1422
>     java.io.IOException:PrematureEOF from inputStream at
>     org.apache.hadoop.io.IOUtils.readFully(IOUtils.java:194)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doReadFully(PacketReceiver.java:213)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doRead(PacketReceiver.java:134)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.receiveNextPacket(PacketReceiver.java:109)at
>     org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receivePacket(BlockReceiver.java:435)at
>     org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receiveBlock(BlockReceiver.java:693)at
>     org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:569)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:115)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:68)at
>     org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:221)at
>     java.lang.Thread.run(Thread.java:745)|
>
>
>     It's not quite clear what is causing this exception. Also I'm
>     quite confused after reading various sources whether appending is
>     supported in HDFS or not. Let me know what I'm missing here
>
>     Regards,
>     Niranjan
>
>


Re: Exception while appending to an existing file in HDFS

Posted by ABHISHEK SINGH <23...@gmail.com>.
Hi Niranjan,

Try these tweaks in hdfs-site.xml

1) <property>
     <name>dfs.datanode.max.transfer.threads</name>
     <value>8192</value>
     <description>
         Specifies the maximum number of threads to use for transferring 
data
         in and out of the DN.
     </description>
</property>


<property>
         <name>dfs.socket.timeout</name>
         <value>20000</value>
     </property>

     <property>
         <name>dfs.datanode.socket.write.timeout</name>
         <value>20000</value>
     </property>


2) In the code part, try this implementatin if above fails.

     Configuration testConfig = new Configuration();
testConfig.set("fs.defaultFS", "hdfs://localhost:8020");
// deprecated key
// testConfig.set("dfs.socket.timeout", "20000");
testConfig.set("dfs.client.socket-timeout", "20000");
testConfig.set("dfs.datanode.socket.write.timeout", "20000");



This problem is witnessed in Hadoop version 2.2.0 to 2.5.1. Probable 
solution could be to either use  a lower idleTimeout or set higher 
socket timeouts in hadoop config.

This is an issue with configuration.

Looking forward to hear from you.


Thanks,
Abhishek Singh



On Sunday 01 November 2015 02:52 PM, Niranjan Subramanian wrote:
> Bumping this. Any idea? What's wrong here?
>
> On Fri, Oct 30, 2015 at 9:50 PM, Niranjan Subramanian 
> <niranjan@webaction.com <ma...@webaction.com>> wrote:
>
>     Hi guys,
>
>     I'm basically trying to append data to an already exisiting file
>     in HDFS. This is the exception I get
>
>     |03:49:54,456WARNorg.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run:628DataStreamerExceptionjava.lang.NullPointerExceptionat
>     com.google.protobuf.AbstractMessageLite$Builder.checkForNullValues(AbstractMessageLite.java:336)at
>     com.google.protobuf.AbstractMessageLite$Builder.addAll(AbstractMessageLite.java:323)at
>     org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$UpdatePipelineRequestProto$Builder.addAllStorageIDs(ClientNamenodeProtocolProtos.java)at
>     org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.updatePipeline(ClientNamenodeProtocolTranslatorPB.java:842)at
>     org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.setupPipelineForAppendOrRecovery(DFSOutputStream.java:1238)at
>     org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:532)|
>
>     My replication factor is 1. I'm using 2.5.0 of Apache's Hadoop
>     distribution. This is the code snippet which I'm using for
>     creating a file if it doesn't exist or create in append mode if it
>     exists
>
>     |Stringurl =getHadoopUrl()+fileName;Pathfile
>     =newPath(url);try{if(append){if(hadoopFileSystem.exists(file))fsDataOutputStream
>     =hadoopFileSystem.append(file);elsefsDataOutputStream
>     =hadoopFileSystem.create(file);}elsefsDataOutputStream
>     =hadoopFileSystem.create(file);|
>
>     Appending stack trace that I found in datanode's log
>
>     |2015-10-3016:19:54,435INFO
>     org.apache.hadoop.hdfs.server.datanode.DataNode:ReceivingBP-1012136337-192.168.123.103-1411103100884:blk_1073742239_1421
>     src:/127.0.0.1:54160dest:/127.0.0.1:500102015-10-3016:19:54,435INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl:Appendingto
>     FinalizedReplica,blk_1073742239_1421,FINALIZED
>     getNumBytes()=812getBytesOnDisk()=812getVisibleLength()=812getVolume()=/Users/niranjan/hadoop/hdfs/datanode/current
>     getBlockFile()=/Users/niranjan/hadoop/hdfs/datanode/current/BP-1012136337-192.168.123.103-1411103100884/current/finalized/blk_1073742239
>     unlinked =false2015-10-3016:19:54,461INFO
>     org.apache.hadoop.hdfs.server.datanode.DataNode:ExceptionforBP-1012136337-192.168.123.103-1411103100884:blk_1073742239_1422
>     java.io.IOException:PrematureEOF from inputStream at
>     org.apache.hadoop.io.IOUtils.readFully(IOUtils.java:194)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doReadFully(PacketReceiver.java:213)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doRead(PacketReceiver.java:134)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.receiveNextPacket(PacketReceiver.java:109)at
>     org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receivePacket(BlockReceiver.java:435)at
>     org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receiveBlock(BlockReceiver.java:693)at
>     org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:569)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:115)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:68)at
>     org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:221)at
>     java.lang.Thread.run(Thread.java:745)|
>
>
>     It's not quite clear what is causing this exception. Also I'm
>     quite confused after reading various sources whether appending is
>     supported in HDFS or not. Let me know what I'm missing here
>
>     Regards,
>     Niranjan
>
>


Re: Exception while appending to an existing file in HDFS

Posted by ABHISHEK SINGH <23...@gmail.com>.
Hi Niranjan,

Try these tweaks in hdfs-site.xml

1) <property>
     <name>dfs.datanode.max.transfer.threads</name>
     <value>8192</value>
     <description>
         Specifies the maximum number of threads to use for transferring 
data
         in and out of the DN.
     </description>
</property>


<property>
         <name>dfs.socket.timeout</name>
         <value>20000</value>
     </property>

     <property>
         <name>dfs.datanode.socket.write.timeout</name>
         <value>20000</value>
     </property>


2) In the code part, try this implementatin if above fails.

     Configuration testConfig = new Configuration();
testConfig.set("fs.defaultFS", "hdfs://localhost:8020");
// deprecated key
// testConfig.set("dfs.socket.timeout", "20000");
testConfig.set("dfs.client.socket-timeout", "20000");
testConfig.set("dfs.datanode.socket.write.timeout", "20000");



This problem is witnessed in Hadoop version 2.2.0 to 2.5.1. Probable 
solution could be to either use  a lower idleTimeout or set higher 
socket timeouts in hadoop config.

This is an issue with configuration.

Looking forward to hear from you.


Thanks,
Abhishek Singh



On Sunday 01 November 2015 02:52 PM, Niranjan Subramanian wrote:
> Bumping this. Any idea? What's wrong here?
>
> On Fri, Oct 30, 2015 at 9:50 PM, Niranjan Subramanian 
> <niranjan@webaction.com <ma...@webaction.com>> wrote:
>
>     Hi guys,
>
>     I'm basically trying to append data to an already exisiting file
>     in HDFS. This is the exception I get
>
>     |03:49:54,456WARNorg.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run:628DataStreamerExceptionjava.lang.NullPointerExceptionat
>     com.google.protobuf.AbstractMessageLite$Builder.checkForNullValues(AbstractMessageLite.java:336)at
>     com.google.protobuf.AbstractMessageLite$Builder.addAll(AbstractMessageLite.java:323)at
>     org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$UpdatePipelineRequestProto$Builder.addAllStorageIDs(ClientNamenodeProtocolProtos.java)at
>     org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.updatePipeline(ClientNamenodeProtocolTranslatorPB.java:842)at
>     org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.setupPipelineForAppendOrRecovery(DFSOutputStream.java:1238)at
>     org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:532)|
>
>     My replication factor is 1. I'm using 2.5.0 of Apache's Hadoop
>     distribution. This is the code snippet which I'm using for
>     creating a file if it doesn't exist or create in append mode if it
>     exists
>
>     |Stringurl =getHadoopUrl()+fileName;Pathfile
>     =newPath(url);try{if(append){if(hadoopFileSystem.exists(file))fsDataOutputStream
>     =hadoopFileSystem.append(file);elsefsDataOutputStream
>     =hadoopFileSystem.create(file);}elsefsDataOutputStream
>     =hadoopFileSystem.create(file);|
>
>     Appending stack trace that I found in datanode's log
>
>     |2015-10-3016:19:54,435INFO
>     org.apache.hadoop.hdfs.server.datanode.DataNode:ReceivingBP-1012136337-192.168.123.103-1411103100884:blk_1073742239_1421
>     src:/127.0.0.1:54160dest:/127.0.0.1:500102015-10-3016:19:54,435INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl:Appendingto
>     FinalizedReplica,blk_1073742239_1421,FINALIZED
>     getNumBytes()=812getBytesOnDisk()=812getVisibleLength()=812getVolume()=/Users/niranjan/hadoop/hdfs/datanode/current
>     getBlockFile()=/Users/niranjan/hadoop/hdfs/datanode/current/BP-1012136337-192.168.123.103-1411103100884/current/finalized/blk_1073742239
>     unlinked =false2015-10-3016:19:54,461INFO
>     org.apache.hadoop.hdfs.server.datanode.DataNode:ExceptionforBP-1012136337-192.168.123.103-1411103100884:blk_1073742239_1422
>     java.io.IOException:PrematureEOF from inputStream at
>     org.apache.hadoop.io.IOUtils.readFully(IOUtils.java:194)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doReadFully(PacketReceiver.java:213)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doRead(PacketReceiver.java:134)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.receiveNextPacket(PacketReceiver.java:109)at
>     org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receivePacket(BlockReceiver.java:435)at
>     org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receiveBlock(BlockReceiver.java:693)at
>     org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:569)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:115)at
>     org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:68)at
>     org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:221)at
>     java.lang.Thread.run(Thread.java:745)|
>
>
>     It's not quite clear what is causing this exception. Also I'm
>     quite confused after reading various sources whether appending is
>     supported in HDFS or not. Let me know what I'm missing here
>
>     Regards,
>     Niranjan
>
>


Re: Exception while appending to an existing file in HDFS

Posted by Niranjan Subramanian <ni...@webaction.com>.
Bumping this. Any idea? What's wrong here?

On Fri, Oct 30, 2015 at 9:50 PM, Niranjan Subramanian <
niranjan@webaction.com> wrote:

> Hi guys,
>
> I'm basically trying to append data to an already exisiting file in HDFS.
> This is the exception I get
>
> 03:49:54,456WARN org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run:628 DataStreamer Exception
> java.lang.NullPointerException
> at com.google.protobuf.AbstractMessageLite$Builder.checkForNullValues(AbstractMessageLite.java:336)
> at com.google.protobuf.AbstractMessageLite$Builder.addAll(AbstractMessageLite.java:323)
> at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$UpdatePipelineRequestProto$Builder.addAllStorageIDs(ClientNamenodeProtocolProtos.java)
> at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.updatePipeline(ClientNamenodeProtocolTranslatorPB.java:842)
> at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.setupPipelineForAppendOrRecovery(DFSOutputStream.java:1238)
> at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:532)
>
> My replication factor is 1. I'm using 2.5.0 of Apache's Hadoop
> distribution. This is the code snippet which I'm using for creating a file
> if it doesn't exist or create in append mode if it exists
>
> String url = getHadoopUrl()+fileName;
>     Path file = new Path(url);
>     try {
>         if(append) {
>             if(hadoopFileSystem.exists(file))
>                 fsDataOutputStream = hadoopFileSystem.append(file);
>             else
>                 fsDataOutputStream = hadoopFileSystem.create(file);
>         }
>         else
>             fsDataOutputStream = hadoopFileSystem.create(file);
>
> Appending stack trace that I found in datanode's log
>
> 2015-10-30 16:19:54,435 INFO  org.apache.hadoop.hdfs.server.datanode.DataNode: Receiving BP-1012136337-192.168.123.103-1411103100884:blk_1073742239_1421 src: /127.0.0.1:54160  dest: /127.0.0.1:50010
>  2015-10-30 16:19:54,435 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Appending to FinalizedReplica, blk_1073742239_1421, FINALIZED
>  getNumBytes()     = 812
>  getBytesOnDisk()  = 812
>  getVisibleLength()= 812
>  getVolume()       = /Users/niranjan/hadoop/hdfs/datanode/current
>  getBlockFile()    = /Users/niranjan/hadoop/hdfs/datanode/current/BP-        1012136337-192.168.123.103-1411103100884/current/finalized/blk_1073742239
>  unlinked          =false2015-10-30 16:19:54,461 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Exception for BP-1012136337-192.168.123.103-1411103100884:blk_1073742239_1422
> java.io.IOException: Premature EOF from inputStream
>     at org.apache.hadoop.io.IOUtils.readFully(IOUtils.java:194)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doReadFully(PacketReceiver.java:213)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doRead(PacketReceiver.java:134)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.receiveNextPacket(PacketReceiver.java:109)
>     at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receivePacket(BlockReceiver.java:435)
>     at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receiveBlock(BlockReceiver.java:693)
>     at org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:569)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:115)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:68)
>     at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:221)
>     at java.lang.Thread.run(Thread.java:745)
>
>
> It's not quite clear what is causing this exception. Also I'm quite
> confused after reading various sources whether appending is supported in
> HDFS or not. Let me know what I'm missing here
>
> Regards,
> Niranjan
>

Re: Exception while appending to an existing file in HDFS

Posted by Niranjan Subramanian <ni...@webaction.com>.
Bumping this. Any idea? What's wrong here?

On Fri, Oct 30, 2015 at 9:50 PM, Niranjan Subramanian <
niranjan@webaction.com> wrote:

> Hi guys,
>
> I'm basically trying to append data to an already exisiting file in HDFS.
> This is the exception I get
>
> 03:49:54,456WARN org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run:628 DataStreamer Exception
> java.lang.NullPointerException
> at com.google.protobuf.AbstractMessageLite$Builder.checkForNullValues(AbstractMessageLite.java:336)
> at com.google.protobuf.AbstractMessageLite$Builder.addAll(AbstractMessageLite.java:323)
> at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$UpdatePipelineRequestProto$Builder.addAllStorageIDs(ClientNamenodeProtocolProtos.java)
> at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.updatePipeline(ClientNamenodeProtocolTranslatorPB.java:842)
> at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.setupPipelineForAppendOrRecovery(DFSOutputStream.java:1238)
> at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:532)
>
> My replication factor is 1. I'm using 2.5.0 of Apache's Hadoop
> distribution. This is the code snippet which I'm using for creating a file
> if it doesn't exist or create in append mode if it exists
>
> String url = getHadoopUrl()+fileName;
>     Path file = new Path(url);
>     try {
>         if(append) {
>             if(hadoopFileSystem.exists(file))
>                 fsDataOutputStream = hadoopFileSystem.append(file);
>             else
>                 fsDataOutputStream = hadoopFileSystem.create(file);
>         }
>         else
>             fsDataOutputStream = hadoopFileSystem.create(file);
>
> Appending stack trace that I found in datanode's log
>
> 2015-10-30 16:19:54,435 INFO  org.apache.hadoop.hdfs.server.datanode.DataNode: Receiving BP-1012136337-192.168.123.103-1411103100884:blk_1073742239_1421 src: /127.0.0.1:54160  dest: /127.0.0.1:50010
>  2015-10-30 16:19:54,435 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Appending to FinalizedReplica, blk_1073742239_1421, FINALIZED
>  getNumBytes()     = 812
>  getBytesOnDisk()  = 812
>  getVisibleLength()= 812
>  getVolume()       = /Users/niranjan/hadoop/hdfs/datanode/current
>  getBlockFile()    = /Users/niranjan/hadoop/hdfs/datanode/current/BP-        1012136337-192.168.123.103-1411103100884/current/finalized/blk_1073742239
>  unlinked          =false2015-10-30 16:19:54,461 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Exception for BP-1012136337-192.168.123.103-1411103100884:blk_1073742239_1422
> java.io.IOException: Premature EOF from inputStream
>     at org.apache.hadoop.io.IOUtils.readFully(IOUtils.java:194)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doReadFully(PacketReceiver.java:213)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doRead(PacketReceiver.java:134)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.receiveNextPacket(PacketReceiver.java:109)
>     at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receivePacket(BlockReceiver.java:435)
>     at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receiveBlock(BlockReceiver.java:693)
>     at org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:569)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:115)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:68)
>     at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:221)
>     at java.lang.Thread.run(Thread.java:745)
>
>
> It's not quite clear what is causing this exception. Also I'm quite
> confused after reading various sources whether appending is supported in
> HDFS or not. Let me know what I'm missing here
>
> Regards,
> Niranjan
>

Re: Exception while appending to an existing file in HDFS

Posted by Niranjan Subramanian <ni...@webaction.com>.
Bumping this. Any idea? What's wrong here?

On Fri, Oct 30, 2015 at 9:50 PM, Niranjan Subramanian <
niranjan@webaction.com> wrote:

> Hi guys,
>
> I'm basically trying to append data to an already exisiting file in HDFS.
> This is the exception I get
>
> 03:49:54,456WARN org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run:628 DataStreamer Exception
> java.lang.NullPointerException
> at com.google.protobuf.AbstractMessageLite$Builder.checkForNullValues(AbstractMessageLite.java:336)
> at com.google.protobuf.AbstractMessageLite$Builder.addAll(AbstractMessageLite.java:323)
> at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$UpdatePipelineRequestProto$Builder.addAllStorageIDs(ClientNamenodeProtocolProtos.java)
> at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.updatePipeline(ClientNamenodeProtocolTranslatorPB.java:842)
> at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.setupPipelineForAppendOrRecovery(DFSOutputStream.java:1238)
> at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:532)
>
> My replication factor is 1. I'm using 2.5.0 of Apache's Hadoop
> distribution. This is the code snippet which I'm using for creating a file
> if it doesn't exist or create in append mode if it exists
>
> String url = getHadoopUrl()+fileName;
>     Path file = new Path(url);
>     try {
>         if(append) {
>             if(hadoopFileSystem.exists(file))
>                 fsDataOutputStream = hadoopFileSystem.append(file);
>             else
>                 fsDataOutputStream = hadoopFileSystem.create(file);
>         }
>         else
>             fsDataOutputStream = hadoopFileSystem.create(file);
>
> Appending stack trace that I found in datanode's log
>
> 2015-10-30 16:19:54,435 INFO  org.apache.hadoop.hdfs.server.datanode.DataNode: Receiving BP-1012136337-192.168.123.103-1411103100884:blk_1073742239_1421 src: /127.0.0.1:54160  dest: /127.0.0.1:50010
>  2015-10-30 16:19:54,435 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Appending to FinalizedReplica, blk_1073742239_1421, FINALIZED
>  getNumBytes()     = 812
>  getBytesOnDisk()  = 812
>  getVisibleLength()= 812
>  getVolume()       = /Users/niranjan/hadoop/hdfs/datanode/current
>  getBlockFile()    = /Users/niranjan/hadoop/hdfs/datanode/current/BP-        1012136337-192.168.123.103-1411103100884/current/finalized/blk_1073742239
>  unlinked          =false2015-10-30 16:19:54,461 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Exception for BP-1012136337-192.168.123.103-1411103100884:blk_1073742239_1422
> java.io.IOException: Premature EOF from inputStream
>     at org.apache.hadoop.io.IOUtils.readFully(IOUtils.java:194)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doReadFully(PacketReceiver.java:213)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doRead(PacketReceiver.java:134)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.receiveNextPacket(PacketReceiver.java:109)
>     at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receivePacket(BlockReceiver.java:435)
>     at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receiveBlock(BlockReceiver.java:693)
>     at org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:569)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:115)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:68)
>     at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:221)
>     at java.lang.Thread.run(Thread.java:745)
>
>
> It's not quite clear what is causing this exception. Also I'm quite
> confused after reading various sources whether appending is supported in
> HDFS or not. Let me know what I'm missing here
>
> Regards,
> Niranjan
>

Re: Exception while appending to an existing file in HDFS

Posted by Niranjan Subramanian <ni...@webaction.com>.
Bumping this. Any idea? What's wrong here?

On Fri, Oct 30, 2015 at 9:50 PM, Niranjan Subramanian <
niranjan@webaction.com> wrote:

> Hi guys,
>
> I'm basically trying to append data to an already exisiting file in HDFS.
> This is the exception I get
>
> 03:49:54,456WARN org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run:628 DataStreamer Exception
> java.lang.NullPointerException
> at com.google.protobuf.AbstractMessageLite$Builder.checkForNullValues(AbstractMessageLite.java:336)
> at com.google.protobuf.AbstractMessageLite$Builder.addAll(AbstractMessageLite.java:323)
> at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$UpdatePipelineRequestProto$Builder.addAllStorageIDs(ClientNamenodeProtocolProtos.java)
> at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.updatePipeline(ClientNamenodeProtocolTranslatorPB.java:842)
> at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.setupPipelineForAppendOrRecovery(DFSOutputStream.java:1238)
> at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:532)
>
> My replication factor is 1. I'm using 2.5.0 of Apache's Hadoop
> distribution. This is the code snippet which I'm using for creating a file
> if it doesn't exist or create in append mode if it exists
>
> String url = getHadoopUrl()+fileName;
>     Path file = new Path(url);
>     try {
>         if(append) {
>             if(hadoopFileSystem.exists(file))
>                 fsDataOutputStream = hadoopFileSystem.append(file);
>             else
>                 fsDataOutputStream = hadoopFileSystem.create(file);
>         }
>         else
>             fsDataOutputStream = hadoopFileSystem.create(file);
>
> Appending stack trace that I found in datanode's log
>
> 2015-10-30 16:19:54,435 INFO  org.apache.hadoop.hdfs.server.datanode.DataNode: Receiving BP-1012136337-192.168.123.103-1411103100884:blk_1073742239_1421 src: /127.0.0.1:54160  dest: /127.0.0.1:50010
>  2015-10-30 16:19:54,435 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Appending to FinalizedReplica, blk_1073742239_1421, FINALIZED
>  getNumBytes()     = 812
>  getBytesOnDisk()  = 812
>  getVisibleLength()= 812
>  getVolume()       = /Users/niranjan/hadoop/hdfs/datanode/current
>  getBlockFile()    = /Users/niranjan/hadoop/hdfs/datanode/current/BP-        1012136337-192.168.123.103-1411103100884/current/finalized/blk_1073742239
>  unlinked          =false2015-10-30 16:19:54,461 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Exception for BP-1012136337-192.168.123.103-1411103100884:blk_1073742239_1422
> java.io.IOException: Premature EOF from inputStream
>     at org.apache.hadoop.io.IOUtils.readFully(IOUtils.java:194)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doReadFully(PacketReceiver.java:213)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doRead(PacketReceiver.java:134)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.receiveNextPacket(PacketReceiver.java:109)
>     at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receivePacket(BlockReceiver.java:435)
>     at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receiveBlock(BlockReceiver.java:693)
>     at org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:569)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:115)
>     at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:68)
>     at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:221)
>     at java.lang.Thread.run(Thread.java:745)
>
>
> It's not quite clear what is causing this exception. Also I'm quite
> confused after reading various sources whether appending is supported in
> HDFS or not. Let me know what I'm missing here
>
> Regards,
> Niranjan
>