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