在hadoop中,我需要做什么才能拥有更小/更大的块?具体地说,我希望有更多的Map器,可以得到更小的数据。似乎我需要减小块大小,但我很困惑(我是hadoop新手)-我需要在将文件放到hdfs上时做些什么,还是需要指定与输入拆分大小相关的内容,或者两者都需要?我正在共享群集,因此无法执行全局设置,因此需要按作业进行设置(如果可能)?我正在从代码运行作业(稍后可能从oozie运行)。
cld4siwp1#
你真的不必减少块大小有更多的Map器,这将处理较少的数据量。您不必修改hdfs块大小( dfs.blocksize ),根据您的集群配置将其设为默认全局值。你可以用 mapreduce.input.fileinputformat.split.maxsize 属性的值小于块大小。将使用此值计算输入分割,并为每个计算的输入分割触发一个Map器。
dfs.blocksize
mapreduce.input.fileinputformat.split.maxsize
dwbf0jvd2#
Map程序运行的内容由输入拆分控制,完全取决于您如何指定它。hdfs块大小与此无关(除了大多数拆分器将块大小用作创建输入拆分的基本“块”以实现良好的数据局部性之外)。您可以编写自己的拆分器,它接受一个hdfs块并拆分为100个拆分,如果您愿意的话。还可以看看在hadoop中更改文件分割大小。既然如此,那么这样做的明智性(许多Map绘制者都有很小的裂口)是非常值得怀疑的。其他人都在尝试相反的方法(创建几个带有聚合拆分的Map器)。请参阅处理hadoop的小文件问题、小文件问题、amazon弹性mapreduce深入和最佳实践等。
2条答案
按热度按时间cld4siwp1#
你真的不必减少块大小有更多的Map器,这将处理较少的数据量。
您不必修改hdfs块大小(
dfs.blocksize
),根据您的集群配置将其设为默认全局值。你可以用
mapreduce.input.fileinputformat.split.maxsize
属性的值小于块大小。将使用此值计算输入分割,并为每个计算的输入分割触发一个Map器。
dwbf0jvd2#
Map程序运行的内容由输入拆分控制,完全取决于您如何指定它。hdfs块大小与此无关(除了大多数拆分器将块大小用作创建输入拆分的基本“块”以实现良好的数据局部性之外)。您可以编写自己的拆分器,它接受一个hdfs块并拆分为100个拆分,如果您愿意的话。还可以看看在hadoop中更改文件分割大小。
既然如此,那么这样做的明智性(许多Map绘制者都有很小的裂口)是非常值得怀疑的。其他人都在尝试相反的方法(创建几个带有聚合拆分的Map器)。请参阅处理hadoop的小文件问题、小文件问题、amazon弹性mapreduce深入和最佳实践等。