在流式Hadoop程序中获取输入文件名
我在用Java写程序的时候,可以通过FileSplit找到输入文件的名字。
那么在用Python写程序时(使用流式处理),有没有类似的方法呢?
我在Apache的Hadoop流式处理文档中找到了以下内容:
请查看配置参数。在执行流式作业时,“mapred”参数的名称会被转换。点(.)会变成下划线(_)。例如,mapred.job.id会变成mapred_job_id,mapred.jar会变成mapred_jar。在你的代码中,使用带下划线的参数名称。
但是我还是不太明白怎么在我的mapper里面使用这些。
任何帮助都非常感谢。
谢谢
3 个回答
0
Hadoop 2.x的新环境变量叫做MAPREDUCE_MAP_INPUT_FILE。
6
通过解析 mapreduce_map_input_file
(新的)或者 (已弃用)这个环境变量,你可以获取到映射输入文件的名称。map_input_file
注意:
这两个环境变量是 区分大小写 的,也就是说,所有字母都必须是 小写。
8
根据《Hadoop:权威指南》的内容,
Hadoop会把作业的配置参数当作环境变量来使用,特别是在Streaming程序中。不过,它会把那些不是字母或数字的字符替换成下划线,这样可以确保这些名字是有效的。下面这个Python表达式展示了如何在Python Streaming脚本中获取mapred.job.id这个属性的值:
os.environ["mapred_job_id"]
你还可以通过在启动Streaming程序时使用-cmdenv选项来设置环境变量,这个选项需要为你想设置的每个变量单独使用一次。例如,下面的命令设置了一个名为MAGIC_PARAMETER的环境变量:
-cmdenv MAGIC_PARAMETER=abracadabra