通常,hadoop输入拆分大小定义了处理数据的映射器(容器)的数量。
例如,如果文件为2GB(块大小为1GB,使用2个块来存储此文件),则该文件将存储在2个HDFS块中。但是,如果我将输入分割大小指定为2GB,则将分配1个映射器来处理此文件。如果我没有指定分割大小,则将分配两个映射器(每个块一个映射器)。
问题是 - 如果我的mapper jvm堆大小只有1GB而我使用输入分割大小为2GB会怎么样?我的映射器JVM会耗尽内存吗?总是将输入分割大小等于或小于mapper jvm堆大小是一个好习惯吗?
答案 0 :(得分:0)
一个输入拆分通常会有多个记录。您的映射器一次只能获得一条记录。因此,只要您的记录中包含的键或值不超过您的堆大小限制,您应该没问题。假设您的值是超出堆大小的字符串/文本,那么在执行映射器时您肯定会看到OutOfMemory错误。