spark2.1源码调试

spark的源码使用了两种构建工具。maven和sbt。

很多人都推荐使用idea+sbt来导入spark的源码。我自己用idea+sbt试了一下。给sbt添加镜像源了,还是没有导入成功。也许是我对sbt不够了解吧。我感觉国内对sbt支持的不好,所以劝大家还是别用sbt了。

然后我又换成EclipseIDE + maven。给maven添加了镜像源,拉jar包确实没问题了。但是eclipse直接卡死了,而且各种报错。可以看出eclipse的插件对scala的确支持的不是很好。尤其是模块化的maven工程。

最后我选择了Idea+maven的方式。不得不说intellij的确做的好,启动速度快,界面还漂亮。一直以为intellij是收费的,所以不关注它。最近才知道竟然有一个社区版的。果断就选它了。再看看github上对Spark的介绍:“Spark is built using Apache Maven.”,咦?sbt哪儿去了?spark in github

重要提示:如果你跟我一样,选择以maven工程的方式导入。先别急着导入,配置好镜像源,然后进入到spark源码顶层目录。命令行下执行 mvn -DskipTests clean package。 这样拉jar包会快些。
注意虽然配置了镜像源,速度也很快。但是拉jar包的时候有的jar包会有问题。这是就要把本地仓库里有问题的jar删掉,再拉取一次。拉完了之后再导入到intellij里。 导入到intellij之后,
View>>Tool Windows>>Maven Projects>>点击小图标Generate Sources and Update Folders For All Projects.
如果你在pom.xml里新增加了依赖,Reimport一下就好了(相当于eclipse里的maven>>update project)。

maven的镜像源配置。不要用oschina了,别问我为什么。用aliyun的。

<mirrors>
    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
    <mirror>
        <id>repo2</id>
        <mirrorOf>central</mirrorOf>
        <name>Human Readable Name for this Mirror.</name>
        <url>http://repo2.maven.org/maven2/</url>
    </mirror>

    <mirror>
        <id>ibiblio</id>
        <mirrorOf>central</mirrorOf>
        <name>Human Readable Name for this Mirror.</name>
        <url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
    </mirror>
    <mirror>
        <id>jboss-public-repository-group</id>
        <mirrorOf>central</mirrorOf>
        <name>JBoss Public Repository Group</name>
        <url>http://repository.jboss.org/nexus/content/groups/public</url>
    </mirror>
</mirrors>

intellij配置maven:
File>>Other Settings>>Default Settings>>Build, Execution, Deployment>>Maven>>Maven home Directory>>your maven home path

环境:
ubuntu16.04
maven3.3.9
Oracle JDK1.8
IntelliJ IDEA community 2017.1.4

导入完之后我想在intellij里直接运行spark-example里的JavaSparkPi。你会发现很多类找不到。原因是
spark-example这个模块里的很多jar包都是provided的。这个例子本意是你直接在spark的shell里运行的,shell脚步在bin目录下,所有依赖的jar包都在jars文件夹下,所以人家给个provided完全没问题。但是如果你直接在intellij里运行当然不行。 要把pom.xml里所有的provided替换成compile。还要加上其他jar包的依赖,如jetty。

要运行JavaSparkPi这样例子,需要加上这几个jar包:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>14.0.1</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-server</artifactId>
    <version>9.3.11.v20160721</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-util</artifactId>
    <version>9.3.11.v20160721</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-servlet</artifactId>
    <version>9.3.11.v20160721</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-webapp</artifactId>
    <version>9.3.11.v20160721</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-security</artifactId>
    <version>9.3.11.v20160721</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-http</artifactId>
    <version>9.3.11.v20160721</version>
    <scope>compile</scope>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-common</artifactId>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <scope>compile</scope>
</dependency>

然后运行的时候会报错
Exception in thread “main” org.apache.spark.SparkException: A master URL must be set in your configuration

你需要指定spark运行在本地模式:Run>>Edit Configurations>>VM Options>>写上-Dspark.master=local
然后再运行就OK了。最后控制台输出如下信息:

17/06/23 15:37:33 INFO TaskSchedulerImpl: Removed TaskSet 0.0, whose tasks have all completed, from pool
17/06/23 15:37:33 INFO DAGScheduler: ResultStage 0 (reduce at JavaSparkPi.java:54) finished in 0.430 s
17/06/23 15:37:33 INFO DAGScheduler: Job 0 finished: reduce at JavaSparkPi.java:54, took 0.455996 s
Pi is roughly 3.14166
17/06/23 15:37:33 INFO AbstractConnector: Stopped Spark@6c45ee6e{HTTP/1.1,[http/1.1]}{0.0.0.0:4040}
17/06/23 15:37:33 INFO SparkUI: Stopped Spark web UI at http://192.168.40.115:4040
17/06/23 15:37:33 INFO MapOutputTrackerMasterEndpoint: MapOutputTrackerMasterEndpoint stopped!
17/06/23 15:37:33 INFO MemoryStore: MemoryStore cleared
17/06/23 15:37:33 INFO BlockManager: BlockManager stopped
17/06/23 15:37:33 INFO BlockManagerMaster: BlockManagerMaster stopped
17/06/23 15:37:33 INFO OutputCommitCoordinator$OutputCommitCoordinatorEndpoint: OutputCommitCoordinator stopped!
17/06/23 15:37:33 INFO SparkContext: Successfully stopped SparkContext
17/06/23 15:37:33 INFO ShutdownHookManager: Shutdown hook called
17/06/23 15:37:33 INFO ShutdownHookManager: Deleting directory /tmp/spark-8fbff2d9-a87a-408e-bd4c-b5a4d4252762

