2017-04-10 1 views
0

쉘 스크립트가 HDFS입니다. HDFS에서만이 스크립트의 로그를 수집하려고합니다. 스크립트의쉘 스크립트의 로그 파일을 HDFS에 저장하는 방법

내용은 다음과 같습니다 로그 파일에 추가되지 않습니다

#!/bin/bash 

TIMESTAMP=`date "+%Y-%m-%d"` 

hdfs dfs -touchz /user/$USER/logs/`date "+%Y-%m-%d"`/${TIMESTAMP}.success_log 

hdfs dfs -touchz /user/$USER/logs/`date "+%Y-%m-%d"`/${TIMESTAMP}.fail_log 

success_logs=/user/$USER/logs/`date "+%Y-%m-%d"`/${TIMESTAMP}.success_log 

failed_logs=/user/$USER/logs/`date "+%Y-%m-%d"`/${TIMESTAMP}.fail_log 


function log_status 
{ 
    status=$1 
    message=$2 
    if [ "$status" -ne 0 ]; then 
      echo "`date +\"%Y-%m-%d %H:%M:%S\"` [ERROR] $message [Status] $status : failed" | tee -a "${failed_logs}" 
      #echo "Please find the attached log file for more details" 
      exit 1 
      else 
       echo "`date +\"%Y-%m-%d %H:%M:%S\"` [INFO] $message [Status] $status : success" | tee -a "${success_logs}" 
      fi 
} 

. 파일 만 생성됩니다.

어떻게 파일이 로그 파일에 추가되지 않습니다 HDFS

+0

로컬로 먼저 쓰고 HDFS로 업로드하는 것이 어떨까요? – franklinsijo

+0

이것은 바로 쉘 액션이 될 것입니까? 이 경우 로컬 파일 시스템에 로그 파일을 작성할 수 있습니다. – franklinsijo

+0

예, 로컬 파일 시스템입니다. 그렇지 않으면 예외가 발생합니까? 어쨌든 HDFS에 파일을 추가하는 솔루션을 제공 할 것입니다. 최종 통화는 할 수 있습니다. 로컬에 로그를 작성하고 마지막에 HDFS에 업로드하거나 HDFS에서 직접 로그 파일에 추가 할 수 있습니다. 나는 첫번째를 선호한다. – franklinsijo

답변

0

에 추가되는 함수의 결과를 얻을 수 있습니다. 파일 만 이 생성됩니다.

tee은 Linux 명령이며 HDFS에 저장된 파일에는 작동하지 않으므로. srcfile 대신에

사용 -appendToFile

echo "`date +\"%Y-%m-%d %H:%M:%S\"` [ERROR] $message [Status] $status : failed" | hdfs dfs -appendToFile - ${failed_logs} 

-은 표준 입력에서 입력을 읽는 것입니다.

관련 문제