源码获取与编译
- 直接从Spark官网获取源码或者从GitHub获取
下载源码
1 | wget https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0.tgz |
解压源码
1 | tar -zxf spark-2.4.0.tgz |
- Spark源码编译
此处不再啰嗦,直接去腾讯课堂,搜索“若泽大数据”即可找到编译视频。
源码导入IDEA
运行hive-thriftserver2
从spark-2.4.0-bin-2.6.0-cdh5.7.0/sbin/start-thriftserver.sh 脚本中找到 hive-thriftserver2 的入口类:
1 | org.apache.spark.sql.hive.thriftserver.HiveThriftServer2 |
配置运行环境
1 | Menu -> Run -> Edit Configurations -> 选择 + -> Application |
-Dspark.master=local[2] 代表使用本地模式运行Spark代码
运行之前需要做一件很重要的事情,将 hive-thriftserver 这个子项目的pom依赖全部由provided改为compile:
1 | <dependency> |
添加运行依赖的jars
1 | Menu -> File -> Project Structure -> Modules -> spark-hive-thriftserver_2.11 -> Dependencies 添加依赖 jars -> {Spark_home}/assembly/target/scala-2.11/jars/ |
中间遇到的问题
问题一
1 | spark\sql\hive-thriftserver\src\main\java\org\apache\hive\service\cli\thrift\ThriftCLIService.java |
解决办法: 在spark\sql\hive-thriftserver\src\gen\java右键中点Mark Directory as -> Sources Root即可
问题二
1 | Exception in thread "main" java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal |
解决办法:在 hive-thriftserve 子项目的pom文件中添加依赖
1 | <dependency> |
问题三
1 | java.net.BindException: Cannot assign requested address: Service 'sparkDriver' failed after 16 retries (starting from 0)! Consider explicitly setting the appropriate port for the service 'sparkDriver' (for example spark.ui.port for SparkUI) to an available port or increasing spark.port.maxRetries. |
解决办法: 在 /etc/hosts 文件中配置相应的地址映射。
成功运行
在 HiveThriftServer2 中打断点进行调试源码即可。
打一个断点如下所示:
就能看到断点所打印出来的信息。