Process finished with exit code 0
时间: 2024-10-26 21:14:57

spark2.1源码调试的相关文章

急急急 急急急急急急 求一个ASP.NET(SQLSERVER或ACCESS)网上书店源码 调试好了的 在线等

问题描述 急急急求一个ASP.NET(SQLSERVER或ACCESS)网上书店源码调试好了的在线等 解决方案 解决方案二:本人邮箱286130180.qq.com解决方案三:有没有啊?兄弟,有的话,给我一份,谢谢兄弟了fraud1117@163.com解决方案四:楼上两个兄弟,你们到网上搜搜,然后自己调试一下解决方案五:你把petshop改改不就行了

MariaDB 源码调试

作者:王成瑞 南京华泰证券信息技术部架构师 2837796568@@qq.comMariaDB 源码编译 [root@jg-72 source]# pwd /data/source [root@jg-72 source]# ls mariadb-10.1.11.tar.gz 先将源码压缩包解压缩 tar -zxvf mariadb-10.1.11.tar.gz 进入到BUILD子目录,它已经提供了一些一键编译的脚本 cd mariadb-10.1.11/BUILD 选择执行 compile-am

深入理解Tomcat系列之二:源码调试环境搭建

前言 最近对Tomcat的源码比较感兴趣,于是折腾了一番.要调试源码首先需要搭建环境,由于参考了几篇帖子发现都不怎么靠谱,最后还是折腾出来了,然而却花了足足一天的时间去搭建这个环境.发现都不是帖子的问题,主要是自己在搭建过程中忽略了一些细节,最后构建工程的时候一直失败,我也是醉了.所以本着共享的原则,把一些关键的步骤以及一些需要注意的细节写在博客中以飨读者. 下载Tomcat7源码 下载源码有多种方式,可以通过SVN直接拷贝到本地,svn地址在这里 下载之后源码的目录是这样的: 注意:要把bui

struts2源码调试问题

问题描述 我在myeclipse中新建了一个web工程测试struts2,把下载的struts2-core.jar的相关java源码加入到类路径中,目的是为工程中直接使用源码编译成的struts2-core.jar中的类,工程就不依赖lib库中的struts2-core.jar了.但我在struts2的相关java文件中打断点调试时,断点进入的地方并不是该java文件,而是其他工程中依赖的struts2-core.jar中的class,让我"Attach Source...".我把有关

JSP源码调试500错误,在线等

问题描述 在网上下载了别人的源码,在本地调试,出现500错误,不知道改怎么处理,在线等,现将异常贴出,请高手帮忙2011-2-2614:37:14org.apache.catalina.core.StandardWrapperValveinvoke严重:Servlet.service()forservletjspthrewexceptionjava.lang.NullPointerExceptionatcn.jcenterhome.web.filter.CommonFilter.getUserA

源码调试正常运行,Debug就崩溃

问题描述 调用DLL时候,发生的intret=ReadCard_cst_13MM1(comm,reflzdata,"0");求大神支援 解决方案 解决方案二:什么错误,贴出来啊,给看这个怎么猜啊.解决方案三:ReadCard_cst_13MM1,目测这是第三方dll的API吧?解决方案四:把dll放大debug文件夹啊,重新生成

etl-kettle5.0源码如何调试

问题描述 kettle5.0源码如何调试 最近在学习ETL,现在涉及到kettle5.0的源码调试,但是因为网上5.0调试的资料特别少,希望哪位可以教教我如何调试kettle5.0源码

查看和调试Qt源码

简述 在调试程序的时候,有时需要调试进入 Qt 源码,这不仅有利于我们了解内部实现机制,而且对于解决一些隐蔽性问题很有帮助. 都知道 F11 是"单步进入",可是在调试的过程中,按下 F11 却无法进入.有人说需要静态编译 Qt 才可以,其实不然,只需要简单的几个配置就可以搞定. 简述 Qt 版本及安装 配置 Qt Creator 源码调试 更多参考 版权所有:一去丶二三里,转载请注明出处:http://blog.csdn.net/liang19890820 Qt 版本及安装 Qt 针

《深入理解SPARK:核心思想与源码分析》(第1章)

       自己牺牲了7个月的周末和下班空闲时间,通过研究Spark源码和原理,总结整理的<深入理解Spark:核心思想与源码分析>一书现在已经正式出版上市,目前亚马逊.京东.当当.天猫等网站均有销售,欢迎感兴趣的同学购买.我开始研究源码时的Spark版本是1.2.0,经过7个多月的研究和出版社近4个月的流程,Spark自身的版本迭代也很快,如今最新已经是1.6.0.目前市面上另外2本源码研究的Spark书籍的版本分别是0.9.0版本和1.2.0版本,看来这些书的作者都与我一样,遇到了这种问