通过Hadoop streaming写Mapreduce程序时,会遇到同时处理多个输入文件或者目录的的需求,那么如何在map程序中知道这一条内容到底来自哪个文件?
其实hadoop已经给留了解决方法:在map端获取环境变量mapreduce_map_input_file,即为本次的输入文件。
sh脚本中:
py文件中判断目录:
其实hadoop已经给留了解决方法:在map端获取环境变量mapreduce_map_input_file,即为本次的输入文件。
sh脚本中:
-input ${hdfs_input_path} \
-input ${hdfs_input_path_user} \
py文件中判断目录:
def mapper():
filepath = os.environ.get('mapreduce_map_input_file')
filename = os.path.split(filepath)[0]
for line in sys.stdin:
if filename == 'hdfs://hadoop/user/hdfs/merge_test':
pass
if filename == 'hdfs://hadoop/user/hdfs/file_test':
pass
注意:hdfs://hadoop是集群的名字,if判断路径的时候需要写上。
def mapper():
filepath = os.environ.get('mapreduce_map_input_file')
filename = os.path.split(filepath)[-1]
for line in sys.stdin:
if filename == 'file_name1':
pass
if filename == 'file_name2':
pass