I have shell script in HDFS
. I want to collect the logs for this script in HDFS only.
The contents of the script are below:
#!/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 }
The logs are not appending to the files. only the files are being created.
How can I get the files to have the result of the function to be appended in HDFS
Advertisement
Answer
The logs are not appending to the files. only the files are being created.
Because tee
is a linux command and does not work for files stored in HDFS.
Use -appendToFile
echo "`date +"%Y-%m-%d %H:%M:%S"` [ERROR] $message [Status] $status : failed" | hdfs dfs -appendToFile - ${failed_logs}
-
in place of srcfile
is to read the input from stdin.