spark在idea中本地如何运行?(处理问题NoSuchFieldException: SHUTDOWN_HOOK_PRIORITY)

简介:

spark在idea中本地如何运行?

前几天尝试使用idea在本地运行spark+scala的程序,出现了问题,http://www.cnblogs.com/yjf512/p/7662105.html 当时还以为是本地spark安装问题,今天发现原来不是。记录如下:

现象

使用pom写了一个程序,发现出现下面的错误

17/10/12 17:09:43 INFO storage.DiskBlockManager: Created local directory at /private/var/folders/bv/0tp4dw1n5tl9cxpc6dg2jy180000gp/T/blockmgr-0b0bf3cf-dd77-4bb4-97dc-60d6a65a35ae
Exception in thread "main" java.lang.ExceptionInInitializerError
     at org.apache.spark.storage.DiskBlockManager.addShutdownHook(DiskBlockManager.scala:147)
     at org.apache.spark.storage.DiskBlockManager.<init>(DiskBlockManager.scala:54)
     at org.apache.spark.storage.BlockManager.<init>(BlockManager.scala:78)
     at org.apache.spark.SparkEnv$.create(SparkEnv.scala:365)
     at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:193)
     at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:288)
     at org.apache.spark.SparkContext.<init>(SparkContext.scala:457)
     at com.didichuxing.scala.BenchMarkMain$.main(BenchMarkMain.scala:21)
     at com.didichuxing.scala.BenchMarkMain.main(BenchMarkMain.scala)
Caused by: java.lang.NoSuchFieldException: SHUTDOWN_HOOK_PRIORITY
     at java.lang.Class.getField(Class.java:1695)
     at org.apache.spark.util.SparkShutdownHookManager.install(ShutdownHookManager.scala:223)
     at org.apache.spark.util.ShutdownHookManager$.shutdownHooks$lzycompute(ShutdownHookManager.scala:50)
     at org.apache.spark.util.ShutdownHookManager$.shutdownHooks(ShutdownHookManager.scala:48)
     at org.apache.spark.util.ShutdownHookManager$.addShutdownHook(ShutdownHookManager.scala:191)
     at org.apache.spark.util.ShutdownHookManager$.<init>(ShutdownHookManager.scala:58)
     at org.apache.spark.util.ShutdownHookManager$.<clinit>(ShutdownHookManager.scala)
     ... 9 more

之前以为是我本地没有安装spark的问题。后来我的同事使用eclipse可以在本地运行一个spark的程序。于是反思是不是我的项目问题。

看这篇文章https://support.datastax.com/hc/en-us/articles/207038146-DSE-Spark-job-initialisation-returns-java-lang-NoSuchFieldException-SHUTDOWN-HOOK-PRIORITY-

说的是classPath里面的Hadoop的jar包不要使用2.x的,需要使用内置的jar。

打印了classPath,把 /Users/yejianfeng/.m2/repository/org/apache 里面的hadoop文件夹改名了

看了下源码,大概是说在/Users/yejianfeng/.m2/repository/org/apache/spark/spark-core_2.10/1.6.3/spark-core_2.10-1.6.3-sources.jar!/org/apache/spark/util/ShutdownHookManager.scala

下面有个代码:

Try(Utils.classForName("org.apache.hadoop.util.ShutdownHookManager")) match {
      case Success(shmClass) =>
        val fsPriority = classOf[FileSystem]
          .getField("SHUTDOWN_HOOK_PRIORITY")
          .get(null) // static field, the value is not used
          .asInstanceOf[Int]
        val shm = shmClass.getMethod("get").invoke(null)
        shm.getClass().getMethod("addShutdownHook", classOf[Runnable], classOf[Int])
          .invoke(shm, hookTask, Integer.valueOf(fsPriority + 30))

      case Failure(_) =>
        Runtime.getRuntime.addShutdownHook(new Thread(hookTask, "Spark Shutdown Hook"));
    }

里面先获取FileSystem,然后再获取FileSystem的SHUTDOWN_HOOK_PRIORITY属性,而这个属性在当前的FileSystem中并不存在。看起来是个版本问题,而且是org.apache.hadoop.fs.FileSystem的版本问题。

发现我的FileSystem版本在pom里面已经设置的是2.7.1,查看了下源码,
public static final int SHUTDOWN_HOOK_PRIORITY = 10;

里面有这个属性。

使用ide的提示,我发现我的FileSystem被两个引用了

很明显,hadoop-core只有到1.2.1 于是我就尝试把hadoop-core从我的pom中移除,并且从mvn仓库中移除。

问题解决

可以在本机运行spark读取本地文件了



本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/p/7699881.html,如需转载请自行联系原作者

相关文章
|
4月前
|
Java
使用IDEA创建项目运行我的第一个JAVA文件输出Helloword
本文介绍了如何使用IDEA(IntelliJ IDEA)创建一个新的Java项目,并运行一个简单的Java程序输出"Hello Word"。文章详细展示了创建项目的步骤,包括选择JDK版本、设置项目名称和路径、创建包和类,以及编写和运行代码。最后,还展示了如何通过IDEA的运行功能来执行程序并查看输出结果。
223 4
使用IDEA创建项目运行我的第一个JAVA文件输出Helloword
|
3月前
|
分布式计算 大数据 Java
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
57 1
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
|
5月前
|
Java Maven 容器
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
使用IntelliJ IDEA的Artifacts功能,可以将项目依赖的第三方jar包打包进jar文件中,实现双击jar包即可直接运行。
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
|
5月前
|
Java PHP 数据安全/隐私保护
Java——IDEA如何运行单个文件
Java——IDEA如何运行单个文件
71 1
Java——IDEA如何运行单个文件
IDEA运行 支付宝案例
该博客文章提供了在IntelliJ IDEA中运行支付宝案例的指南,并分享了项目源码的GitHub地址以及使用说明。
|
5月前
|
SQL 前端开发 Java
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
这篇文章介绍了如何在IntelliJ IDEA中使用Maven将Spring Boot项目打包成可运行的jar包,并提供了运行jar包的方法。同时,还讨论了如何解决jar包冲突问题,并提供了在IDEA中同时启动Vue前端项目和Spring Boot后端项目的步骤。
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
|
6月前
|
SQL 弹性计算 资源调度
云服务器 ECS产品使用问题之bin/spark-sql --master yarn如何进行集群模式运行
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
7月前
|
JavaScript
IDEA打开vue项目并运行
IDEA打开vue项目并运行
208 1
|
6月前
|
Java Maven
idea没有Maven运行界面怎么办
idea没有Maven运行界面怎么办
|
7月前
|
监控 IDE Java
探索 IntelliJ IDEA 中 Spring Boot 运行配置选项及其作用
探索 IntelliJ IDEA 中 Spring Boot 运行配置选项及其作用
706 0