上面我们编译了源码,然后我们接下来用idea将源码导入到开发工具,并在idea上启动standlone的master和slave,方便我们调试。

1将项目导入到idea当中

hudi源码分析 之spark_ide

然后open as project即可。我看网上很多说,导入了,然后让maven自动导入依赖就行,但是不知道可能是我的网络问题,我遇到了很多问题,这里我分享出来,看是否能对你们有帮助。

2遇到的问题

1.导入到idea当中,spark-parent当中的pom文件一堆冒红。

hudi源码分析 之spark_spark_02


明明依赖都下完了,可还是冒红,让强迫症的我很不爽,所以首先就是要解决不冒红,多次点

hudi源码分析 之spark_hudi源码分析 之spark_03

这个不行后,我就决定,自己动手解决。

首先第一类冒红是找不到<spark.test.home>${spark.test.home}</spark.test.home>等这些测试的目录,像这些的我基本都注释掉了,然后自然而然也不会冒红了。

还有的是有的依赖下不下来,这就很奇怪了,为什么下不下来呢,我都编译通过了,然后我就去maven 仓库看下,仓库地址:https://mvnrepository.com/

我举个例子。

hudi源码分析 之spark_ide_04

比如这个依赖,version版本是2.12.10,那么我就去仓库搜一下这个仓库到底有没有这个依赖的2.12.10版本呢。

hudi源码分析 之spark_spark_05


发现根本没有,那怎么可能下的下来,只能自己手动改一下版本

hudi源码分析 之spark_ide_06

类似于这样的就需要自己去排查。
方法就是我上面举的例子那样的,还有的是仓库当中有,但是他就是硬是下不来,这时我建议你手动小改一下版本号,也是同样可以达到效果的。

就是比如

hudi源码分析 之spark_hudi源码分析 之spark_07


这个,他的版本是2.10,我发现

hudi源码分析 之spark_scala_08


仓库当中有,但是就是下不下来,所以只能手动改成2.9.8就可以了。很奇怪。。还有一种情况。

hudi源码分析 之spark_scala_09


这个jar包根本在仓库中找不到

hudi源码分析 之spark_spark_10


所以我只能曲线救国,把依赖换成了core

hudi源码分析 之spark_ide_11


这个样子,后面多加了个core,我想应该没问题吧。。

经过这样对spark-parent中pom的修修补补,最终pom中不报红了,完成了万里长征的第一步。

其实pom中某些依赖爆红,可能会遇到各种各样问题,所以见招拆招吧,灵活解决,我只是提供了一种思路。

2.解决了依赖,我们是不是要启动master了。

hudi源码分析 之spark_scala_12


右键master,然后点run,然后问题就来啦

第一个问题:

java.lang.ClassNotFoundException: scala.runtime.LazyRef

这是因为你可能修改了pom当中的scala version这个选项

hudi源码分析 之spark_scala_13

我不是本地安装的是scala 2.11版本的吗,然后我画蛇添足的改了这个,把这个改成了2.11的依赖版本,不能手贱。。改回去,这个最好不要碰,你下下来的spark源码scala.version写的是好多,就是好多,不要改,我以为改个次版本号没关系的,没想到出问题了。感觉scala对版本还是很严格的。

第二个问题:
改好了之后,我从右键RUN,这次出现了个贼诡异的问题。控制台没有任何输出,直接冒出了如下的话。

process finished with exit code 52 或者process finished with exit code 51
这个问题需要打断点定位下。

hudi源码分析 之spark_hudi源码分析 之spark_14

打个断点,一步一步往下走,你就可以看到异常了,一般是缺少了google的某项依赖,我是缺少了一个叫CacheLoder的依赖。

改这里,打开spark-parent的pom文件。

hudi源码分析 之spark_hudi源码分析 之spark_15

将provided改为compile(版本号我改是因为觉得之前的自带版本号太老了,改个比较新的试试~),对了,改了后记得从新打包!

第三个问题:
这次我又run了,还是8行,啥问题呢:
java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal 的解决办法

hudi源码分析 之spark_scala_16

打开core的pom文件,然后注释掉个东西(xml-apis)

hudi源码分析 之spark_ide_17

将test注释掉,然后git bash进入到core目录,单独打包core即可!

hudi源码分析 之spark_scala_18

mvn -DskipTests clean package

第四个问题:
Could not find spark-version-info.properties

这个问题就是你之前吧core执行了mvn clean了,所以你从新打包下core就行啦。

git bash 直接进入到spark-core
mvn -DskipTests clean package

第五个问题:
感觉马上就成功了,出现了这么个问题。
Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

这就很简单啦,下载一个winutils.exe(git上有)

我是把它放到HADOOP_HOME/bin目录下的。

hudi源码分析 之spark_scala_19

然后添加环境变量,重启电脑。

hudi源码分析 之spark_scala_20

问题解决。

3总结

经过上述的努力,终于可以起来了

启动master

hudi源码分析 之spark_ide_21

启动worker

hudi源码分析 之spark_scala_22

端口自己设定,自己对得上就行!

hudi源码分析 之spark_scala_23

大功告成,standlone模式本机起来啦!

最后我想总结一下,我看了网上许多搭建文档,以及自己搭建了无数次,其实每个人遇到的问题相同但也不同,我也不可能把所有错误列举出来,但是提供了一些方法,希望你们举一反三,遇到错误的时候不要惊慌,一步一步分析,错误终将解决。