티스토리 뷰

[업데이트 2017.03.17 13:28]

 

Windows 환경에서 Zeppelin Release 0.7.0 버전 기준으로 Apache Zeppelin-Spark Interpreter 연동시 아래와 같은 에러를 접하게 되었습니다.

 

구글링을 하면서 찾다보니 문제 해결 방법에 대한 힌트를 아래의 사이트를 통해 얻게 되었습니다.

 

* 참고: https://issues.apache.org/jira/browse/ZEPPELIN-1584

 

Zeppelin에서 Spark Interprester를 실행하는데, 이때 Spark Interpreter 실행시 넘겨주는 파라메터 처리 이슈로 Spark Interpreter가 정상적으로 실행이 안되어 문제가 발생한 것으로 보입니다. 아래는 로그 내용입니다. 결국 connect timed out이 계속 발생하는데, 이는 Spark Interpreter가 localhost:50941로 생성이 되어야 하는데, 실패를 했기 때문입니다. Interpreter.cmd를 실행 시, 파라메터로 Spark Interpreter path를 넘겨주는 부분이 있는데, 마지막에 backslash(\)를 넣어주면 문제가 해결됨을 확인하였습니다. Windows환경에서만 발생하는 것으로 생각되는데, java class에서 내부적으로 path처리시 이슈가 있는 것은 아닌가 생각됩니다.

INFO [2017-03-17 10:32:02,671] ({pool-2-thread-5} RemoteInterpreterManagedProcess.java[start]:120) - Run interpreter process [C:\zeppelin-0.7.0\bin\interpreter.cmd, -d, C:\zeppelin-0.7.0\interpreter\spark, -p, 50941, -l, C:\zeppelin-0.7.0/local-repo/2CB3BUN4U]
DEBUG [2017-03-17 10:32:02,844] ({Exec Stream Pumper} RemoteInterpreterManagedProcess.java[processLine]:189) - The filename, directory name, or volume label syntax is incorrect.

DEBUG [2017-03-17 10:32:03,677] ({pool-2-thread-5} RemoteInterpreterUtils.java[checkIfRemoteEndpointAccessible]:60) - Remote endpoint 'localhost:50941' is not accessible (might be initializing): connect timed out

 

Zeppelin 가이드중에 remote로 interpreter를 실행하는 방법이 있는데, 별도로 Spark Interpreter를 실행 한 후, Spark Interpreter의 설정 옵션중에 Connect to existing process를 통해 문제를 해결하게 되었습니다.

 

* 참고: https://zeppelin.apache.org/docs/0.7.0/manual/interpreters.html#connecting-to-the-existing-remote-interpreter

 

<문제 해결 절차>

1. 먼저 %SPARK_HOME%\jars 디렉토리에 있는 모든 .jar 파일을 %ZEPPELIN_HOME%\INTERPRETER\spark로 복사합니다. 내부적으로 특정 .jar 파일을 참조 하는 것 같습니다. 복사를 하지 않으면 Spark Interpreter가 정상적으로 실행이 안됩니다.

copy C:\spark-2.1.0-bin-hadoop2.7\jars C:\zeppelin-0.7.0\interpreter\spark

 

또한 pyspark, python을 사용하기 위해 아래와 같이 Zeppelin/conf 폴더의 zeppelin-env.cmd를 수정합니다.

set JAVA_HOME=C:/Program Files/Java/jre1.8.0_121
set SPARK_HOME=C:\spark-2.1.0-bin-hadoop2.7
set PYSPARK_PYTHON=%SPARK_HOME%\python;%SPARK_HOME%\python\lib\py4j-0.10.4-src.zip;%SPARK_HOME%\python\lib\pyspark.zip
set PYTHONPATH=%SPARK_HOME%\python;%SPARK_HOME%\python\lib\py4j-0.10.4-src.zip

 

** 만약 oracle db jdbc를 사용하고 싶다면, ojdbc6.jar oracle db jar 파일을 %ZEPPELIN_HOME%\INTERPRETER\spark에 복사합니다.

 

2. Zeppelin Web UI에서 Interpreters > spark로 검색후, 아래의 localRepo 경로를 확인합니다.

 

3. Windows command prompt를 실행 후, 아래와 같이 Spark Interpreter process를 실행 합니다. 여기서 Spark Interpreter 경로 맨 뒤에 backslash를 붙여줍니다. 포트는 임의로 지정해주며, 2번 스텝에서 확인한 localRepo 경로를 파라메터로 넘겨줍니다.

C:\zeppelin-0.7.0\bin>interpreter.cmd -p 42625 -d c:\zeppelin-0.7.0\interpreter\spark\ -l c:\zeppelin-0.7.0/local-repo/2CB3BUN4U

 

 

4. 다시 Zeppelin Web UI > Interpreters > spark 설정 화면으로 이동 후, Connect to existing process의 Host/Port를 지정합니다. 여기서 Host/Port는 Spark Interpreter Process가 실행된 Host IP 및 Port를 지정하면 됩니다. 3번 스텝에서 지정한 포트로 설정하며, Host는 Zeppelin 서비스가 실행된 동일한 PC에서 실행 하였으므로 localhost로 합니다.

 

 

5. 4번 스텝에서 Save 버튼을 누르게 되면, Spark Interpreter가 자동으로 재시작 됩니다.

 

6. 이제 Notebook에서 다시 Spark를 실행합니다. 다음과 같이 RUNNING 상태로 변경되며, 최종 실행된 결과가(sc.version) 정상적으로 output에 표시됩니다.

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함