大数据Hadoop第一代。我是Apache Hadoop的新手。我只是怀疑可能是我的问题无关紧要。
问题:字数统计问题(干调试)。
示例:
文件名:test.txt
文件大小:120 MB
默认块大小:64 MB
文件内容:
Hello StackOverflow
Hi StackOverflow
Hola StackOverflow
Mushi Mushi StackOverflow
.....
.....
.....
Mushi Mushi StackOverflow
块数为:2(64 MB + 56 MB)
第1组包含:
Hello StackOverflow
Hi StackOverflow
Hola StackOverflow
Mushi Mus
第2栏包含:
hi StackOverflow
.....
.....
.....
Mushi Mushi StackOverflow
注意:这里Mushi字在块1和块2之间分裂,因为在单词“Mus”块大小变为64 MB时,剩余字“hi”进入块2。
现在我的问题是: Q1)是否可能出现这种情况?
Q2)如果不是为什么?
Q3)如果是,那么单词计数输出是什么。
Q4)两个块的Mapper输出是什么。
答案 0 :(得分:0)
MapReduce框架适用于 InputSplit ,而非 HDFS阻止。
请查看以下SE帖子,以便更好地了解InputSplit&给定文件的映射器数量。
How does Hadoop process records split across block boundaries?
关于你的问题:
Q1)是否可能出现这种情况?
是。可能的。
Q3)如果是,那么单词计数输出是什么。
Block-2中的数据将复制到正在处理InputSplit的Mapper节点上。
更新
关于评论中的其他查询,请查看Hadoop权威指南中的以下行:
FileInputFormats定义的逻辑记录通常不能完全适合HDFS块。例如,a TextInputFormat的逻辑记录是行,它们通常会越过HDFS边界。这没有 关注你的程序的功能 - 例如,线路不会被遗漏或损坏 - 但值得了解 因为它确实意味着数据本地映射(即,与输入数据在同一主机上运行的映射) 将执行一些远程读取。这导致的轻微开销通常不显着。
如果没有远程读取,则您的HDFS块在Mapper节点中是InputSplit。如果记录跨越Mapper节点的边界,则远程读取将数据提取到第一个Mapper节点,其中存在大部分数据。