【spark2】【源码学习】【环境编译】在idea导入spark源码,执行example并debug

    科技2022-08-20  102

    一直想搞清楚spark读取不同数据源时的分区是怎么决定的,趁着国庆有时间终于下决心来做这个事。关于这个分区数,很多说法,最后决定自己看下源码,也算是接触spark源码的第一步吧。挺多坑,零零散散花了2天多的时间,总算跑通spark源码里面的example了。mark一下。

    一、spark源码包下载&解压

    spark下载传送门(可能需要翻墙) 下载完,拷贝到自己想放的目录,双击即可解压得到项目文件夹。

    二、安装maven&scala

    2.1、 先到刚刚解压出来的spark源码根目录,打开pom.xml文件看下maven和scala的版本,安装对应的版本。

    scala - 2.11.12 maven - 3.5.4

    2.2、安装好后,使用命令查看版本

    maven的安装注意将源修改成阿里云的源,不然会慢到怀疑人生…

    到这里编译前的准备工作就完成了

    三、编译

    peterpan@PeterdeMBP ~ % cd Documents/work/projects/idea/spark-2.4.7 peterpan@PeterdeMBP spark-2.4.7 % pwd /Users/peterpan/Documents/work/projects/idea/spark-2.4.7 peterpan@PeterdeMBP spark-2.4.7 % mvn -T 4 -DskipTests clean package peterpan@PeterdeMBP spark-2.4.7 % peterpan@PeterdeMBP spark-2.4.7 % ... ... ... # after 30-60分钟 ... [INFO] [INFO] --- maven-source-plugin:3.0.1:jar-no-fork (create-source-jar) @ spark-examples_2.11 --- [INFO] Building jar: /Users/peterpan/Documents/work/projects/idea/spark-2.4.7/examples/target/spark-examples_2.11-2.4.7-sources.jar [INFO] [INFO] --- maven-source-plugin:3.0.1:test-jar-no-fork (create-source-jar) @ spark-examples_2.11 --- [INFO] Building jar: /Users/peterpan/Documents/work/projects/idea/spark-2.4.7/examples/target/spark-examples_2.11-2.4.7-test-sources.jar [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] Spark Project Parent POM 2.4.7 ..................... SUCCESS [ 2.603 s] [INFO] Spark Project Tags ................................. SUCCESS [ 5.171 s] [INFO] Spark Project Sketch ............................... SUCCESS [ 13.367 s] [INFO] Spark Project Local DB ............................. SUCCESS [ 6.400 s] [INFO] Spark Project Networking ........................... SUCCESS [ 10.813 s] [INFO] Spark Project Shuffle Streaming Service ............ SUCCESS [ 6.643 s] [INFO] Spark Project Unsafe ............................... SUCCESS [ 19.661 s] [INFO] Spark Project Launcher ............................. SUCCESS [ 10.826 s] [INFO] Spark Project Core ................................. SUCCESS [02:59 min] [INFO] Spark Project ML Local Library ..................... SUCCESS [ 32.702 s] [INFO] Spark Project GraphX ............................... SUCCESS [01:19 min] [INFO] Spark Project Streaming ............................ SUCCESS [02:24 min] [INFO] Spark Project Catalyst ............................. SUCCESS [04:15 min] [INFO] Spark Project SQL .................................. SUCCESS [03:46 min] [INFO] Spark Project ML Library ........................... SUCCESS [04:41 min] [INFO] Spark Project Tools ................................ SUCCESS [ 5.573 s] [INFO] Spark Project Hive ................................. SUCCESS [03:16 min] [INFO] Spark Project REPL ................................. SUCCESS [ 29.623 s] [INFO] Spark Project Assembly ............................. SUCCESS [ 5.777 s] [INFO] Spark Integration for Kafka 0.10 ................... SUCCESS [ 52.390 s] [INFO] Kafka 0.10+ Source for Structured Streaming ........ SUCCESS [01:44 min] [INFO] Spark Project Examples ............................. SUCCESS [ 49.188 s] [INFO] Spark Integration for Kafka 0.10 Assembly .......... SUCCESS [ 8.700 s] [INFO] Spark Avro 2.4.7 ................................... SUCCESS [01:14 min] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 17:01 min (Wall Clock) [INFO] Finished at: 2020-10-05T19:08:05+08:00 [INFO] ------------------------------------------------------------------------ peterpan@PeterdeMBP spark-2.4.7 %

    四、导入idea

    4.1、编译完成后,导入idea,

    【open or import】 >> {spark-2.4.7}/pom.xml >> Open as Project

    五、修改配置

    5.1、将idea默认的maven改成上面安装的maven路径

    【Preferences】 >> 【Build,Execution,Deployment】 >> 【Build Tools】 >> 【Maven】

    5.2、设置一些执行参数

    【Add Configuration】>> 【+】 >> 【Application 】 5.3、运行测试类【JavaWordCount】 && 报错

    六、报错解决

    6.1、跟spark相关的【java.lang.ClassNotFoundException】,原因都是example module中pom.xml spark的依赖scope是provided。

    粗暴的方法: 【<scope>provided</scope> 】替换为【<!–<scope>provided</scope>–>】

    6.2、这个报错仍是example module 中 pom.xml provided的问题

    hadoop.deps.scope 设置为compile hive.deps.scope 设置为compile parquet.deps.scope 设置为compile ps. 设置为compile等同于注释掉scope,因为默认是compile

    6.3、这个也是provide的问题,但不在example module。而是在根目录的pom.xml

    将根目录中pom.xml的guava对应的scope设置为compile

    6.4、这个也是provide的问题,但不在example module。而是在根目录的pom.xml

    在根目录pom.xml 将 org.eclipse.jetty 对应的provided改为compile

    6.5、报错跟scala相关的类 Not Found

    【File】>> 【Project Structure】>> 【global libraries】 >> 【+】 >> 【选择scala版本】 >> 【右键】>> 【scala add to modules】>> 【spark-example_2.11】

    6.6、成功跑通,后面 6.7、可以debug,后续就可以随意查看各段代码的值,离了解spark分区数又近了一步

    环境问题总是各种各样的坑,如果遇到其他报错,可以留言一起研究。

    Processed: 0.017, SQL: 9