我有这个函数在本地执行命令[1],但是我用函数hdfs dfs -cat /user/xubuntu/digests/output1-1444497943/part-m-00000.digest
调用了这个命令,我在stdout
中得到了正确的输出,我得到了stderr
中的log4j数据{1}}。由于在stderr
中获取数据,我无法找到执行是否成功运行。如果执行成功,我为什么要在stderr
中获取数据?
[1]本地执行的功能。 def executeCommand(命令):
logging.debug("Executing: %s" % command)
if "JAVA_HOME" not in os.environ:
os.environ["JAVA_HOME"] = JAVA_HOME
logging.debug("command: %s" % command)
try:
process = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = process.communicate()
if len(err) > 0: # there is an exception
raise ValueError("Exception:\n" + err)
except ValueError as e:
return e.message
return out
[2]输出stdout和stderr
output in stdout: '{"mapreduce.file.input.name":"hdfs:\\/\\/hadoop-coc-1:9000\\/input1\\/b.txt","mapreduce.file.output.name":"\\/output1-1444497943\\/part-m-00000","mapreduce.digest":"1b344587f6c1398e7aaa59cd5f01b585"}'
output in stderr: '15/10/10 15:25:19 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable\n'
答案 0 :(得分:0)
Hadoop会将 INFO 及以上级别的所有邮件记录到控制台的stderr 。
如上所述here:
默认情况下,Hadoop会将消息记录到 Log4j 。 Log4j 是通过类路径上的 log4j.properties 配置的。此文件定义记录的内容和位置。 对于应用程序,默认根记录器是" INFO,console",它将INFO级别以上的所有消息记录到控制台的stderr 。服务器记录到" INFO,DRFA",它记录到每天滚动的文件。日志文件名为$ HADOOP_LOG_DIR / hadoop- $ HADOOP_IDENT_STRING-.log。