[HADOOP] Hive가 실패하면 Bash 스크립트 중지
HADOOPHive가 실패하면 Bash 스크립트 중지
폴더를 반복하고 모든 * .hql 파일을 처리하는 bash 스크립트가 있습니다. 때로는 하이브 스크립트 중 하나가 실패하고 (구문, 리소스 제한 등) 스크립트가 실패하는 대신 다음 .hql 파일로 계속 진행됩니다.
어쨌든 bash가 나머지를 처리하지 못하게 할 수 있습니까? 아래는 내 샘플 bash입니다.
for i in `ls ${layer}/*.hql`; do
echo "Processing $i ..."
hive ${hiveconf_all} -hiveconf DATE=${date} -f ${i} &
if [ $j -le 5 ]; then
j=$(( j+1 ))
else
wait
j=0
fi
done
해결법
-
==============================
1.이전 명령의 프로세스 완료 상태를 확인하고 exit 명령을 호출하여 루프를 표시합니다.
이전 명령의 프로세스 완료 상태를 확인하고 exit 명령을 호출하여 루프를 표시합니다.
(( $? == 0 )) && exit 1
하이브 명령 후 위의 줄을 소개하고 트릭을 수행해야합니다.
-
==============================
2.더하다
더하다
set -e
스크립트 상단으로
-
==============================
3.병렬 프로세스를 실행하고 완료 될 때까지이 템플리트를 사용하십시오. 날짜, 레이어, hiveconf_all 및 기타 변수를 추가하십시오.
병렬 프로세스를 실행하고 완료 될 때까지이 템플리트를 사용하십시오. 날짜, 레이어, hiveconf_all 및 기타 변수를 추가하십시오.
#!/bin/bash set -e #Run parallel processes and write their logs log_dir=/tmp/my_script_logs for i in `ls ${layer}/*.hql`; do echo "Processing $i ..." #Run hive in parallel and redirect to the log file hive ${hiveconf_all} -hiveconf DATE=${date} -f ${i} 2>&1 | tee "log_dir/${i}".log & done #Now wait for all processes to complete FAILED=0 for job in `jobs -p` do echo "job=$job" wait $job || let "FAILED+=1" done if [ "$FAILED" != "0" ]; then echo "Execution FAILED! ($FAILED)" #Do something here, log or send message, etc exit 1 fi #All processes are completed successfully! #Do something here echo "Done successfully"
그런 다음 각 프로세스 로그를 개별적으로 검사 할 수 있습니다.
from https://stackoverflow.com/questions/29082828/stop-bash-script-if-hive-fails by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] HBase : / hbase / meta-region-server 노드가 없습니다 (0) | 2019.09.12 |
---|---|
[HADOOP] hadoop_home이 올바르게 설정되지 않은 이유 (0) | 2019.09.12 |
[HADOOP] Apache PIG를 사용하여 여러 줄 JSON 읽기 (0) | 2019.09.12 |
[HADOOP] Hive에서 현재 unix_timestamp 가져 오기 (0) | 2019.09.12 |
[HADOOP] hadoop / name이 일치하지 않는 상태입니다. 스토리지 디렉토리가 없거나 액세스 할 수 없습니다 (0) | 2019.09.11 |