zeppelin 에서



아래와 같은 에러 발생 시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
java.lang.NoSuchMethodError: scala.reflect.api.JavaUniverse.runtimeMirror(Ljava/lang/ClassLoader;)Lscala/reflect/api/JavaMirrors$JavaMirror;
    at org.apache.spark.repl.SparkILoop.<init>(SparkILoop.scala:936)
    at org.apache.spark.repl.SparkILoop.<init>(SparkILoop.scala:70)
    at org.apache.zeppelin.spark.SparkInterpreter.open(SparkInterpreter.java:790)
    at org.apache.zeppelin.interpreter.LazyOpenInterpreter.open(LazyOpenInterpreter.java:70)
    at org.apache.zeppelin.interpreter.remote.RemoteInterpreterServer$InterpretJob.jobRun(RemoteInterpreterServer.java:491)
    at org.apache.zeppelin.scheduler.Job.run(Job.java:175)
    at org.apache.zeppelin.scheduler.FIFOScheduler$1.run(FIFOScheduler.java:139)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
 
cs



** 해결 방법 1

우측 상단의 해당 계정을 클릭하면



아래와 같은 메뉴 바에서 InterPreter 를 클릭합니다.



상단의 검색창에서 찾으려는 Interpreter 를 조회합니다.



조회한 인터프리터의 목록 중 아래와 같은 내용을 확인합니다.



확인 후에 다음과 같이 실행합니다.

1
2
3
4
5
6
7
8
$ /usr/local/zeppelin/bin/interpreter.sh -p 2080 -d /usr/local/zeppelin-0.7.3-bin-all/interpreter/spark/ -l /usr/local/zeppelin/local-repo/2D5AQF6P1
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/zeppelin-0.7.3-bin-all/interpreter/spark/zeppelin-spark_2.11-0.7.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/zeppelin-0.7.3-bin-all/lib/interpreter/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/spark-1.6.3-bin-hadoop2.6/lib/spark-assembly-1.6.3-hadoop2.6.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
 
cs

* 포트 번호 2080은 사용하지 않은 포트 중 임의의 포트 번호를 지정합니다.



다시 zeppelin Web UI 로 돌아가서 spark 관련 interpreter 에 우측 상단의 edit 버튼을 클릭합니다.



위의 그림에서 Connect to existing process 체크 박스를 클릭하여 아래와 같이 설정 후 Save 버튼을 클릭합니다.

* Save 버튼은 하단에 있습니다.



다시 spark 작성 화면으로 돌아가서 실행하면



** 해결 방법 2

 : spark 의 홈 디렉터리 이하에 lib 디렉터리 내에 *.jar 파일을 zeppelin 의 홈 디렉터리 이하 interpreter/spark 디렉터리로 복사

* spark/lib 의 jar 파일

1
2
3
4
5
6
7
8
9
10
11
$ ll /usr/local/spark/lib/
total 299124
drwxr-xr-x  2 hadoop-user hadoop      4096 Jan 22 15:08 ./
drwxr-xr-x 13 hadoop-user hadoop      4096 Jan 22 15:32 ../
-rw-r--r--  1 hadoop-user hadoop    339666 Jan 22 15:08 datanucleus-api-jdo-3.2.6.jar
-rw-r--r--  1 hadoop-user hadoop   1890075 Jan 22 15:08 datanucleus-core-3.2.10.jar
-rw-r--r--  1 hadoop-user hadoop   1809447 Jan 22 15:08 datanucleus-rdbms-3.2.9.jar
-rw-r--r--  1 hadoop-user hadoop   6920412 Jan 22 15:08 spark-1.6.3-yarn-shuffle.jar
-rw-r--r--  1 hadoop-user hadoop 182073169 Jan 22 15:08 spark-assembly-1.6.3-hadoop2.6.0.jar
-rw-r--r--  1 hadoop-user hadoop 113254112 Jan 22 15:08 spark-examples-1.6.3-hadoop2.6.0.jar
 
cs


* zeppelin/interpreter/spark 디렉터리 이하에 복사

1
2
$ cp /usr/local/spark/lib /usr/local/zeppelin/interpreter/spark
 
cs




