본문 바로가기
BigData/Zeppelin

REST Api 로 Zeppelin Note 실행하기

by Tomining 2023. 11. 23.

글 작성 시점 기준 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