机器有20台左右
机器有20台左右
reducer数是吗?这个看你干什么了,如果shuffle数据是均匀的那20个就够,如果不均匀多少个都没用
@青牛 跑MapReduce的时候不是有可以设置job数量的地方的吗?
@ling775000 你说的是一个大任务分成几部小任务去跑吗?
@青牛 可是上上条你说的reduce数,均匀的话20个就够了,对此我有个疑问就是这个reduce数不是shuffle的数据数据进行patient分区,决定reduce数吗?意味着有多少key种类就有多少个分区吧? 那2T左右的数据,设置20个就够了怎么理解呢?
设置了reduce为20就是有20个patient分区。数据不倾斜并且集群资源允许的情况设置越多的reducer数越快
@青牛 那我对reduce数的理解就shuffle的时候数据进行patient分区,决定reduce数,意味着有多少个key种类就有多少个reduce数,这么理解,对吗?
@青牛 还是说我理解的只是patition的总数,也就是reduce的总数,而你说的20就够了,是指reduce task的并行度?
partition是可以自定义的,不自定义就默认按key的hash去分,比如你的reducer数量设置为20就按key hbase去分20份key,map output的时候就把每份数据输出0到19个partition分区中,然后20个reducer每个reducer去读自己partition文件的数据。
你要先理解这个shuffle的流程。默认情况下设置多个reducer数就会有多少个partition分区。也就是reducer任务的并行度。
@青牛 恩恩 理解了,原来我理解的是reduce总数,不是并行度,我还想问个问题就是每个map任务到reduce任务,执行时间大概是多久呢?比如一个传统的Wordcount,并行度中之一的map到reduce端执行的时间。
@ling775000 这个看你map输出的数据量了,拉取这个map的数据的reducer需要多长时间从map端把数据读过来。一般reducer的前33%进度都是在shuffle数据。少就快多就慢呗。再少就算是1条也至少有几秒种的时间为reducer做准备吧,比如这个reducer任务被创建起来也要时间吧。