【问题标题】:Getting NullPointerException when running Spark Code in Zeppelin 0.7.1在 Zeppelin 0.7.1 中运行 Spark 代码时出现 NullPointerException
【发布时间】: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

【问题讨论】:

    标签: apache-spark apache-zeppelin


    【解决方案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 : 看起来这个问题主要出现在你连接到 VPN 时...我确实连接到 VPN

    【讨论】:

    • 我也看到这个问题出现在 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 中的相同
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-05-22
            • 2020-11-29
            • 2017-07-12
            • 1970-01-01
            • 2019-03-02
            • 2021-08-06
            • 2017-03-11
            相关资源
            最近更新 更多