在Zeppelin 0.7.1中运行Spark代码时获取NullPointerException

时间:2017-04-08 00:57:50

标签: apache-spark apache-zeppelin

我已安装Zeppelin 0.7.1。当我尝试执行示例spark程序(可用于Zeppelin Tutorial笔记本)时,我收到以下错误

java.lang.NullPointerException
    at org.apache.zeppelin.spark.Utils.invokeMethod(Utils.java:38)
    at org.apache.zeppelin.spark.Utils.invokeMethod(Utils.java:33)
    at org.apache.zeppelin.spark.SparkInterpreter.createSparkContext_2(SparkInterpreter.java:391)
    at org.apache.zeppelin.spark.SparkInterpreter.createSparkContext(SparkInterpreter.java:380)
    at org.apache.zeppelin.spark.SparkInterpreter.getSparkContext(SparkInterpreter.java:146)
    at org.apache.zeppelin.spark.SparkInterpreter.open(SparkInterpreter.java:828)
    at org.apache.zeppelin.interpreter.LazyOpenInterpreter.open(LazyOpenInterpreter.java:70)
    at org.apache.zeppelin.interpreter.remote.RemoteInterpreterServer$InterpretJob.jobRun(RemoteInterpreterServer.java:483)
    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:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

我还设置了配置文件(zeppelin-env.sh)以指向我的Spark安装& Hadoop配置目录

export SPARK_HOME="/${homedir}/sk"
export HADOOP_CONF_DIR="/${homedir}/hp/etc/hadoop"

我使用的Spark版本是2.1.0& Hadoop是2.7.3

我也使用默认的Spark解释器配置(因此Spark设置为在Local mode中运行)

我在这里错过了什么吗?

PS:我可以使用spark-shell

从终端连接到spark

9 个答案:

答案 0 :(得分:12)

刚才我为Zeppelin-0.7.2解决了这个问题:

  

根本原因是:Spark试图设置Hive上下文,但是hdfs服务   没有运行,这就是为什么HiveContext变为null并抛出null   指针异常。

<强>解决方案:
1.设置Saprk Home [可选]和HDFS 2.运行HDFS服务
3.重新启动zeppelin服务器

1.转到Zeppelin的译员设置。
2.选择Spark解释器
3. zeppelin.spark.useHiveContext = false

答案 1 :(得分:9)

最后,我能够找出原因。当我检查ZL_HOME / logs目录中的日志时,发现它似乎是Spark Driver绑定错误。在Spark Interpreter Binding中添加了以下属性,现在效果很好......

enter image description here

PS:看起来这个问题主要出现在你连接到VPN ...并且我连接到VPN

答案 2 :(得分:2)

你是否设置了SPARK_HOME?只是想知道你的sk是什么 export SPARK_HOME="/${homedir}/sk"

(我只是想在你的问题下面发表评论但由于我缺乏声誉而无法评论)

答案 3 :(得分:0)

通过在文件common.sh的顶部添加此行来解决它  在dir zeppelin-0.6.1然后bin

打开common.sh 并在文件集的顶部添加命令:

unset CLASSPATH

答案 4 :(得分:0)

    enterCaused by: java.net.ConnectException: Connection refused (Connection refused)
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at org.apache.thrift.transport.TSocket.open(TSocket.java:182)
        ... 74 more
)
        at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.open(HiveMetaStoreClient.java:466)
        at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.java:236)
        at org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient.<init>(SessionHiveMetaStoreClient.java:74)
        ... 71 more
 INFO [2017-11-20 17:51:55,288] ({pool-2-thread-4} SparkInterpreter.java[createSparkSession]:369) - Created Spark session with Hive support
ERROR [2017-11-20 17:51:55,290] ({pool-2-thread-4} Job.java[run]:181) - Job failed code here

看起来Hive Metastore服务尚未启动。您可以启动Metastore服务并重试。

hive --service metastore

答案 5 :(得分:0)

我在窗口7上获得了zepelline 0.7.2版本的完全相同的异常。我必须对配置进行多项更改才能使其正常工作。

首先将zeppelin-env.cmd.template重命名为zeppelin-env.cmd。为PYTHONPATH添加env变量。该文件可以位于%ZEPPELIN_HOME%/ conf文件夹中。

set PYTHONPATH=%SPARK_HOME%\python;%SPARK_HOME%\python\lib\py4j-0.10.4-src.zip;%SPARK_HOME%\python\lib\pyspark.zip

从位置%ZEPPELIN_HOME%/ bin打开zeppelin.cmd,添加%SPARK_HOME%和%ZEPPELIN_HOME%。这些将是指令中的第一行。 %SPARK_HOME%的值在我使用嵌入式spark库时被配置为空白。我添加了%ZEPPELIN_HOME%以确保在启动的初始阶段配置此env。

set SPARK_HOME=
set ZEPPELIN_HOME=<PATH to zeppelin installed folder>

接下来,我们必须将所有jar和pySpark从%spark_home%/复制到zeppeline文件夹。

cp %SPARK_HOME%/jar/*.jar %ZEPPELIN_HOME%/interpreter/spark
cp %SPARK_HOME%/python/pyspark %ZEPPELIN_HOME%/interpreter/spark/pyspark

访问笔记本时我没有启动 interpreter.cmd 。这导致了nullpointer异常。我打开了两个命令提示符,在一个cmd中,我启动了zeppeline.cmd,并在另一个interpreter.cmd中启动。

我们必须在命令行中指定两个额外的输入端口和zeppeline local_repo的路径。您可以在zeppeline spark解释器页面中获取local_repo的路径。使用完全相同的路径启动interpreter.cmd。

interpreter.cmd  -d %ZEPPELIN_HOME%\interpreter\spark\ -p 5050  -l %ZEPPELIN_HOME%\local-repo\2D64VMYZE

需要在zepelline ui的spark解释器页面中指定主机和端口。选择“连接到外部流程”

HOST : localhost
PORT : 5050

一旦创建了所有这些配置,下一步我们就可以保存并重新启动spark解释器。创建一个新的笔记本并键入sc.version。 它将发布spark版本。 Zeppeline 0.7.2不支持spark 2.2.1

答案 6 :(得分:0)

在AWS EMR上,问题是内存。我不得不使用Zeppelin的UI在Interpeter for Spark中为spark.executor.memory手动设置较低的值。

该值因实例大小而异。 最好的方法是检查位于/mnt/var/log/zeppelin/文件夹中的日志。

在我的情况下,潜在的错误是:

Error initializing SparkContext.
java.lang.IllegalArgumentException: Required executor memory (6144+614 MB) is above the max threshold (6144 MB) of this cluster! Please check the values of 'yarn.scheduler.maximum-allocation-mb' and/or 'yarn.nodemanager.resource.memory-mb'.

这帮助我理解了为什么它失败了,我能做些什么来解决它。

注意:

这是因为我正在使用HBase启动一个限制可用内存的实例。请参阅实例大小here的默认值。

答案 7 :(得分:0)

检查您的NameNode是否已进入安全模式。

使用以下语法进行检查:

sudo -u hdfs hdfs dfsadmin -safemode get

要退出安全模式,请使用以下命令:

sudo -u hdfs hdfs dfsadmin -safemode leave

答案 8 :(得分:-2)

似乎是Zeppelin 0.7.1中的错误。在0.7.2中工作正常。