我有一个本地执行命令的函数[1],但是我用函数hdfs dfs -cat /user/xubuntu/digests/output1-1444497943/part-m-00000.digest
调用这个命令,在stdout
中得到正确的输出,在stderr
中得到log4j数据。我找不到执行是否成功运行,因为在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]标准输出和标准输出
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'
Hadoop将INFO及以上级别的所有消息记录到控制台的stderr。你知道吗
如前所述here:
默认情况下,Hadoop将消息记录到Log4j。Log4j通过classpath上的Log4j.properties配置。此文件定义记录的内容和位置。对于应用程序,默认的根记录器是“INFO,console”,它将INFO及以上级别的所有消息记录到控制台的stderr。服务器登录到“INFO,DRFA”,它登录到每天滚动的文件。日志文件名为$HADOOP\u Log\u DIR/HADOOP-$HADOOP\u IDENT\u STRING-.Log。你知道吗
相关问题 更多 >
编程相关推荐