如果我们触发指向S3位置的Hive工作负载,我很想知道EMR集群将如何决定映射器的总数。在S3中,数据不是以块的形式存储的,那么哪个组件将创建Input splits并为其分配映射器?
有两种方法可以找到处理输入数据文件所需的映射器数量:
以下示例假定块大小为64 MB(S3或HDFS)。
示例1: HDFS上有100个文件,每个文件60 MB = 100个映射器。由于每个文件都小于块大小,因此映射器的数量等于文件的数量。
示例2:您在Amazon S3上有100个文件,每个文件80 MB = 200个映射器。每个数据文件都大于我们的块大小,这意味着每个文件需要两个映射器来处理该文件。100个文件* 2个映射器= 200个映射器
示例3:您有两个60 MB,一个120 MB和两个10 MB文件= 6个映射器。 60 MB的文件需要两个映射器,120 MB的文件需要两个映射器,而两个10 MB的文件每个都需要一个映射器。
13/01/13 01:12:30 INFO mapred.JobClient:保留时隙(ms)= 0后,所有人花费的总时间减少了等待。13/01/13 01:12:30 INFO mapred.JobClient:花费的总时间保留时隙(ms)= 0后等待的所有地图的总和(map map.JobClient:机架本地地图任务= 20 13/01/13 01:12:30 INFO mapred.JobClient:启动的地图任务= 2013/01/13 01:12:30 INFO映射。JobClient:SLOTS_MILLIS_REDUCES = 2329458