我有一个2TB序列文件,我正在尝试使用Hadoop进行处理,该文件驻留在设置为使用本地(光泽)文件系统进行存储而不是HDFS的集群上。我的问题是,无论我尝试什么,当我使用这些数据作为输入运行map / reduce作业时,我总是被迫拥有大约66000个地图任务。这似乎对应于2TB / 66000 = ~32MB的块大小。每个map任务中的实际计算执行得非常快,但是与如此多的map任务相关的开销会大大减慢事情。
对于创建数据和所有后续作业的作业,我有dfs.block.size = 536870912和fs.local.block.size = 536870912(512MB)。我也找到了试着这样做的建议:
hadoop fs -D fs.local.block.size=536870912 -put local_name remote_location
制作一个包含较大块的新副本,我做了无用。我还在光泽上更改了文件的条带大小。似乎任何与块大小有关的参数都会被本地文件系统忽略。
我知道使用光泽而不是HDFS是hadoop的非传统用法,但这是我必须使用的。我想知道其他人是否有这方面的经验,或有任何想法尝试以外我所提到的。
如果有用,我正在使用cdh3u5。