글 작성 시점 기준 0.10.1 버전이 최신 버전으로 해당 버전 기준으로 작성한다.
Zeppelin 은 REST API 를 제공하고 있다. (docs)
Note 목록 조회, 생성, 삭제, 실행 등 기본적인 기능은 모두 제공하고 있다. 기본적으로 HTTP 호출을 할 수 있다면 어렵지 않게 접근할 수 있다.
만약 Zeppelin 에 인증이 붙어있다면 어떻게 해야 할까?
login 처리가 필요하며 아래와 같은 헤더 (쿠키) 정보가 필요하다
Set-Cookie: ZEPPELINJSESSIONID={SessionId 값}
다양한 방식으로 구현할 수 있지만, 아래 샘플은 curl 을 활용한 방식으로 작성해 봤다.
STATUS_CHECK_COUNT=20
SLEEP_TIME=5
COOKIE_FILE=cookies.txt
ZEPPELIN_DOMAIN=https://zeppelin.com:9090 # 변경
ZEPPELIN_ID=ID
ZEPPELIN_PASSWORD=PW
HERE=`pwd`
echo $HERE
COOKIE_FILE_PATH=$HERE/$COOKIE_FILE
function executeNote() {
NOTE_ID=$1
if [ -z $NOTE_ID ]
then
echo "NOTE_ID is empty."
exit;
fi
echo "Execute Note (NOTE_ID: $NOTE_ID)"
curl -i -b $COOKIE_FILE_PATH -X POST $ZEPPELIN_DOMAIN/api/notebook/job/$NOTE_ID
STATUS=""
for i in {1..$STATUS_CHECK_COUNT}; do
echo "COMMAND: curl --location --request -i -b $COOKIE_FILE_PATH -X GET $ZEPPELIN_DOMAIN/api/notebook/job/$NOTE_ID"
STATUS=`curl --location --request -i -b $COOKIE_FILE_PATH -X GET $ZEPPELIN_DOMAIN/api/notebook/job/$NOTE_ID | jq '.body.isRunning'`
echo $STATUS
if [ $STATUS = "true" ]
then
echo "NOTE($NOTE_ID) is running. Status will be check after 5 seconds"
else
echo "NOTE($NOTE_ID) was completed"
#curl --location --request -i -b $COOKIE_FILE_PATH -X GET $ZEPPELIN_DOMAIN/api/notebook/job/$NOTE_ID
return
fi
#echo "SLEEP: $SLEEP_TIME seconds"
sleep $SLEEP_TIME
done
}
echo "Zeppelin Login"
curl -c $COOKIE_FILE_PATH -i --data 'userName=$ZEPPELIN_ID&password=$ZEPPELIN_PASSWORD' -X POST $ZEPPELIN_DOMAIN/api/login
cat $COOKIE_FILE_PATH
# execute note
executeNote {NOTE_ID 입력}
# delete cookie file
rm -f $COOKIE_FILE_PATH
노트 전체가 아니라 특정 paragraph 만 실행할 수도 있다.
기본적으로 POST 로 노트 실행 요청을 하면 async 로 되며 200 OK 응답을 바로 내려준다. 즉, 실행이 완료 되었는지는 따로 확인해야 하는데, 위 예제는 실행 완료 여부를 GET 으로 요청하면 확인할 수 있다.
bashscript 에서 jq 라는 명령어를 사용하고 있는데, 이는 json 문자열을 쉽게 접근할 수 있게 해 주는 util 이다.
사용법 자체는 크게 어렵지 않으니, jq github 페이지를 참고하자.
'BigData > Zeppelin' 카테고리의 다른 글
Zeppelin 에서 checkbox input form 다루기 (0) | 2024.06.05 |
---|---|
REST Api 로 Zeppelin Note 실행하기 (0) | 2023.10.27 |