2017-04-10 3 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} 

-標準入力からの入力を読み取ることです。

関連する問題