在 Zeppelin 0.7.1 中运行 Spark 代码时出现 NullPointerException
Posted
技术标签:
【中文标题】在 Zeppelin 0.7.1 中运行 Spark 代码时出现 NullPointerException【英文标题】:Getting NullPointerException when running Spark Code in Zeppelin 0.7.1 【发布时间】:2017-09-03 11:37:30 【问题描述】:我已经安装了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
【问题讨论】:
【参考方案1】:刚才我得到了 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
【讨论】:
HiveContext 也为我做了! 亲爱的@RajeevRathor 和@BenjaminBaron,我无意粗鲁,但我敢肯定答案与编写这些 cmets 具有相同的目的。当您将鼠标悬停在add a comment
上时,弹出窗口会显示 .. Avoid comments like "+1" or "thanks".
仅供参考,此解决方案对我不起作用。【参考方案2】:
终于找到原因了。当我检查 ZL_HOME/logs 目录中的日志时,发现它似乎是 Spark Driver 绑定错误。在 Spark Interpreter Binding 中添加了以下属性,现在运行良好...
PS : 看起来这个问题主要出现在你连接到 *** 时...我确实连接到 ***
【讨论】:
我也看到这个问题出现在 VM 上运行的 Zeppelin 0.8 上;一切正常,直到 VM 的一个(不相关的)网络适配器更改地址,只有重新启动才能让 Zeppelin 恢复工作......【参考方案3】:SPARK_HOME
设置正确吗?只是想知道sk
在你的
export SPARK_HOME="/$homedir/sk"
(我只是想在您的问题下方发表评论,但由于我缺乏声誉而无法评论?)
【讨论】:
是的,那是我安装 Spark 的地方 :)。也就是 Spark 安装的 Home 目录【参考方案4】:通过在文件 common.sh 的顶部添加这一行来解决它 在 dir zeppelin-0.6.1 然后 bin
打开 common.sh 并在文件集顶部添加命令:
unset CLASSPATH
【讨论】:
【参考方案5】: 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
【讨论】:
【参考方案6】:我在窗口 7 上遇到了与 zepelline 0.7.2 版本完全相同的异常。我必须对配置进行多次更改才能使其正常工作。
首先将 zeppelin-env.cmd.template 重命名为 zeppelin-env.cmd。为 PYTHONPATH 添加环境变量。该文件可以位于 %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 库时,%SPARK_HOME% 的值被配置为空白。我添加了 %ZEPPELIN_HOME% 以确保在启动的初始阶段配置此环境。
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。这导致了空指针异常。我打开了两个命令提示符,在一个 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。 它将发布火花版本。 Zeppeline 0.7.2 不支持 spark 2.2.1
【讨论】:
【参考方案7】:检查您的 NameNode 是否已进入安全模式。
检查以下语法:
sudo -u hdfs hdfs dfsadmin -safemode get
使用以下命令退出安全模式:
sudo -u hdfs hdfs dfsadmin -safemode leave
【讨论】:
【参考方案8】:在 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。
【讨论】:
我投了反对票,因为虽然这可能有用,但此错误不是堆栈跟踪的一部分,也不是问题的一部分。 @Marc-OlivierTiteux 我不敢苟同。NullPointerException
在 Zeppelin 上运行应用程序时确实会发生。也就是说,这是你在前端得到的例外。当您像我一样深入挖掘日志时,您可以看到 NullPointerException
掩盖了我上面提到的 IllegalArgumentException
。如果您遇到与发帖人相同的问题,则应检查上述路径中的日志。
在我的情况下非常不同。集群上安装了一个自定义包并触发了错误。我不是说你有同样的模式。我是说答案不匹配 OP 中的堆栈跟踪没有这个。
@Marc-OlivierTiteux 它确实匹配。前端的NullPointerException
可能是由多个 其他问题引起的,其中一个是我遇到的问题。重申一下:我有与海报完全相同的堆栈跟踪,但是当您深入了解日志时,您可以看到 NullPointerException
是由其他服务失败引起的 IllegalArgumentException
预期 Zeppelin
结果不是null
。你基本上是在惩罚我,因为我的回答没有解决你的NullPointerException
。 OP 不接受任何答案,所以他们都应该得到负分吗?【参考方案9】:
似乎是 Zeppelin 0.7.1 中的错误。在 0.7.2 中运行良好。
【讨论】:
我认为这是一个配置问题,任何版本的 Zeppelin 都会发生。我在 Zeppelin 0.7.2 中看到了这个 0.7.3 中的相同以上是关于在 Zeppelin 0.7.1 中运行 Spark 代码时出现 NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章
Zeppelin:如何在 zeppelin 中重新启动 sparkContext
在 docker 中使用 spark 2.2 运行 zeppelin
Zeppelin+Spark+Kubernetes:让 Zeppelin Job 在现有的 Spark 集群上运行