写Mapreduce程序时,常常会有同时处理多个输入文件的的需求,那么如何在map程序中方便的知道这一条record到底来自哪个文件呢?如果数据源是可控的,我们尚可以通过字段的个数等来判断,然而这不是一个优雅的方法,其实hadoop已经给了留了解决方法:在map端获取环境变量map_input_file(0.21.x的版本分支中是mapreduce_map_input_file)即为本次的输入文件。
以笔者使用的hadoop streaming + python环境为例:
输入文件有两个:
-input "/home/hadoop/file1"
-input "/home/hadoop/file2"
在mapper文件中:
if 'file1' in os.getenv('map_input_file'):
//文件1处理逻辑
if 'file2' in os.getenv('map_input_file'):
//文件2处理逻辑