一直想搞清楚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 %
...
...
...
...
[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分区数又近了一步
环境问题总是各种各样的坑,如果遇到其他报错,可以留言一起研究。