hadoop集群中的Mapreduce执行
我对Mapreduce的工作原理有点困惑。我读过一些文章,但没有得到正确的答案 情景: 我在HDFS上存储了一个大小为1 TB的文件(假设它存储在一个位置/user/input/)。复制为3,块大小为128 MB 现在,我想使用mapreduce分析这个1TB文件。因为块大小是128MB,所以我总共有8192个块hadoop集群中的Mapreduce执行,hadoop,mapreduce,Hadoop,Mapreduce,我对Mapreduce的工作原理有点困惑。我读过一些文章,但没有得到正确的答案 情景: 我在HDFS上存储了一个大小为1 TB的文件(假设它存储在一个位置/user/input/)。复制为3,块大小为128 MB 现在,我想使用mapreduce分析这个1TB文件。因为块大小是128MB,所以我总共有8192个块 8192个映射任务是否会在所有100个节点上生成,平均分配映射者的数量?或者它将仅在放置复制数据的节点上运行 要运行的映射程序的数量不取决于节点或块的数量或任何其他因素,它们只取决于输
8192个映射任务是否会在所有100个节点上生成,平均分配映射者的数量?或者它将仅在放置复制数据的节点上运行 要运行的映射程序的数量不取决于节点或块的数量或任何其他因素,它们只取决于输入拆分的总数。 在数据库上下文中,拆分可能对应于行的范围 现在,HDfS中的一个块可能是128 mb,而输入分割的大小是256 mb。在这种情况下,只有1个映射器将在这个覆盖2个块的输入分割上运行。 现在问题出现了,输入拆分是如何创建的 这些拆分由InputFormat类创建,该类包含负责创建拆分的getSplit和createrecordreader方法,如果要更改这些拆分的创建方式,可以重写这些方法 这些映射器作业是在集群的不同节点上启动的,但不能保证它会均匀分布。Mapreduce始终尝试将映射器作业分配给具有要处理的本地数据的节点。如果这是不可能的,它将把映射器作业交给具有最佳资源的节点 请注意,输入拆分不包含实际数据。他们有参考资料。这些存储位置有助于mapredUce分配作业 我建议你访问这个链接,它会给你一个关于纱线如何分配工作的印象。您也可以访问此网站以了解map reduce的内部工作
希望这能解决您的查询映射器的数量取决于输入拆分,而不是复制因子 请参阅下文,了解InputSplit的内部结构: 映射程序和还原程序的数量由Hadoop框架决定 有关更多详细信息,请参阅以下帖子: 为简单起见,假设HDFS块和InputSplit是相同的,没有跨多个数据节点的数据跨越
在您的情况下,1 TB文件处理需要8192映射。启动映射任务时,映射任务尝试在存在数据的节点上运行映射程序。8192块的1 TB文件可能在100节点上分布不均匀。如果它们均匀分布在100节点上,框架将在所有100节点上运行映射任务数据位置在选择数据节点时起着关键作用。感谢悉达多。以上解释消除了我的疑虑。谢谢拉宾德拉。很好的解释