为啥 spark-shell 因 NullPointerException 而失败?
Posted
技术标签:
【中文标题】为啥 spark-shell 因 NullPointerException 而失败?【英文标题】:Why spark-shell fails with NullPointerException?为什么 spark-shell 因 NullPointerException 而失败? 【发布时间】:2015-12-19 17:06:48 【问题描述】:我尝试在 Windows 10 上执行 spark-shell
,但每次运行时都会收到此错误。
我使用了最新版本和 spark-1.5.0-bin-hadoop2.4 版本。
15/09/22 18:46:24 WARN Connection: BoneCP specified but not present in
CLASSPATH (or one of dependencies)
15/09/22 18:46:24 WARN Connection: BoneCP specified but not present in CLASSPATH (or one of dependencies)
15/09/22 18:46:27 WARN ObjectStore: Version information not found in
metastore. hive.metastore.schema.verification is not enabled so recording the schema version 1.2.0
15/09/22 18:46:27 WARN ObjectStore: Failed to get database default, returning NoSuchObjectException
15/09/22 18:46:27 WARN : Your hostname, DESKTOP-8JS2RD5 resolves to a loopback/non-reachable address: fe80:0:0:0:0:5efe:c0a8:103%net1, but we couldn't find any external IP address!
java.lang.RuntimeException: java.lang.NullPointerException
at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:522)
at org.apache.spark.sql.hive.client.ClientWrapper.<init> (ClientWrapper.scala:171)
at org.apache.spark.sql.hive.HiveContext.executionHive$lzycompute(HiveContext.scala :163)
at org.apache.spark.sql.hive.HiveContext.executionHive(HiveContext.scala:161)
at org.apache.spark.sql.hive.HiveContext.<init>(HiveContext.scala:168)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.apache.spark.repl.SparkILoop.createSQLContext(SparkILoop.scala:1028)
at $iwC$$iwC.<init>(<console>:9)
at $iwC.<init>(<console>:18)
at <init>(<console>:20)
at .<init>(<console>:24)
at .<clinit>(<console>)
at .<init>(<console>:7)
at .<clinit>(<console>)
at $print(<console>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.spark.repl.SparkIMain$ReadEvalPrint.call(SparkIMain.scala:1065)
at org.apache.spark.repl.SparkIMain$Request.loadAndRun(SparkIMain.scala:1340)
at org.apache.spark.repl.SparkIMain.loadAndRunReq$1(SparkIMain.scala:840)
at org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:871)
at org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:819)
at org.apache.spark.repl.SparkILoop.reallyInterpret$1(SparkILoop.scala:857)
at org.apache.spark.repl.SparkILoop.interpretStartingWith(SparkILoop.scala:902)
at org.apache.spark.repl.SparkILoop.command(SparkILoop.scala:814)
at org.apache.spark.repl.SparkILoopInit$$anonfun$initializeSpark$1.apply(SparkILoopInit.scala:132)
at org.apache.spark.repl.SparkILoopInit$$anonfun$initializeSpark$1.apply(SparkILoopInit.scala:124)
at org.apache.spark.repl.SparkIMain.beQuietDuring(SparkIMain.scala:324)
at org.apache.spark.repl.SparkILoopInit$class.initializeSpark(SparkILoopInit.scala:124)
at org.apache.spark.repl.SparkILoop.initializeSpark(SparkILoop.scala:64)
at org.apache.spark.repl.SparkILoop$$anonfun$org$apache$spark$repl$SparkILoop$$process$1$$anonfun$apply$mcZ$sp$5.apply$mcV$sp(SparkILoop.scala:974)
at org.apache.spark.repl.SparkILoopInit$class.runThunks(SparkILoopInit.scala:159)
at org.apache.spark.repl.SparkILoop.runThunks(SparkILoop.scala:64)
at org.apache.spark.repl.SparkILoopInit$class.postInitialization(SparkILoopInit.sca la:108)
at org.apache.spark.repl.SparkILoop.postInitialization(SparkILoop.scala:64)
at org.apache.spark.repl.SparkILoop$$anonfun$org$apache$spark$repl$SparkILoop$$proc ess$1.apply$mcZ$sp(SparkILoop.scala:991)
at org.apache.spark.repl.SparkILoop$$anonfun$org$apache$spark$repl$SparkILoop$$proc ess$1.apply(SparkILoop.scala:945)
at org.apache.spark.repl.SparkILoop$$anonfun$org$apache$spark$repl$SparkILoop$$proc ess$1.apply(SparkILoop.scala:945)
at scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scal a:135)
at org.apache.spark.repl.SparkILoop.org$apache$spark$repl$SparkILoop$$process(SparkILoop.scala:945)
at org.apache.spark.repl.SparkILoop.process(SparkILoop.scala:1059)
at org.apache.spark.repl.Main$.main(Main.scala:31)
at org.apache.spark.repl.Main.main(Main.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:672)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:180)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:205)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:120)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.NullPointerException
at java.lang.ProcessBuilder.start(Unknown Source)
at org.apache.hadoop.util.Shell.runCommand(Shell.java:445)
at org.apache.hadoop.util.Shell.run(Shell.java:418)
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:650)
at org.apache.hadoop.util.Shell.execCommand(Shell.java:739)
at org.apache.hadoop.util.Shell.execCommand(Shell.java:722)
at org.apache.hadoop.fs.FileUtil.execCommand(FileUtil.java:1097)
at org.apache.hadoop.fs.RawLocalFileSystem$DeprecatedRawLocalFileStatus.loadPermissionInfo(RawLocalFileSystem.java:559)
at org.apache.hadoop.fs.RawLocalFileSystem$DeprecatedRawLocalFileStatus.getPermission(RawLocalFileSystem.java:534)
org.apache.hadoop.hive.ql.session.SessionState.createRootHDFSDir(SessionState.java:599)
at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:554)
org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:508) ... 56 更多
<console>:10: error: not found: value sqlContext
import sqlContext.implicits._
^
<console>:10: error: not found: value sqlContext
import sqlContext.sql
^
【问题讨论】:
我下载了 spark-1.5.0-bin-hadoop2.4 并启动了 spark-shell,但是 sqlContext 加载对我来说没有问题。我收到了相同的警告消息,除了主机名警告,所以我猜你需要修复你的网络配置。 我无法找出原因。我在玩预先构建的包。在我尝试下载源代码git clone git://github.com/apache/spark.git -b branch-1.6
之后,它工作了。
@Habib 谢谢。我也在玩预先构建的包。顺便问一下,您使用的是哪个操作系统?
【参考方案1】:
我将 Spark 1.5.2 与 Hadoop 2.6 一起使用,并且遇到了类似的问题。通过以下步骤解决:
从repository 下载winutils.exe
到某个本地文件夹,例如C:\hadoop\bin
.
将HADOOP_HOME
设置为C:\hadoop
。
创建c:\tmp\hive
目录(使用 Windows 资源管理器或任何其他工具)。
以管理员权限打开命令提示符。
运行C:\hadoop\bin\winutils.exe chmod 777 /tmp/hive
这样,我仍然收到一些警告,但没有错误,并且可以正常运行 Spark 应用程序。
【讨论】:
HADOOP_HOME
是系统变量的用户吗?你在 Windows 10 上运行它吗?我问是因为它不适合我...
你设置SPARK_LOCAL_HOSTNAME = localhost
了吗?
我仍然收到一些警告,但没有错误。
谢谢,但我仍然有错误......你的 spark 目录在哪里?如果bin\spark-shell
,你会在bin目录中运行spark-shell
命令吗?
对我来说效果很好。我想这里的关键是为您的平台下载正确版本的windutils。我的情况是,我正在运行 32 位的 windows 10,上面提供的 winutils 不起作用。这里是 32 版本的链接:code.google.com/p/rrd-hadoop-win32/source/checkout【参考方案2】:
我遇到了类似的问题,通过将 winutil 放在 bin 文件夹中解决了这个问题。 Hadoop_home 应该设置为 C:\Winutils 和 winutil 放置在 C:\Winutils\bin 中。
Windows 10 64 位 Winutils 在https://github.com/steveloughran/winutils/tree/master/hadoop-2.6.0/bin 中可用
还要确保命令行具有管理权限。
参考https://wiki.apache.org/hadoop/WindowsProblems
【讨论】:
【参考方案3】:我猜你遇到了https://issues.apache.org/jira/browse/SPARK-10528。我在 Windows 7 上看到了同样的问题。最初我像你一样得到 NullPointerException。当我将 winutils 放入 bin 目录并将 HADOOP_HOME 设置为指向 Spark 目录时,我得到了 JIRA 问题中描述的错误。
【讨论】:
所以你是说把HADOOP_HOME放到spark direcotyr,这会导致错误吗?我的 HADOOP_HOME 当前设置为 c:\winutitls,这不是我的 spark home,我目前收到此错误【参考方案4】:或者也许下面的这个链接更容易理解,
https://wiki.apache.org/hadoop/WindowsProblems
基本上下载 winutils.exe 并将其复制到您的 spark\bin 文件夹。重新运行 spark-shell
如果您尚未将 /tmp/hive 设置为可写状态,请这样做。
【讨论】:
另外,最好在 /spark/bin 文件夹中启动 spark-shell。 这是什么意思?而不是在哪里开火?抱歉,如果这个问题看起来很疯狂,只是不确定为什么人们会从其他地方提出问题,我正在尝试自己解决问题,我只是想排除一切都是失败的原因。【参考方案5】:您需要授予 /tmp/hive 目录的权限才能解决此异常。
希望您已经拥有 winutils.exe 并设置 HADOOP_HOME 环境变量。然后打开命令提示符并以管理员身份运行以下命令:
如果 winutils.exe 存在于 D:\winutils\bin 位置并且 \tmp\hive 也在 D 盘中:
D:\winutils\bin\winutils.exe chmod 777 D:\tmp\hive
更多详情,您可以参考以下链接:
Frequent Issues occurred during Spark DevelopmentHow to run Apache Spark on Windows7 in standalone mode
【讨论】:
【参考方案6】:您可以通过将 mysqlconnector jar 放入 spark-1.6.0/libs 文件夹并重新启动它来解决此问题。它可以工作。
重要的事情是在这里而不是运行 spark-shell 你应该这样做
spark-shell --driver-class-path /home/username/spark-1.6.0-libs-mysqlconnector.jar
希望它应该工作。
【讨论】:
【参考方案7】:对于 Python - 在您的 Python 中创建 SparkSession(此配置部分仅适用于 Windows)
spark = SparkSession.builder.config("spark.sql.warehouse.dir", "C:/temp").appName("SparkSQL").getOrCreate()
复制 winutils.exe 并保存在 C:\winutils\bin 并执行以下命令
C:\Windows\system32>C:\winutils\bin\winutils.exe chmod 777 C:/temp
以管理员模式运行命令提示符(以管理员身份运行)
【讨论】:
【参考方案8】:我的问题是在 winutils/bin 文件夹中有其他 .exe's/Jars。所以我清除了所有其他文件,只剩下 winutils.exe 了。使用的是火花 2.1.1
【讨论】:
【参考方案9】:在我的例子中安装正确的 Java 版本并设置环境变量后,问题得到解决。确保运行 winutils.exe 以创建一个临时目录,如下所示。
c:\winutils\bin\winutils.exe chmod 777 \tmp\hive
上面不应该返回任何错误。在调用 spark-shell 之前,使用java -version
验证您正在使用的 java 版本。
【讨论】:
【参考方案10】:在 Windows 中,您需要克隆“winutils”
git clone https://github.com/steveloughran/winutils.git
和
set var HADOOP_HOME to DIR_CLONED\hadoop-version
记得选择你的 hadoop 版本。
【讨论】:
【参考方案11】:将SPARK_LOCAL_HOSTNAME
设置为 localhost(在 Windows 10 上)为我解决了这个问题
【讨论】:
以上是关于为啥 spark-shell 因 NullPointerException 而失败?的主要内容,如果未能解决你的问题,请参考以下文章
使用myeclipse tomcat插件部署web项目时报错 an internal error occurred during add deployment . java.lang.nullpoin