아래와 같은 에러 발생 시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
paragraph_1429882946244_-381648689's Interpreter r not found
org.apache.zeppelin.interpreter.InterpreterException: paragraph_1429882946244_-381648689's Interpreter r not found
    at org.apache.zeppelin.notebook.Note.run(Note.java:621)
    at org.apache.zeppelin.socket.NotebookServer.persistAndExecuteSingleParagraph(NotebookServer.java:1647)
    at org.apache.zeppelin.socket.NotebookServer.runParagraph(NotebookServer.java:1621)
    at org.apache.zeppelin.socket.NotebookServer.onMessage(NotebookServer.java:266)
    at org.apache.zeppelin.socket.NotebookSocket.onWebSocketText(NotebookSocket.java:59)
    at org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onTextMessage(JettyListenerEventDriver.java:128)
    at org.eclipse.jetty.websocket.common.message.SimpleTextMessage.messageComplete(SimpleTextMessage.java:69)
    at org.eclipse.jetty.websocket.common.events.AbstractEventDriver.appendMessage(AbstractEventDriver.java:65)
    at org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onTextFrame(JettyListenerEventDriver.java:122)
    at org.eclipse.jetty.websocket.common.events.AbstractEventDriver.incomingFrame(AbstractEventDriver.java:161)
    at org.eclipse.jetty.websocket.common.WebSocketSession.incomingFrame(WebSocketSession.java:309)
    at org.eclipse.jetty.websocket.common.extensions.ExtensionStack.incomingFrame(ExtensionStack.java:214)
    at org.eclipse.jetty.websocket.common.Parser.notifyFrame(Parser.java:220)
    at org.eclipse.jetty.websocket.common.Parser.parse(Parser.java:258)
    at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.readParse(AbstractWebSocketConnection.java:632)
    at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:480)
    at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
    at java.lang.Thread.run(Thread.java:748)
 
cs



아래의 부분에 Save 버튼을 클릭한 후 진행합니다.




* 아래와 같은 에러 발생 시

1
2
3
4
5
6
7
8
9
10
com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.5.3
  at com.fasterxml.jackson.module.scala.JacksonModule$class.setupModule(JacksonModule.scala:56)
  at com.fasterxml.jackson.module.scala.DefaultScalaModule.setupModule(DefaultScalaModule.scala:19)
  at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:651)
  at org.apache.spark.rdd.RDDOperationScope$.<init>(RDDOperationScope.scala:82)
  at org.apache.spark.rdd.RDDOperationScope$.<clinit>(RDDOperationScope.scala)
  at org.apache.spark.SparkContext.withScope(SparkContext.scala:701)
  at org.apache.spark.SparkContext.textFile(SparkContext.scala:830)
  ... 47 elided
 
cs



* 발생 원인

 : 현재 참조되고 있는 jackson 관련 jar 파일이 너무 오래되서 발생되고 있는 문제입니다.



* 조치 사항

 : wget 명령어를 통해 상위 버전의 jackson 관련 jar 파일을 내려받아 zeppelin 이하의 library 디렉터리에 복사를 합니다.

1. wget 을 통해 관련 jar 파일을 내려받습니다.

1
2
3
4
wget http://central.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.6.2/jackson-core-2.6.2.jar
wget http://central.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.6.2/jackson-databind-2.6.2.jar
wget http://central.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.6.2/jackson-annotations-2.6.2.jar
 
cs



2. 관련 jar 파일 확인

1
2
3
4
5
$ ll |grep jackson
-rw-r--r--  1 hadoop-user hadoop   46969 Sep 15  2015 jackson-annotations-2.6.2.jar
-rw-r--r--  1 hadoop-user hadoop  258824 Sep 15  2015 jackson-core-2.6.2.jar
-rw-r--r--  1 hadoop-user hadoop 1167351 Sep 15  2015 jackson-databind-2.6.2.jar
 
cs



3. zeppelin 이하의 lib 디렉터리에 복사

1
2
$ cp ~/jackson* /usr/local/zeppelin/lib
 
cs

* 위의 jackson* 은 jackson 으로 시작하는 모든 파일을 의미하는 것으로 jackson 으로 시작하는 다른 파일이 있을 경우 주의해서 사용하세요.




* 다음을 진행하기에 앞서 zeppelin 이 먼저 설치되어 있어야 합니다.


1. zeppelin-env.sh 파일을 편집합니다.

1
2
$ vi /usr/local/zeppelin/conf/zeppelin-env.sh
 
cs



2. zeppelin-env.sh 파일 내에 다음과 같이 첨삭합니다. 

1
2
3
4
5
6
7
8
9
10
11
export SPARK_HOME=/usr/local/spark
 
# set options to pass spark-submit command
export SPARK_SUBMIT_OPTIONS="--packages com.databricks:spark-csv_2.10:1.2.0"
 
# set hadoop conf dir
export HADOOP_CONF_DIR=/usr/local/hadoop
 
# extra classpath. e.g. set classpath for hive-site.xml
export ZEPPELIN_INTP_CLASSPATH_OVERRIDES=/etc/hive/conf
 
cs



+ Recent posts