Hi,

Thank you for replaying the experiments.

I launched a job through hive with default TextInputFormat.
The job is TPC-H Q1 query, which is a simple selection query for lineitem table.
The each size of data (data01...data14) is about 300GB, so about
4.2TB(=300GB*14) in total.

I really appreciate your help.

Regards,
Hiroyuki


On Wed, Sep 12, 2012 at 2:47 PM, Hemanth Yamijala
<yhema...@thoughtworks.com> wrote:
> Hi,
>
> I tried a similar experiment as yours but couldn't replicate the issue.
>
> I generated 64 MB files and added them to my DFS - one file from every
> machine, with a replication factor of 1,  like you did. My block size was
> 64MB. I verified the blocks were located on the same machine as where I
> added them from.
>
> Then, I launched a wordcount (without the min split size config). As
> expected, it created 8 maps, and I could verify that it ran all the tasks as
> data local - i.e. every task read off its own datanode. From the launch
> times of the tasks, I could roughly feel that this scheduling behaviour was
> independent of the order in which the tasks were launched. This behaviour
> was retained even with the min split size config.
>
> Could you share the size of input you generated (i.e the size of
> data01..data14) ? Also, what job are you running - specifically what is the
> input format ?
>
> BTW, this wiki entry: http://wiki.apache.org/hadoop/HowManyMapsAndReduces
> talks a little bit about how the maps are created.
>
> Thanks
> Hemanth
>
> On Wed, Sep 12, 2012 at 7:49 AM, Hiroyuki Yamada <mogwa...@gmail.com> wrote:
>>
>> I figured out the cause.
>> HDFS block size is 128MB, but
>> I specify mapred.min.split.size as 512MB,
>> and data local I/O processing goes wrong for some reason.
>> When I remove the mapred.min.split.size configuration,
>> tasktrackers pick data-local tasks.
>> Why does it happen ?
>>
>> It seems like a bug.
>> Split is a logical container of blocks,
>> so nothing is wrong logically.
>>
>> On Wed, Sep 12, 2012 at 1:20 AM, Hiroyuki Yamada <mogwa...@gmail.com>
>> wrote:
>> > Hi, thank you for the comment.
>> >
>> >> Task assignment takes data locality into account first and not block
>> >> sequence.
>> >
>> > Does it work like that when replica factor is set to 1 ?
>> >
>> > I just had a experiment to check the behavior.
>> > There are 14 nodes (node01 to node14) and there are 14 datanodes and
>> > 14 tasktrackers working.
>> > I first created a data to be processed in each node (say data01 to
>> > data14),
>> > and I put the each data to the hdfs from each node (at /data
>> > directory. /data/data01, ... /data/data14).
>> > Replica factor is set to 1, so according to the default block placement
>> > policy,
>> > each data is stored at local node. (data01 is stored at node01, data02
>> > is stored at node02 and so on)
>> > In that setting, I launched a job that processes the /data and
>> > what happened is that tasktrackers read from data01 to data14
>> > sequentially,
>> > which means tasktrackers first take all data from node01 and then
>> > node02 and then node03 and so on.
>> >
>> > If tasktracker takes data locality into account as you say,
>> > each tasktracker should take the local task(data). (tasktrackers at
>> > node02 should take data02 blocks if there is any)
>> > But, it didn't work like that.
>> > What this is happening ?
>> >
>> > Is there any documents about this ?
>> > What part of the source code is doing that ?
>> >
>> > Regards,
>> > Hiroyuki
>> >
>> > On Tue, Sep 11, 2012 at 11:27 PM, Hemanth Yamijala
>> > <yhema...@thoughtworks.com> wrote:
>> >> Hi,
>> >>
>> >> Task assignment takes data locality into account first and not block
>> >> sequence. In hadoop, tasktrackers ask the jobtracker to be assigned
>> >> tasks.
>> >> When such a request comes to the jobtracker, it will try to look for an
>> >> unassigned task which needs data that is close to the tasktracker and
>> >> will
>> >> assign it.
>> >>
>> >> Thanks
>> >> Hemanth
>> >>
>> >>
>> >> On Tue, Sep 11, 2012 at 6:31 PM, Hiroyuki Yamada <mogwa...@gmail.com>
>> >> wrote:
>> >>>
>> >>> Hi,
>> >>>
>> >>> I want to make sure my understanding about task assignment in hadoop
>> >>> is correct or not.
>> >>>
>> >>> When scanning a file with multiple tasktrackers,
>> >>> I am wondering how a task is assigned to each tasktracker .
>> >>> Is it based on the block sequence or data locality ?
>> >>>
>> >>> Let me explain my question by example.
>> >>> There is a file which composed of 10 blocks (block1 to block10), and
>> >>> block1 is the beginning of the file and block10 is the tail of the
>> >>> file.
>> >>> When scanning the file with 3 tasktrackers (tt1 to tt3),
>> >>> I am wondering if
>> >>> task assignment is based on the block sequence like
>> >>> first tt1 takes block1 and tt2 takes block2 and tt3 takes block3 and
>> >>> tt1 takes block4 and so on
>> >>> or
>> >>> task assignment is based on the task(data) locality like
>> >>> first tt1 takes block2(because it's located in the local) and tt2
>> >>> takes block1 (because it's located in the local) and
>> >>> tt3 takes block 4(because it's located in the local) and so on.
>> >>>
>> >>> As far as I experienced and the definitive guide book says,
>> >>> I think that the first case is the task assignment strategy.
>> >>> (and if there are many replicas, closest one is picked.)
>> >>>
>> >>> Is this right ?
>> >>>
>> >>> If this is right, is there any way to do like the second case
>> >>> with the current implementation ?
>> >>>
>> >>> Thanks,
>> >>>
>> >>> Hiroyuki
>> >>
>> >>
>
>

Reply via email to