You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hive.apache.org by "Zhenxiao Luo (JIRA)" <ji...@apache.org> on 2014/01/30 21:38:09 UTC

[jira] [Created] (HIVE-6341) ORCFileWriter does not overwrite preempted task's final file

Zhenxiao Luo created HIVE-6341:
----------------------------------

             Summary: ORCFileWriter does not overwrite preempted task's final file
                 Key: HIVE-6341
                 URL: https://issues.apache.org/jira/browse/HIVE-6341
             Project: Hive
          Issue Type: Bug
          Components: File Formats
            Reporter: Zhenxiao Luo



Insert overwrite partition get "File already exists" exception, the problem is,

insert overwrite attemp0 creates and writes the final file, then it get preempted. (attempt0 did not cleanup its output final file), then attempt1 comes, attempt1 tries to write a final file, and found that file already existed, so throw the exception.

Here is the stacktrace:
Caused by: java.io.IOException: File already exists:s3n://netflix-dataoven-prod-users/hive/warehouse/miket.db/un_gps_group_info_v2/dateint=20140120/device_category=PS3/c49b3223-34f2-420d-a1d9-fa8164dcb7bb_000449
    at org.apache.hadoop.fs.s3native.NativeS3FileSystem.create_aroundBody0(NativeS3FileSystem.java:647)
    at org.apache.hadoop.fs.s3native.NativeS3FileSystem$AjcClosure1.run(NativeS3FileSystem.java:1)
    at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:149)
    at com.netflix.bdp.s3mper.listing.ConsistentListingAspect.metastoreUpdate(ConsistentListingAspect.java:197)
    at org.apache.hadoop.fs.s3native.NativeS3FileSystem.create(NativeS3FileSystem.java:646)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:557)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:538)
    at org.apache.hadoop.hive.ql.io.orc.WriterImpl.ensureWriter(WriterImpl.java:1320)
    at org.apache.hadoop.hive.ql.io.orc.WriterImpl.flushStripe(WriterImpl.java:1337)
    at org.apache.hadoop.hive.ql.io.orc.WriterImpl.checkMemory(WriterImpl.java:173)
    at org.apache.hadoop.hive.ql.io.orc.MemoryManager.notifyWriters(MemoryManager.java:162)
    at org.apache.hadoop.hive.ql.io.orc.MemoryManager.addedRow(MemoryManager.java:151)
    at org.apache.hadoop.hive.ql.io.orc.WriterImpl.addRow(WriterImpl.java:1475)
    at org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat$OrcRecordWriter.write(OrcOutputFormat.java:88)
    at org.apache.hadoop.hive.ql.exec.FileSinkOperator.processOp(FileSinkOperator.java:688)
    ... 12 more

It is ORCFileWriter does not overwrite that causes the problem:

1. org.apache.hadoop.hive.ql.io.orc.WriterImpl.ensureWriter
      rawWriter = fs.create(path, false, HDFS_BUFFER_SIZE,

2. org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat.getHiveRecordWriter
    final OutputStream outStream = Utilities.createCompressedStream(jc, fs
        .create(outPath), isCompressed);

3. org.apache.hadoop.io.SequenceFile.BlockCompressWriter.BlockCompressWriter
                 fs.create(name, true, bufferSize, replication, blockSize, progress),

In the latter 2 cases, fs.create is called with the parameter overwrite == true (overwrite defaults to true).

We should set overwrite = true in ORCWriterImpl to fix this.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)