[ 
https://issues.apache.org/jira/browse/HIVE-5857?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Adam Kawa updated HIVE-5857:
----------------------------

    Status: Patch Available  (was: In Progress)

> Reduce tasks do not work in uber mode in YARN
> ---------------------------------------------
>
>                 Key: HIVE-5857
>                 URL: https://issues.apache.org/jira/browse/HIVE-5857
>             Project: Hive
>          Issue Type: Bug
>          Components: Query Processor
>    Affects Versions: 0.13.1, 0.13.0, 0.12.0
>            Reporter: Adam Kawa
>            Assignee: Adam Kawa
>            Priority: Critical
>              Labels: plan, uber-jar, uberization, yarn
>             Fix For: 0.13.0
>
>         Attachments: HIVE-5857.1.patch.txt, HIVE-5857.2.patch
>
>
> A Hive query fails when it tries to run a reduce task in uber mode in YARN.
> The NullPointerException is thrown in the ExecReducer.configure method, 
> because the plan file (reduce.xml) for a reduce task is not found.
> The Utilities.getBaseWork method is expected to return BaseWork object, but 
> it returns NULL due to FileNotFoundException. 
> {code}
> // org.apache.hadoop.hive.ql.exec.Utilities
> public static BaseWork getBaseWork(Configuration conf, String name) {
>   ...
>     try {
>     ...
>       if (gWork == null) {
>         Path localPath;
>         if (ShimLoader.getHadoopShims().isLocalMode(conf)) {
>           localPath = path;
>         } else {
>           localPath = new Path(name);
>         }
>         InputStream in = new FileInputStream(localPath.toUri().getPath());
>         BaseWork ret = deserializePlan(in);
>         ....
>       }
>       return gWork;
>     } catch (FileNotFoundException fnf) {
>       // happens. e.g.: no reduce work.
>       LOG.debug("No plan file found: "+path);
>       return null;
>     } ...
> }
> {code}
> It happens because, the ShimLoader.getHadoopShims().isLocalMode(conf)) method 
> returns true, because immediately before running a reduce task, 
> org.apache.hadoop.mapred.LocalContainerLauncher changes its configuration to 
> local mode ("mapreduce.framework.name" is changed from" "yarn" to "local"). 
> On the other hand map tasks run successfully, because its configuration is 
> not changed and still remains "yarn".
> {code}
> // org.apache.hadoop.mapred.LocalContainerLauncher
> private void runSubtask(..) {
>   ...
>   conf.set(MRConfig.FRAMEWORK_NAME, MRConfig.LOCAL_FRAMEWORK_NAME);
>   conf.set(MRConfig.MASTER_ADDRESS, "local");  // bypass shuffle
>   ReduceTask reduce = (ReduceTask)task;
>   reduce.setConf(conf);          
>   reduce.run(conf, umbilical);
> }
> {code}
> A super quick fix could just an additional if-branch, where we check if we 
> run a reduce task in uber mode, and then look for a plan file in a different 
> location.
> *Java stacktrace*
> {code}
> 2013-11-20 00:50:56,862 INFO [uber-SubtaskRunner] 
> org.apache.hadoop.hive.ql.exec.Utilities: No plan file found: 
> hdfs://namenode.c.lon.spotify.net:54310/var/tmp/kawaa/hive_2013-11-20_00-50-43_888_3938384086824086680-2/-mr-10003/e3caacf6-15d6-4987-b186-d2906791b5b0/reduce.xml
> 2013-11-20 00:50:56,862 WARN [uber-SubtaskRunner] 
> org.apache.hadoop.mapred.LocalContainerLauncher: Exception running local 
> (uberized) 'child' : java.lang.RuntimeException: Error in configuring object
>       at 
> org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:109)
>       at 
> org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:75)
>       at 
> org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:133)
>       at 
> org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:427)
>       at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:408)
>       at 
> org.apache.hadoop.mapred.LocalContainerLauncher$SubtaskRunner.runSubtask(LocalContainerLauncher.java:340)
>       at 
> org.apache.hadoop.mapred.LocalContainerLauncher$SubtaskRunner.run(LocalContainerLauncher.java:225)
>       at java.lang.Thread.run(Thread.java:662)
> Caused by: java.lang.reflect.InvocationTargetException
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at 
> org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:106)
>       ... 7 more
> Caused by: java.lang.NullPointerException
>       at 
> org.apache.hadoop.hive.ql.exec.mr.ExecReducer.configure(ExecReducer.java:116)
>       ... 12 more
> 2013-11-20 00:50:56,862 INFO [uber-SubtaskRunner] 
> org.apache.hadoop.mapred.TaskAttemptListenerImpl: Status update from 
> attempt_1384392632998_34791_r_000000_0
> 2013-11-20 00:50:56,862 INFO [uber-SubtaskRunner] 
> org.apache.hadoop.mapred.TaskAttemptListenerImpl: Progress of TaskAttempt 
> attempt_1384392632998_34791_r_000000_0 is : 0.0
> 2013-11-20 00:50:56,862 INFO [uber-SubtaskRunner] 
> org.apache.hadoop.mapred.Task: Runnning cleanup for the task
> 2013-11-20 00:50:56,863 INFO [uber-SubtaskRunner] 
> org.apache.hadoop.mapred.TaskAttemptListenerImpl: Diagnostics report from 
> attempt_1384392632998_34791_r_000000_0: java.lang.RuntimeException: Error in 
> configuring object
>       at 
> org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:109)
>       at 
> org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:75)
>       at 
> org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:133)
>       at 
> org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:427)
>       at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:408)
>       at 
> org.apache.hadoop.mapred.LocalContainerLauncher$SubtaskRunner.runSubtask(LocalContainerLauncher.java:340)
>       at 
> org.apache.hadoop.mapred.LocalContainerLauncher$SubtaskRunner.run(LocalContainerLauncher.java:225)
>       at java.lang.Thread.run(Thread.java:662)
> Caused by: java.lang.reflect.InvocationTargetException
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at 
> org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:106)
>       ... 7 more
> Caused by: java.lang.NullPointerException
>       at 
> org.apache.hadoop.hive.ql.exec.mr.ExecReducer.configure(ExecReducer.java:116)
>       ... 12 more
> 2013-11-20 00:50:56,863 INFO [uber-SubtaskRunner] 
> org.apache.hadoop.mapred.LocalContainerLauncher: Processing the event 
> EventType: CONTAINER_REMOTE_CLEANUP for container 
> container_1384392632998_34791_01_000001 taskAttempt 
> attempt_1384392632998_34791_m_000000_0
> 2013-11-20 00:50:56,863 INFO [AsyncDispatcher event handler] 
> org.apache.hadoop.mapreduce.v2.app.job.impl.TaskAttemptImpl: Diagnostics 
> report from attempt_1384392632998_34791_r_000000_0: 
> java.lang.RuntimeException: Error in configuring object
>       at 
> org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:109)
>       at 
> org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:75)
>       at 
> org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:133)
>       at 
> org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:427)
>       at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:408)
>       at 
> org.apache.hadoop.mapred.LocalContainerLauncher$SubtaskRunner.runSubtask(LocalContainerLauncher.java:340)
>       at 
> org.apache.hadoop.mapred.LocalContainerLauncher$SubtaskRunner.run(LocalContainerLauncher.java:225)
>       at java.lang.Thread.run(Thread.java:662)
> Caused by: java.lang.reflect.InvocationTargetException
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at 
> org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:106)
>       ... 7 more
> Caused by: java.lang.NullPointerException
>       at 
> org.apache.hadoop.hive.ql.exec.mr.ExecReducer.configure(ExecReducer.java:116)
>       ... 12 more
> {code}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to