Thanks for the feedback, Johannes. 

Would it be possible for you to file a jira for the performance issue that you 
are seeing with logs? Please strip out necessary data to hide the customer 
info, etc. The logs that would be most useful are:
   - comparison logs of an MR job vs a Tez job showing the container launch 
slowness/delay 
   - Tez logs from a job submitted to a busy cluster vs a free cluster

To confirm, you are using 0.5.2? 

Also, some questions on the env/job runs if you can help answer them ( before I 
jump to any possible conclusions :) ) : 
   - was the performance difference in the case where you were running multiple 
jobs concurrently submitted to the same queue? ( Given that all jobs are 
submitted to the same queue, the question on capacity scheduler preemption is 
moot)
   - are all jobs running as the same user ( from a YARN perspective i.e. 
ignoring impersonation ) ?
   - When you mention that Tez was slow at launching containers, do you know 
whether the queue had sufficient resources to launch the new containers at the 
time this was observed? 
   - If the answer to the first question was a concurrency test, were 
containers being held up by other idle AMs and therefore starving out other AMs 
that were doing useful work? 
   - What was tez configured to in terms of how long it should hold on to 
containers and how many of them ( container.idle.release-timeout* , 
session.min.held-containers properties )?

thanks
ā€” Hitesh

On Feb 23, 2015, at 8:52 AM, Johannes Zillmann <jzillm...@googlemail.com> wrote:

> Ok, turned out that we calculated resources for MapReduce and Tez differently 
> and thus over-combined splits in Tez which lead to a sacrifice in the split 
> count!
> However, still MapReduce outperformed Tez in a lot of runs. After multiple 
> iterations over the issue (deployment at a customer we have limited access) 
> things look like that:
> 
> - customer has capacity scheduler configured (configuration attached, our 
> product uses the productA queue)
> - if the cluster is completely free of use, Tez outperforms MapReduce
> - when the cluster is in use, MapReduce seems to always outperform Tez
> 
> So questions is, is there some difference in how Tez is grabbing resources 
> from the capacity scheduler in difference to MapReduce ?
> Looking at the logs it looks like Tez is always very slow in starting the 
> containers where as MapReduce parallelizes very quickly.
> 
> Any thoughts on that ?
> 
> Johannes 
> 
> <capacity-scheduler.xml>
>> On 09 Feb 2015, at 19:24, Siddharth Seth <ss...@apache.org> wrote:
>> 
>> Johannes,
>> How many tasks end up running for this specific vertex ? Is it more than a 
>> single wave of tasks (number of containers available on the cluster?).
>> Tez ends up allocating already running containers depending on 
>> configuration. Tuning these may help - 
>> tez.am.container.reuse.locality.delay-allocation-millis - Increase this to a 
>> higher value, for re-use to be less aggressive (default is 250 (ms))
>> tez.am.container.reuse.rack-fallback.enabled - enable/disable rack fallback 
>> re-use
>> tez.am.container.reuse.non-local-fallback.enabled - enable/disable non-local 
>> re-use
>> 
>> You could try disabling container re-use completely to see if the situation 
>> improves.
>> Also - how many tasks are generated for MapReduce vs Tez ?
>> 
>> Thanks
>> - Sid
>> 
>> On Mon, Feb 9, 2015 at 8:18 AM, Johannes Zillmann <jzillm...@googlemail.com> 
>> wrote:
>> Hey guys,
>> 
>> have a question about data locality in Tez.
>> Same type of input and computation logic.
>> Map reduce data locality: 95 %
>> Tez data locality: 50 %
>> 
>> Having a custom InputInitializer where iā€™ doing like this:
>> 
>>        InputSplit[] splits = inputFormat.getSplits(conf, desiredSplits);
>> 
>>        List<Event> events = Lists.newArrayList();
>>        List<TaskLocationHint> locationHints = Lists.newArrayList();
>>        for (InputSplit split : splits) {
>>            
>> locationHints.add(TaskLocationHint.createTaskLocationHint(split.getLocations(),
>>  null));
>>        }
>>        VertexLocationHint locationHint = 
>> VertexLocationHint.create(locationHints);
>> 
>>        InputConfigureVertexTasksEvent configureVertexEvent = 
>> InputConfigureVertexTasksEvent.create(splits.size(), locationHint, 
>> InputSpecUpdate.getDefaultSinglePhysicalInputSpecUpdate());
>>        events.add(configureVertexEvent);
>>        for (TezSplit split : splits) {
>>          
>> events.add(InputDataInformationEvent.createWithSerializedPayload(events.size()
>>  - 1, ByteBuffer.wrap(split.toByteArray())));
>>       }
>> 
>> Any obvious flaw here ?
>> Or an explanation why data locality is worse ?
>> 
>> best
>> Johannes
>> 
> 

Reply via email to