You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hcatalog-commits@incubator.apache.org by kh...@apache.org on 2012/07/19 21:02:33 UTC

svn commit: r1363543 - in /incubator/hcatalog/branches/branch-0.4: CHANGES.txt src/java/org/apache/hcatalog/mapreduce/FileRecordWriterContainer.java

Author: khorgath
Date: Thu Jul 19 21:02:32 2012
New Revision: 1363543

URL: http://svn.apache.org/viewvc?rev=1363543&view=rev
Log:
HCATALOG-448 HCatStorer performance is 4x slower in HCat 0.4 than HCat 0.2 (rajesh.balamohan via khorgath)

Modified:
    incubator/hcatalog/branches/branch-0.4/CHANGES.txt
    incubator/hcatalog/branches/branch-0.4/src/java/org/apache/hcatalog/mapreduce/FileRecordWriterContainer.java

Modified: incubator/hcatalog/branches/branch-0.4/CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/hcatalog/branches/branch-0.4/CHANGES.txt?rev=1363543&r1=1363542&r2=1363543&view=diff
==============================================================================
--- incubator/hcatalog/branches/branch-0.4/CHANGES.txt (original)
+++ incubator/hcatalog/branches/branch-0.4/CHANGES.txt Thu Jul 19 21:02:32 2012
@@ -49,6 +49,8 @@ Trunk (unreleased changes)
   OPTIMIZATIONS
 
   BUG FIXES
+  HCAT-448 HCatStorer performance is 4x slower in HCat 0.4 than HCat 0.2 (rajesh.balamohan via khorgath)
+
   HCAT-437 HCatSchema's equals() implementation uses hashcode obtained from toString() method. (avandana)
 
   HCAT-438 HCatFieldSchema class does not have equals() method implementation (avandana)

Modified: incubator/hcatalog/branches/branch-0.4/src/java/org/apache/hcatalog/mapreduce/FileRecordWriterContainer.java
URL: http://svn.apache.org/viewvc/incubator/hcatalog/branches/branch-0.4/src/java/org/apache/hcatalog/mapreduce/FileRecordWriterContainer.java?rev=1363543&r1=1363542&r2=1363543&view=diff
==============================================================================
--- incubator/hcatalog/branches/branch-0.4/src/java/org/apache/hcatalog/mapreduce/FileRecordWriterContainer.java (original)
+++ incubator/hcatalog/branches/branch-0.4/src/java/org/apache/hcatalog/mapreduce/FileRecordWriterContainer.java Thu Jul 19 21:02:32 2012
@@ -64,6 +64,7 @@ class FileRecordWriterContainer extends 
     private final Map<String, org.apache.hadoop.mapred.OutputCommitter> baseDynamicCommitters;
     private final Map<String, org.apache.hadoop.mapred.TaskAttemptContext> dynamicContexts;
     private final Map<String, ObjectInspector> dynamicObjectInspectors;
+    private Map<String, OutputJobInfo> dynamicOutputJobInfo;
 
 
     private final List<Integer> partColsToDel;
@@ -112,6 +113,7 @@ class FileRecordWriterContainer extends 
             this.baseDynamicCommitters = null;
             this.dynamicContexts = null;
             this.dynamicObjectInspectors = null;
+            this.dynamicOutputJobInfo = null;
         }
         else {
             this.baseDynamicSerDe = new HashMap<String,SerDe>();
@@ -119,6 +121,7 @@ class FileRecordWriterContainer extends 
             this.baseDynamicCommitters = new HashMap<String, org.apache.hadoop.mapred.OutputCommitter>();
             this.dynamicContexts = new HashMap<String, org.apache.hadoop.mapred.TaskAttemptContext>();
             this.dynamicObjectInspectors = new HashMap<String, ObjectInspector>();
+            this.dynamicOutputJobInfo = new HashMap<String, OutputJobInfo>();
         }
     }
 
@@ -155,12 +158,10 @@ class FileRecordWriterContainer extends 
             InterruptedException {
 
         org.apache.hadoop.mapred.RecordWriter localWriter;
-        org.apache.hadoop.mapred.TaskAttemptContext localContext;
         ObjectInspector localObjectInspector;
         SerDe localSerDe;
         OutputJobInfo localJobInfo = null;
 
-
         if (dynamicPartitioningUsed){
             // calculate which writer to use from the remaining values - this needs to be done before we delete cols
             List<String> dynamicPartValues = new ArrayList<String>();
@@ -225,18 +226,18 @@ class FileRecordWriterContainer extends 
                 baseDynamicCommitters.put(dynKey,baseOutputCommitter);
                 dynamicContexts.put(dynKey,currTaskContext);
                 dynamicObjectInspectors.put(dynKey,InternalUtil.createStructObjectInspector(jobInfo.getOutputSchema()));
+                dynamicOutputJobInfo.put(dynKey, HCatOutputFormat.getJobInfo(dynamicContexts.get(dynKey)));
             }
-            localJobInfo = HCatOutputFormat.getJobInfo(dynamicContexts.get(dynKey));
+            
+            localJobInfo = dynamicOutputJobInfo.get(dynKey);
             localWriter = baseDynamicWriters.get(dynKey);
             localSerDe = baseDynamicSerDe.get(dynKey);
-            localContext = dynamicContexts.get(dynKey);
             localObjectInspector = dynamicObjectInspectors.get(dynKey);
         }
         else{
-            localJobInfo = HCatBaseOutputFormat.getJobInfo(context);
+            localJobInfo = jobInfo;
             localWriter = getBaseRecordWriter();
             localSerDe = serDe;
-            localContext = HCatMapRedUtil.createTaskAttemptContext(context);
             localObjectInspector = objectInspector;
         }