Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
hadoop集群中的Mapreduce执行_Hadoop_Mapreduce - Fatal编程技术网

hadoop集群中的Mapreduce执行

hadoop集群中的Mapreduce执行,hadoop,mapreduce,Hadoop,Mapreduce,我对Mapreduce的工作原理有点困惑。我读过一些文章,但没有得到正确的答案 情景: 我在HDFS上存储了一个大小为1 TB的文件(假设它存储在一个位置/user/input/)。复制为3,块大小为128 MB 现在,我想使用mapreduce分析这个1TB文件。因为块大小是128MB,所以我总共有8192个块 8192个映射任务是否会在所有100个节点上生成,平均分配映射者的数量?或者它将仅在放置复制数据的节点上运行 要运行的映射程序的数量不取决于节点或块的数量或任何其他因素,它们只取决于输

我对Mapreduce的工作原理有点困惑。我读过一些文章,但没有得到正确的答案

情景:

我在HDFS上存储了一个大小为1 TB的文件(假设它存储在一个位置/user/input/)。复制为3,块大小为128 MB

现在,我想使用mapreduce分析这个1TB文件。因为块大小是128MB,所以我总共有8192个块


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节点上运行映射任务数据位置在选择数据节点时起着关键作用。

感谢悉达多。以上解释消除了我的疑虑。谢谢拉宾德拉。很好的解释