Zeeplinは、ローカルモードのSparkインタープリターエラーを構成、使用、およびデバッグします

nettyパッケージのバージョンの競合

エラーコード

java.lang.NoSuchMethodError: io.netty.buffer.PooledByteBufAllocator.defaultNumHeapArena()I
	at org.apache.spark.network.util.NettyUtils.createPooledByteBufAllocator(NettyUtils.java:113)
	at org.apache.spark.network.client.TransportClientFactory.<init>(TransportClientFactory.java:106)
	at org.apache.spark.network.TransportContext.createClientFactory(TransportContext.java:99)
	at org.apache.spark.rpc.netty.NettyRpcEnv.<init>(NettyRpcEnv.scala:71)
	at org.apache.spark.rpc.netty.NettyRpcEnvFactory.create(NettyRpcEnv.scala:461)
	at org.apache.spark.rpc.RpcEnv$.create(RpcEnv.scala:57)
	at org.apache.spark.SparkEnv$.create(SparkEnv.scala:249)
	at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:175)
	at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:257)
	at org.apache.spark.SparkContext.<init>(SparkContext.scala:424)
	at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2520)
	at org.apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:935)
	at org.apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:926)
	at scala.Option.getOrElse(Option.scala:121)
	at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:926)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.zeppelin.spark.BaseSparkScalaInterpreter.spark2CreateContext(BaseSparkScalaInterpreter.scala:263)
	at org.apache.zeppelin.spark.BaseSparkScalaInterpreter.createSparkContext(BaseSparkScalaInterpreter.scala:182)
	at org.apache.zeppelin.spark.SparkScala211Interpreter.open(SparkScala211Interpreter.scala:90)
	at org.apache.zeppelin.spark.NewSparkInterpreter.open(NewSparkInterpreter.java:102)
	at org.apache.zeppelin.spark.SparkInterpreter.open(SparkInterpreter.java:62)
	at org.apache.zeppelin.interpreter.LazyOpenInterpreter.open(LazyOpenInterpreter.java:69)
	at org.apache.zeppelin.interpreter.remote.RemoteInterpreterServer$InterpretJob.jobRun(RemoteInterpreterServer.java:616)
	at org.apache.zeppelin.scheduler.Job.run(Job.java:188)
	at org.apache.zeppelin.scheduler.FIFOScheduler$1.run(FIFOScheduler.java:140)
	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)

上記の質問については、Googleで「Zeppelinjava.lang.NoSuchMethodError:io.netty.buffer.PooledByteBufAllocator.defaultNumHeapArena()」を検索してください。最初の回答はhttps://stackoverflow.com/questions/50388919/spark-2-3です。 -java-lang-nosuchmethoderror-io-netty-buffer-pooledbytebufallocator-私、他の回答も同じ解決策を提供します:ZeppelinのnettyパッケージをSparkのnettyパッケージに置き換え、最初にSparkとZeppelinのそれぞれのNettyバージョンのパッケージを見てください:

# 在SPARK安装目录下执行
$ ls jars | grep netty
netty-3.9.9.Final.jar
netty-all-4.1.17.Final.jar
# 在Zeppelin安装目录执行
$ ls lib | grep netty
netty-all-4.0.23.Final.jar

4.1.17Sparkのnetty-allパッケージバージョンは、Zeppelinであることがわかります4.0.23。これを置き換えてください:

# 在Zeppelin安装目录执行
$ rm lib/netty-all-4.0.23.Final.jar
$ cp ~/spark-2.4.4-bin-hadoop2.7/jars/netty-all-4.1.17.Final.jar lib/

次に、ノートブックページの右上隅にある歯車ボタンをクリックします。

img

ポップアップメニューで、sparkの前にある再起動ボタンをクリックします。

img

ポップアップ表示される[再起動の確認]ダイアログボックスをクリックOKし、再起動の完了後にクリックしてから、再Save起動してコードの最初の2行を実行します。

注:sparkインタープリターを再起動するこの方法は、構成の変更、Sparkタスクの例外など、多くの場合に使用されます。Zeppelin全体を再起動する必要がないため、より便利です。

zlibライブラリは利用できません

Googleで「zipimport.ZipImportError:データを解凍できません。zlibは利用できません」を検索してください。理由は、Pythonのコンパイル時にzlibが含まれていないためと思われるため、zlibをインストールしてPythonを再コンパイルする必要があります。これは代替手段です。システムにpython2とpython3の両方がインストールされているので、最初に上記のマスターを変更した方法でsparkインタープリターのzeppelin.pyspark.pythonを変更し、それをpython3に変更し、インタープリターを再起動してからコードを実行しました。エラーが再び変更されました:

Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.readRDDFromFile.
: java.lang.ExceptionInInitializerError
	at org.apache.spark.SparkContext.withScope(SparkContext.scala:699)
	at org.apache.spark.SparkContext.parallelize(SparkContext.scala:716)
	at org.apache.spark.api.python.PythonRDD$.readRDDFromInputStream(PythonRDD.scala:195)
	at org.apache.spark.api.python.PythonRDD$.readRDDFromFile(PythonRDD.scala:175)
	at org.apache.spark.api.python.PythonRDD.readRDDFromFile(PythonRDD.scala)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
	at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
	at py4j.Gateway.invoke(Gateway.java:282)
	at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
	at py4j.commands.CallCommand.execute(CallCommand.java:79)
	at py4j.GatewayConnection.run(GatewayConnection.java:238)
	at java.lang.Thread.run(Thread.java:748)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Incompatible Jackson version: 2.8.11-1
	at com.fasterxml.jackson.module.scala.JacksonModule$class.setupModule(JacksonModule.scala:64)
	at com.fasterxml.jackson.module.scala.DefaultScalaModule.setupModule(DefaultScalaModule.scala:19)
	at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:747)
	at org.apache.spark.rdd.RDDOperationScope$.<init>(RDDOperationScope.scala:82)
	at org.apache.spark.rdd.RDDOperationScope$.<clinit>(RDDOperationScope.scala)
	... 16 more

したがって、以下でこのエラーを解決してください。ただし、python3に置き換えてもzlibエラー場合zlibは、ライブラリを含むpythonバージョンを再コンパイルまたはインストールする必要がある場合があることに注意してください。

jackson-databindパッケージのバージョンの競合

上記のエラーメッセージは非常に明確で、バージョンに互換性がありません。前と同じように、SparkとZeppelinのそれぞれのjacksonパッケージバージョンを確認してください。

# 在SPARK安装目录下执行
$ ls jars | grep jackson-databind
jackson-databind-2.6.7.1.jar
# 在Zeppelin安装目录执行
$ ls lib | grep jackson
jackson-databind-2.8.11.1.jar

案の定、バージョンは異なります。以前と同様に、ZeppelinのパッケージをSparkのパッケージに置き換えます。

インタプリタを再起動すると、最終的にエラーは報告されません

おすすめ

転載: blog.csdn.net/zmzdmx/article/details/114642685