我是新来Hadoop和刚刚安装Oracle的VirtualBox和hortonworks的沙盒。 我的话,下载最新版本的Hadoop和进口的jar文件到我的Java程序。 我复制一个样本单词计数程序,并创建了一个新的jar文件。 我运行这个jar文件使用沙箱的工作。 该单词计数按预期工作完全正常。 然而,在我的工作状态页面,我看到映射器的数量,我输入文件中被确定为28.我在输入文件中,我有以下行。
拉梅什在XXXXXXXXXX XX XX XXXXX学习XXXXXXXXX。
总映射器是如何确定的28个?
我加了下面一行到我wordcount.java程序来检查。
FileInputFormat.setMaxInputSplitSize(job, 2);
另外,我想知道,如果输入的文件只能包含两行。 (IE)的假设,如果我有一个输入文件,如下图所示。
ROW1,ROW2,ROW3,ROW4,ROW5,ROW6 ....... row20
我是否应该拆分输入文件分成20个不同的文件的每个只有2行?
这意味着,由于您的输入文件分割成在HDFS大约28件(块),你说28个地图任务是scheduled-但是,不是可以不共有28个平行的地图任务虽然。 并行将取决于你必须在你的集群插槽的数量。 我说的是在Apache的Hadoop的方面。 我不知道,如果霍顿作品没有拒绝修改本。
Hadoop的喜欢和大文件的工作,所以,你想你的输入文件拆分到20个不同的文件吗?
HDFS块和MapReduce分割2米不同的东西。 块是数据的物理分割而分割只是一个MR工作期间完成的逻辑划分。 它的职责InputFormat
从给定的一组数据创建的拆分,并根据拆分映射器的数量决定的数量。 当您使用setMaxInputSplitSize
,你否决这种行为,并给自己的分割大小。 但给人一种非常小的值setMaxInputSplitSize会矫枉过正,因为会有很多非常小的拆分,而你最终有很多不必要的地图任务。
其实我看不出有什么必要让你使用FileInputFormat.setMaxInputSplitSize(job, 2);
在您的WC程序。 此外,它看起来像你已经走错了2
在这里。 它不是在一个文件中的行数。 它是分割的大小,在long
,你想有你的MR工作。 你可以有任意数量的文件中的行,你会为你的MR投入使用。
这听起来好不好?