티스토리 뷰
반응형
airflow 에서는 WebHdfsSensor 라는게 존재해서, api 를 통해 특정파일이 존재하는지 체크하고 loop 를 돌면서 체크하는 방법이 존재한다. 그렇다면 간단하게 쉘스크립트로 특정 파일이 생겼는지 확인하는 방법은 없을까? 결론부터 말하면 hadoop 명령어에 파일 존재여부를 테스트하는 명령어가 존재한다. 아래와 같이 명령하면 exit 코드가 0일 경우는 파일이 존재하지만, 그 이외에는 파일을 찾을수 없다는 의미가 된다. 하지만, 파일이 생성될때까지 sleep 하면서 기다리는 방법은 없을까?
hadoop fs -test -f <HDFS_파일경로>
hdfs 파일 생성여부 대기하기
위 방법을 응용하면, loop 를 돌리고 파일이 존재할때까지 sleep 을 주면서 주기적으로 체크하는것이 가능해진다.
이러면 특정 HDFS 경로에 .SUCCESS 파일이 생성되면 다음 로직을 실행하도록 대기를 거는것이 가능하다.
예를 들어, hdfs_sensor.sh 라는 쉘스크립트를 아래와 같은 만들어서 활용한다면 특정 파일이 생성될때까지 주기적으로 체크하면서 대기하는것이 가능하다. (체크중 파일이 생성되면 아래와 같이 SUCCESS 로 끝나고, 타임아웃 넘으면 FAILED 메시지를 남긴다)
$ sh hdfs_sensor.sh hdfs://myhadoop/user/gildong/export/sample/ymd=2023-02-02/.SUCCESS
[WAIT] INTERVAL 60 sec (1/10) : hdfs://myhadoop/user/gildong/export/sample/ymd=2023-02-02/.SUCCESS
[WAIT] INTERVAL 60 sec (2/10) : hdfs://myhadoop/user/gildong/export/sample/ymd=2023-02-02/.SUCCESS
[WAIT] INTERVAL 60 sec (3/10) : hdfs://myhadoop/user/gildong/export/sample/ymd=2023-02-02/.SUCCESS
[WAIT] INTERVAL 60 sec (4/10) : hdfs://myhadoop/user/gildong/export/sample/ymd=2023-02-02/.SUCCESS
[SUCCESS] FIle Exist : hdfs://myhadoop/user/gildong/export/sample/ymd=2023-02-02/.SUCCESS
- hdfs_sensor.sh
#!/bin/bash
# -----------------------------------
# HDFS 파일의 존재여부를 대기한다.
# ./hdfs_sensor.sh <HDFS_PATH> <TIMEOUT_SEC> <INTERVAL_SEC>
# -----------------------------------
HDFS_CHECK_OPTION=${HDFS_CHECK_OPTION:-"-f"}
INTERVAL_SEC=${3:-60}
TIMEOUT_SEC=${2:-$INTERVAL_SEC}
HDFS_PATH=$1
_LOOP_SIZE=$(expr ${TIMEOUT_SEC} / ${INTERVAL_SEC})
_CNT=0
# 체크할 HDFS 경로를 체크한다 (필수값)
if [ -z "$HDFS_PATH" ]; then
echo "[ERROR] $0 <HDFS_PATH> <TIMEOUT_SEC> <INTERVAL_SEC>"
exit -1
fi
while :
do
_CNT=$(expr $_CNT + 1)
hadoop fs -test ${HDFS_CHECK_OPTION} "${HDFS_PATH}" 2>/dev/null
if [ "$?" == 0 ]; then
echo "[SUCCESS] File Exist : ${HDFS_PATH}"
exit 0
fi
if [ $_CNT -ge $_LOOP_SIZE ]; then
echo "[FAILED] INTERVAL ${INTERVAL_SEC} sec (${_CNT}/${_LOOP_SIZE}) : ${HDFS_PATH}"
exit 1
else
echo "[WAIT] INTERVAL ${INTERVAL_SEC} sec (${_CNT}/${_LOOP_SIZE}) : ${HDFS_PATH}"
sleep $INTERVAL_SEC
fi
done
반응형
'데이터처리 > Hadoop' 카테고리의 다른 글
[HDFS] 클러스터간 distcp 문제 해결방법 총정리 - kerberos 인증이 있다면? (0) | 2023.12.08 |
---|---|
[HDFS] 다른 클러스터의 nameservice 를 동적으로 추가하기 - distcp (0) | 2023.12.04 |
[Hadoop] 커버로스 인증을 변경후 접근시 not allowed 오류 (0) | 2023.03.14 |
[하둡] Can't get Kerberos realm 오류 해결법 - krb5.conf 경로문제 (0) | 2023.03.08 |
[하둡] Server asks us to fall back to SIMPLE auth, but this client is configured to only allow secure connections 문제 해결하기 (0) | 2022.10.04 |
댓글