PageRenderTime 45ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/tags/release-0.1-rc2/hive/external/ql/src/java/org/apache/hadoop/hive/ql/plan/MapredLocalWork.java

#
Java | 271 lines | 183 code | 53 blank | 35 comment | 16 complexity | 4624db6571b29b7aa941cf151c1946fe MD5 | raw file
Possible License(s): Apache-2.0, BSD-3-Clause, JSON, CPL-1.0
  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. package org.apache.hadoop.hive.ql.plan;
  19. import java.io.File;
  20. import java.io.Serializable;
  21. import java.util.ArrayList;
  22. import java.util.Iterator;
  23. import java.util.LinkedHashMap;
  24. import java.util.List;
  25. import java.util.Map.Entry;
  26. import org.apache.hadoop.fs.Path;
  27. import org.apache.hadoop.hive.ql.exec.BucketMatcher;
  28. import org.apache.hadoop.hive.ql.exec.Operator;
  29. /**
  30. * MapredLocalWork.
  31. *
  32. */
  33. @Explain(displayName = "Map Reduce Local Work")
  34. public class MapredLocalWork implements Serializable {
  35. private static final long serialVersionUID = 1L;
  36. private LinkedHashMap<String, Operator<? extends Serializable>> aliasToWork;
  37. private LinkedHashMap<String, FetchWork> aliasToFetchWork;
  38. private boolean inputFileChangeSensitive;
  39. private BucketMapJoinContext bucketMapjoinContext;
  40. private String tmpFileURI;
  41. private String stageID;
  42. private List<Operator<? extends Serializable>> dummyParentOp ;
  43. public MapredLocalWork() {
  44. }
  45. public MapredLocalWork(
  46. final LinkedHashMap<String, Operator<? extends Serializable>> aliasToWork,
  47. final LinkedHashMap<String, FetchWork> aliasToFetchWork) {
  48. this.aliasToWork = aliasToWork;
  49. this.aliasToFetchWork = aliasToFetchWork;
  50. }
  51. public MapredLocalWork(MapredLocalWork clone){
  52. this.tmpFileURI = clone.tmpFileURI;
  53. this.inputFileChangeSensitive=clone.inputFileChangeSensitive;
  54. }
  55. public void setDummyParentOp(List<Operator<? extends Serializable>> op){
  56. this.dummyParentOp=op;
  57. }
  58. public List<Operator<? extends Serializable>> getDummyParentOp(){
  59. return this.dummyParentOp;
  60. }
  61. @Explain(displayName = "Alias -> Map Local Operator Tree")
  62. public LinkedHashMap<String, Operator<? extends Serializable>> getAliasToWork() {
  63. return aliasToWork;
  64. }
  65. public String getStageID() {
  66. return stageID;
  67. }
  68. public void setStageID(String stageID) {
  69. this.stageID = stageID;
  70. }
  71. public void setAliasToWork(
  72. final LinkedHashMap<String, Operator<? extends Serializable>> aliasToWork) {
  73. this.aliasToWork = aliasToWork;
  74. }
  75. /**
  76. * @return the aliasToFetchWork
  77. */
  78. @Explain(displayName = "Alias -> Map Local Tables")
  79. public LinkedHashMap<String, FetchWork> getAliasToFetchWork() {
  80. return aliasToFetchWork;
  81. }
  82. /**
  83. * @param aliasToFetchWork
  84. * the aliasToFetchWork to set
  85. */
  86. public void setAliasToFetchWork(
  87. final LinkedHashMap<String, FetchWork> aliasToFetchWork) {
  88. this.aliasToFetchWork = aliasToFetchWork;
  89. }
  90. public boolean getInputFileChangeSensitive() {
  91. return inputFileChangeSensitive;
  92. }
  93. public void setInputFileChangeSensitive(boolean inputFileChangeSensitive) {
  94. this.inputFileChangeSensitive = inputFileChangeSensitive;
  95. }
  96. public void deriveExplainAttributes() {
  97. if (bucketMapjoinContext != null) {
  98. bucketMapjoinContext.deriveBucketMapJoinMapping();
  99. }
  100. for (FetchWork fetchWork : aliasToFetchWork.values()) {
  101. if (fetchWork.getTblDesc() == null) {
  102. continue;
  103. }
  104. PlanUtils.configureTableJobPropertiesForStorageHandler(
  105. fetchWork.getTblDesc());
  106. }
  107. }
  108. @Explain(displayName = "Bucket Mapjoin Context", normalExplain = false)
  109. public BucketMapJoinContext getBucketMapjoinContext() {
  110. return bucketMapjoinContext;
  111. }
  112. public void setBucketMapjoinContext(BucketMapJoinContext bucketMapjoinContext) {
  113. this.bucketMapjoinContext = bucketMapjoinContext;
  114. }
  115. public void setTmpFileURI(String tmpFileURI) {
  116. this.tmpFileURI = tmpFileURI;
  117. }
  118. public String getTmpFileURI() {
  119. return tmpFileURI;
  120. }
  121. public static class BucketMapJoinContext implements Serializable {
  122. private static final long serialVersionUID = 1L;
  123. // used for bucket map join
  124. private LinkedHashMap<String, LinkedHashMap<String, ArrayList<String>>> aliasBucketFileNameMapping;
  125. private String mapJoinBigTableAlias;
  126. private Class<? extends BucketMatcher> bucketMatcherClass;
  127. private LinkedHashMap<String, LinkedHashMap<String, ArrayList<String>>> aliasBucketBaseFileNameMapping;
  128. private LinkedHashMap<String, Integer> bucketFileNameMapping;
  129. public void setMapJoinBigTableAlias(String bigTableAlias) {
  130. this.mapJoinBigTableAlias = bigTableAlias;
  131. }
  132. public void deriveBucketMapJoinMapping() {
  133. if (aliasBucketFileNameMapping != null) {
  134. Iterator<Entry<String, LinkedHashMap<String, ArrayList<String>>>> iter =
  135. aliasBucketFileNameMapping.entrySet().iterator();
  136. aliasBucketBaseFileNameMapping = new LinkedHashMap<String, LinkedHashMap<String, ArrayList<String>>>();
  137. while (iter.hasNext()) {
  138. Entry<String, LinkedHashMap<String, ArrayList<String>>> old = iter.next();
  139. LinkedHashMap<String, ArrayList<String>> newBucketBaseFileNameMapping = new LinkedHashMap<String, ArrayList<String>>();
  140. Iterator<Entry<String, ArrayList<String>>> oldAliasFileNameMappingIter = old.getValue().entrySet().iterator();
  141. while (oldAliasFileNameMappingIter.hasNext()) {
  142. //For a give table and its bucket full file path list, only keep the base file name (remove file path etc).
  143. //And put the new list into the new mapping.
  144. Entry<String, ArrayList<String>> oldTableBucketFileNames = oldAliasFileNameMappingIter.next();
  145. ArrayList<String> oldTableBucketNames = oldTableBucketFileNames.getValue();
  146. ArrayList<String> newTableBucketFileBaseName = new ArrayList<String> (oldTableBucketNames.size());
  147. //for each bucket file, only keep its base files and store into a new list.
  148. if (oldTableBucketNames != null) {
  149. for (String bucketFName : oldTableBucketNames) {
  150. newTableBucketFileBaseName.add(getBaseFileName(bucketFName));
  151. }
  152. }
  153. String bigTblBucketFileName = getBaseFileName(oldTableBucketFileNames.getKey());
  154. if(newBucketBaseFileNameMapping.containsKey(bigTblBucketFileName)) {
  155. String fullPath = oldTableBucketFileNames.getKey();
  156. String dir = getBaseFileName(fullPath.substring(0, fullPath.lastIndexOf(bigTblBucketFileName)));
  157. bigTblBucketFileName = dir + File.separator + bigTblBucketFileName;
  158. }
  159. //put the new mapping
  160. newBucketBaseFileNameMapping.put(bigTblBucketFileName, newTableBucketFileBaseName);
  161. }
  162. String tableAlias = old.getKey();
  163. aliasBucketBaseFileNameMapping.put(tableAlias, newBucketBaseFileNameMapping);
  164. }
  165. }
  166. }
  167. private String getBaseFileName (String path) {
  168. try {
  169. return ((new Path(path)).getName());
  170. } catch (Exception ex) {
  171. // This could be due to either URI syntax error or File constructor
  172. // illegal arg; we don't really care which one it is.
  173. return path;
  174. }
  175. }
  176. public String getMapJoinBigTableAlias() {
  177. return mapJoinBigTableAlias;
  178. }
  179. public Class<? extends BucketMatcher> getBucketMatcherClass() {
  180. return bucketMatcherClass;
  181. }
  182. public void setBucketMatcherClass(
  183. Class<? extends BucketMatcher> bucketMatcherClass) {
  184. this.bucketMatcherClass = bucketMatcherClass;
  185. }
  186. @Explain(displayName = "Alias Bucket File Name Mapping", normalExplain = false)
  187. public LinkedHashMap<String, LinkedHashMap<String, ArrayList<String>>> getAliasBucketFileNameMapping() {
  188. return aliasBucketFileNameMapping;
  189. }
  190. public void setAliasBucketFileNameMapping(
  191. LinkedHashMap<String, LinkedHashMap<String, ArrayList<String>>> aliasBucketFileNameMapping) {
  192. this.aliasBucketFileNameMapping = aliasBucketFileNameMapping;
  193. }
  194. @Override
  195. public String toString() {
  196. if (aliasBucketFileNameMapping != null) {
  197. return "Mapping:" + aliasBucketFileNameMapping.toString();
  198. } else {
  199. return "";
  200. }
  201. }
  202. @Explain(displayName = "Alias Bucket Base File Name Mapping", normalExplain = false)
  203. public LinkedHashMap<String, LinkedHashMap<String, ArrayList<String>>> getAliasBucketBaseFileNameMapping() {
  204. return aliasBucketBaseFileNameMapping;
  205. }
  206. public void setAliasBucketBaseFileNameMapping(
  207. LinkedHashMap<String, LinkedHashMap<String, ArrayList<String>>> aliasBucketBaseFileNameMapping) {
  208. this.aliasBucketBaseFileNameMapping = aliasBucketBaseFileNameMapping;
  209. }
  210. @Explain(displayName = "Alias Bucket Output File Name Mapping", normalExplain = false)
  211. public LinkedHashMap<String, Integer> getBucketFileNameMapping() {
  212. return bucketFileNameMapping;
  213. }
  214. public void setBucketFileNameMapping(LinkedHashMap<String, Integer> bucketFileNameMapping) {
  215. this.bucketFileNameMapping = bucketFileNameMapping;
  216. }
  217. }
  218. }