Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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执行字数统计时,是否可以在map函数中将数据拆分为单词?_Hadoop_Mapreduce - Fatal编程技术网

Hadoop 在使用MapReduce执行字数统计时,是否可以在map函数中将数据拆分为单词?

Hadoop 在使用MapReduce执行字数统计时,是否可以在map函数中将数据拆分为单词?,hadoop,mapreduce,Hadoop,Mapreduce,我已经找到了大量的文档和示例,在这些文档和示例中可以实现这一点,但我认为如果在map()函数中进行拆分,这将无法利用分布式系统的强大功能 我的分析正确吗?输入文件被拆分并分布在整个服务器集上,允许并行映射执行。您还希望利用映射输出的分区来实现必要的排序,以便将每个单词的计数收集到一个服务器(分区)上。通过这种方式,字的实际计数也是并行的。输入文件被分割并分布在整个服务器组中,允许并行映射执行。您还希望利用映射输出的分区来实现必要的排序,以便将每个单词的计数收集到一个服务器(分区)上。通过这种方式

我已经找到了大量的文档和示例,在这些文档和示例中可以实现这一点,但我认为如果在map()函数中进行拆分,这将无法利用分布式系统的强大功能


我的分析正确吗?

输入文件被拆分并分布在整个服务器集上,允许并行映射执行。您还希望利用映射输出的分区来实现必要的排序,以便将每个单词的计数收集到一个服务器(分区)上。通过这种方式,字的实际计数也是并行的。

输入文件被分割并分布在整个服务器组中,允许并行映射执行。您还希望利用映射输出的分区来实现必要的排序,以便将每个单词的计数收集到一个服务器(分区)上。通过这种方式,单词的实际计数也是平行的。

你是对的,在
映射器中有一些工作要做:对于提供给他的每一行,他必须将其拆分为单词,并将其作为键值对发出

但您还必须注意,并行化的第一步在
映射器启动之前就已经完成了:将输入文件拆分为行(示例中明确提到)。然后将这些包并行地分发到不同的
映射器

Mappers
实现“业务逻辑”,即将这些行拆分为单词。对我来说没关系。作为替代方案,您可以实现自己的(或者扩展
TextInputFormat
),它不仅可以逐行分割输入,还可以逐字分割输入。这也是有效的,但是您的
映射器必须做的唯一一件事是,获取输入值并将其作为输出键,同时将“1”作为输出值。你更喜欢后者吗

答案是:据我记忆所及,
InputFormat
不是并行运行的。但是
地图绘制者
会这样做。因此,对我来说,许多
映射者
负责标记化,而不是一个
InputFormat
类,这听起来更好

很好地描述了Hadoop和MapReduce的内部结构。在
输入拆分的段落中,他们说:

通过分块处理一个文件,我们允许多个映射任务在单个文件上并行操作。如果文件非常大,这可以通过并行性显著提高性能


我希望这是有帮助的:-)

你是对的,在
映射器中有一些工作要做:对于提供给他的每一行,他必须将其拆分为单词,并将其作为键值对发出

但您还必须注意,并行化的第一步在
映射器启动之前就已经完成了:将输入文件拆分为行(示例中明确提到)。然后将这些包并行地分发到不同的
映射器

Mappers
实现“业务逻辑”,即将这些行拆分为单词。对我来说没关系。作为替代方案,您可以实现自己的(或者扩展
TextInputFormat
),它不仅可以逐行分割输入,还可以逐字分割输入。这也是有效的,但是您的
映射器必须做的唯一一件事是,获取输入值并将其作为输出键,同时将“1”作为输出值。你更喜欢后者吗

答案是:据我记忆所及,
InputFormat
不是并行运行的。但是
地图绘制者
会这样做。因此,对我来说,许多
映射者
负责标记化,而不是一个
InputFormat
类,这听起来更好

很好地描述了Hadoop和MapReduce的内部结构。在
输入拆分的段落中,他们说:

通过分块处理一个文件,我们允许多个映射任务在单个文件上并行操作。如果文件非常大,这可以通过并行性显著提高性能


我希望这会有所帮助:-)

通过拆分,您的意思是将行标记为单词吗?如果是这样的话,为什么你认为这不能充分利用分布式系统的能力呢?这确实是我的意思。我的理解是,由于整个数据将在一个map()调用中读取,因此文本中的所有内容都将按顺序读取。因此,没有并行化的余地。如果Chris Gerkin在下面所说的话是这样的,那么整个文本实际上被预分割成多个段,这些段作为列表传递给map()函数,这是有意义的。分割是指将行标记为单词吗?如果是这样的话,为什么你认为这不能充分利用分布式系统的能力呢?这确实是我的意思。我的理解是,由于整个数据将在一个map()调用中读取,因此文本中的所有内容都将按顺序读取。因此,没有并行化的余地。如果Chris Gerkin在下面所说的是,整个文本实际上被预分割成多个片段,作为列表传递给map()函数,这是有道理的。我想我明白你的意思了。问题是,我正在查看wordcount示例,在调用map函数之前,没有显式拆分。这里是否有特定于RHadoop实现的东西?(附言:无论如何谢谢!)我现在只看了RHadoop一眼,但我认为它是Apache Hadoop的另一个发行版——或者至少是一个扩展。因此,我认为您将看到与Apache的Hadoop相同的标准行为:如果没有明确指定,Hadoop将始终使用TextInputFormat来生成InputSplit。我想我明白您的意思了。这个